寫在前面
如果您對(duì)音視頻技術(shù)感興趣,可以訂閱我的專題:音視頻專輯
也可以關(guān)注我的簡(jiǎn)書賬戶: 張芳濤禽笑,我后期會(huì)發(fā)布更多的音視頻以及圖像處理方面的文章。
正文
比特率和幀速率是視頻的基本特征蠢络,它們的正確設(shè)置對(duì)整體視頻質(zhì)量非常重要小泉。 如果我們知道所有包含的媒體流的比特率和持續(xù)時(shí)間配喳,我們可以計(jì)算輸出文件的最終大小。 由于在使用FFmpeg工具時(shí)對(duì)幀速率和比特率的理解很重要,因此包含每個(gè)術(shù)語(yǔ)的簡(jiǎn)短描述飒焦。
幀率(頻率)的介紹
幀速率是編碼成視頻文件的每秒幀數(shù)(FPS或fps)蜈膨,人眼需要至少約15 fps來(lái)觀看連續(xù)運(yùn)動(dòng)。 幀率也稱為幀頻牺荠,其單位是赫茲(Hz)翁巍,LCD顯示器通常具有60 Hz的頻率。
有兩種幀速率 - 隔行(在FPS編號(hào)后表示為i)和逐行(在FPS編號(hào)后表示為p)休雌。
在電視中使用隔行幀率:
*NTSC標(biāo)準(zhǔn)使用60i fps灶壶,意味著每秒隔行掃描60次(30幀)
- PAL和SECAM標(biāo)準(zhǔn)使用50i fps,這意味著50隔行場(chǎng)杈曲,相當(dāng)于每秒25幀24p驰凛,25p和30p的逐行幀率被用于電影行業(yè)。 高端HDTV產(chǎn)品使用較高的幀頻50p / 60p担扑。
常見(jiàn)的視頻幀率
FPS i=interlaced p=progressive |
描述 |
---|---|
24p or 23.976 | 從20世紀(jì)20年代開(kāi)始胚宦,電影行業(yè)的標(biāo)準(zhǔn)幀速率,所有的電影都是以這個(gè)頻率拍攝的。 當(dāng)這些電影被采用到NTSC電視廣播時(shí)枢劝,幀速率降低到24×1000/1001 = 23.976值井联,但是對(duì)于PAL / SECAM電視,電影的幀速率增加到25幀/秒您旁。 |
25p | 由于25個(gè)逐行掃描視頻可輕松轉(zhuǎn)換為50個(gè)隔行掃描電視場(chǎng)烙常,因此電影頻率為50赫茲(PAL和SECAM標(biāo)準(zhǔn))的國(guó)家中的電影和電視的標(biāo)準(zhǔn)幀頻。 |
30p | 常見(jiàn)的視頻幀速率被冒,常用于數(shù)碼相機(jī)和攝像機(jī)军掂。 它可用于60赫茲(NTSC)隔行場(chǎng)的電視廣播。 |
50i | PAL和SECAM電視的標(biāo)準(zhǔn)場(chǎng)率(隔行幀率)昨悼。 |
60ior 59.94 | NTSC電視的標(biāo)準(zhǔn)場(chǎng)頻率蝗锥,在彩電發(fā)明之后,幀速率被降低到60 * 1000/1001 = 59.94的值率触,以防止色度副載波和聲音載波之間的干擾终议。 |
50p/60p | HDTV(高清晰度電視)的通用幀頻。 |
48p | 提議的幀速率葱蝗,目前經(jīng)過(guò)測(cè)試了 |
72p | 提議的幀速率穴张,目前經(jīng)過(guò)測(cè)試了 |
120p | 為UHDTV(超高清晰度電視)標(biāo)準(zhǔn)化的漸進(jìn)式格式,計(jì)劃成為UHDTV的單一全球“雙精度”幀速率(而不是使用PAL標(biāo)準(zhǔn)的100 Hz和NTSC標(biāo)準(zhǔn)的119.88 Hz) |
幀率設(shè)置
使用- r選項(xiàng)
要設(shè)置視頻幀速率两曼,我們?cè)谳敵鑫募笆褂?r選項(xiàng)皂甘,語(yǔ)法是:
ffmpeg -i input -r fps output
例如改變電影的幀率。avi文件從25到30 fps值悼凑,我們使用命令:
ffmpeg -i input.avi -r 30 output.mp4
我給大家演示一下偿枕,我把我的根目錄下面的一個(gè)SDWebimage.mp4文件輸出為30fps的test.mp4文件 使用的命令如下:(你用自己的視頻文件做測(cè)試,別瞎模仿)
ffmpeg -i /Users/zhangfangtao/SDWebImage.mp4 -r 30 test.mp4
看到?jīng)]户辫,下面真的就出來(lái)了輸出的test.mp4:
先讓你們看一下之前的視頻信息是什么:
再讓你們看一下現(xiàn)在的視頻信息是什么:
- 有沒(méi)有發(fā)現(xiàn)渐夸,重新編碼以后不僅僅fps變化了,Data Rate也改變了?因?yàn)槲覜](méi)有設(shè)置渔欢,F(xiàn)Fmpeg使用了默認(rèn)的比特率墓塌,重新編碼之后,自動(dòng)降碼了奥额。所以苫幢,建議各位做轉(zhuǎn)碼的時(shí)候把參數(shù)填的全面一些,要不然會(huì)有意外存在垫挨。
當(dāng)使用原始輸入格式時(shí)态坦,-r選項(xiàng)也可以在輸入之前使用。
使用fps過(guò)濾器
另一種設(shè)置幀速率的方法是使用fps過(guò)濾器棒拂,這在過(guò)濾鏈中尤其有用。
描述 | 將視頻幀速率更改為指定的值。 |
---|---|
Syntax | fps=fps=number_of_frames |
fps | 指定輸出幀速率的數(shù)字或預(yù)定義縮寫帚屉。 |
例如谜诫,要更改剪輯的輸入幀速率。mpg文件到值25攻旦,我們使用命令喻旷。
ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm
我親自給大家測(cè)試一下,我用的是我剛才轉(zhuǎn)碼出來(lái)的test.mp4牢屋,轉(zhuǎn)碼成為test.webm,具體的命令行如下:
ffmpeg -i /Users/zhangfangtao/test.mp4 -vf fps=fps=25 test.webm
幀速率的預(yù)定義值。
除了數(shù)值烙无,設(shè)置幀率的兩種方法都接受下一個(gè)預(yù)定義的文本值:
幀速率的預(yù)定義縮寫锋谐。
縮寫 | 精確值 | 相應(yīng)的FPS(相應(yīng)的幀) |
---|---|---|
ntsc-film | 24000/1001 | 23.97 |
film | 24/1 | 24 |
pal, qpal, spal | 25/1 | 25 |
ntsc, qntsc, sntsc | 30000/1001 | 29.97 |
例如,設(shè)置幀速率為29.97 fps截酷,接下來(lái)的3個(gè)命令給出了相同的結(jié)果:這個(gè)就不用我給大家示范了吧涮拗。。迂苛。
ffmpeg -i input.avi -r 29.97 output.mpg
ffmpeg -i input.avi -r 30000/1001 output.mpg
ffmpeg -i input.avi -r ntsc output.mpg
位(數(shù)據(jù))率的介紹
比特率(也是比特率或數(shù)據(jù)率)是決定整體音頻或視頻質(zhì)量的參數(shù)三热。 它規(guī)定了每時(shí)間單位處理的位數(shù),在FFmpeg中三幻,位速率以每秒位數(shù)表示就漾。
類型的比特率
類型 | 縮寫 | 描述 |
---|---|---|
平均比特率 | ABR | 平均每秒處理的位數(shù),該值也用于VBR編碼念搬,需要時(shí)是輸出的某個(gè)文件大小 |
恒定比特率 | CBR | 每秒處理的比特?cái)?shù)是恒定的抑堡,這對(duì)于存儲(chǔ)是不實(shí)際的,因?yàn)榫哂锌焖龠\(yùn)動(dòng)的部分需要比靜態(tài)比特更多的比特锁蠕,CBR主要用于多媒體流 |
可變比特率 | VBR | 每秒處理的比特?cái)?shù)是可變的夷野,復(fù)雜的場(chǎng)景或聲音被編碼更多的數(shù)據(jù)并與CBR進(jìn)行比較,相同尺寸的文件的VBR質(zhì)量比CBR更好(VBR編碼比CBR需要更多的時(shí)間和CPU功率 荣倾,但最近的媒體播放器可以充分解碼VBR悯搔。) |
設(shè)置比特率
比特率決定了存儲(chǔ)1秒編碼流的位數(shù),它使用-b選項(xiàng)設(shè)置舌仍,以區(qū)分推薦使用-b:a或-b:v格式的音頻和視頻流妒貌。 例如,要設(shè)置總體1.5 Mbit / s的比特率铸豁,我們可以使用以下命令:
ffmpeg -i film.avi -b 1.5M film.mp4
我是用的是我電腦桌面上的一個(gè)視頻灌曙,使用的代碼如下:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -b 1.5M newTest.mp4
原來(lái)的視頻信息是:
轉(zhuǎn)碼之后的視頻信息是:
如果可能的話,ffmpeg使用一個(gè)可變比特率(VBR)节芥,并對(duì)比具有快速運(yùn)動(dòng)的部分具有更少比特的靜態(tài)部分進(jìn)行編碼在刺。 ffmpeg通常用于使用高級(jí)編解碼器來(lái)降低輸出文件的比特率和相應(yīng)的文件大小逆害,例如:
ffmpeg -i input.avi -b:v 1500k output.mp4
該命令將輸入比特率更改為每秒1500千比特。
在我電腦上測(cè)試的命令行是:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -b:v 1500k /Users/zhangfangtao/Desktop/newTest.mp4
轉(zhuǎn)碼之后的結(jié)果如下圖:
固定比特率(CBR)設(shè)置
例如視頻會(huì)議之類的實(shí)時(shí)視頻流蚣驼,可以使用固定的比特率魄幕,因?yàn)閭鬏數(shù)臄?shù)據(jù)不能被緩沖。為了設(shè)置輸出的恒定比特率颖杏,三個(gè)參數(shù)必須具有相同的值:比特率(-b選項(xiàng))纯陨、最小速率(-minrate)和最大速率(-maxrate)。對(duì)于minrate和maxrate選項(xiàng)可以添加一個(gè)流指示符留储,maxrate選項(xiàng)需要設(shè)置一個(gè)-bufsize選項(xiàng)(比特的速率控制緩沖區(qū)大小)翼抠。例如,要設(shè)置0.5 Mbit/s的CBR获讳,我們可以使用以下命令:
ffmpeg -i in.avi -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M out.mkv
我自己測(cè)試的命令行是:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M /Users/zhangfangtao/Desktop/newTest.mp4
輸出的視頻信息是:
設(shè)置輸出文件的最大尺寸
為了使輸出文件的大小保持一定的值阴颖,我們使用-fs選項(xiàng)(文件大小的縮寫),期望值以字節(jié)為單位赔嚎。 例如膘盖,要指定10兆字節(jié)的最大輸出文件大小,我們可以使用以下命令:
ffmpeg -i input.avi -fs 10MB output.mp4
給大家看一下我自己的測(cè)試命令行:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -fs 1MB /Users/zhangfangtao/Desktop/newTest.mp4
結(jié)果可能要讓大家失望了尤误,我設(shè)置的1MB的大小侠畔,結(jié)果輸出的文件將近8MB(ーー゛)我去。损晤。软棺。
我把大小的控制設(shè)置成1024K,就會(huì)精確很多尤勋,新的命令行:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -fs 1024K /Users/zhangfangtao/Desktop/newTest.mp4
再看一下結(jié)果:
文件的大小計(jì)算
編碼輸出的最終文件大小是音頻和視頻流大小的總和喘落。以字節(jié)為單位的視頻流大小的方程是(由比特到字節(jié)的轉(zhuǎn)換為8):
video_size = video_bitrate * time_in_seconds / 8
如果音頻未壓縮,其大小由公式計(jì)算:
audio_size = sampling_rate * bit_depth * channels * time_in_seconds / 8
要計(jì)算壓縮音頻流的文件大小最冰,我們需要知道它的比特率和方程瘦棋。
audio_size = bitrate * time_in_seconds / 8。
例如暖哨,用1500 kbits/s的視頻比特率和128 kbits/s音頻比特率計(jì)算10分鐘視頻剪輯的最終大小赌朋,我們可以使用這些公式:
file_size = video_size + audio_size
file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8
file_size = (1500 kbit/s + 128 kbits/s) * 600 s
file_size = 1628 kbit/s * 600 s
file_size = 976800 kb = 976800000 b / 8 = 122100000 B / 1024 = 119238.28125 KB
file_size = 119238.28125 KB / 1024 = 116.443634033203125 MB ≈ 116.44 MB
- 1 byte (B) = 8 bits (b)
- 1 kilobyte (kB or KB) = 1024 B
- 1 megabyte (MB) = 1024 KB, 等.
最終文件的大小比計(jì)算的要大一些,因?yàn)榘艘粋€(gè)muxing開(kāi)銷和文件元數(shù)據(jù)篇裁。
都是計(jì)算題沛慢,我就不發(fā)表什么個(gè)人的測(cè)試數(shù)據(jù)了。达布。团甲。