(五)關(guān)于壓制的背景知識(shí),開(kāi)始用ffmpeg壓制視頻:上手-b參數(shù)
這次我們來(lái)說(shuō)說(shuō)如何用ffmpeg壓制視頻,還有回答第三期留下的問(wèn)題。

這之前要有這么一個(gè)認(rèn)識(shí):什么叫做壓制視頻?或者說(shuō)壓制音頻、字幕?
一般我們平常說(shuō)的比如720p、1080p、分辨率多少、畫(huà)質(zhì)好不好、視頻大小多少……也有人說(shuō)壓制很簡(jiǎn)單,或者很難,有時(shí)弄來(lái)弄去畫(huà)質(zhì)還是糊,有時(shí)按照以前成功過(guò)的設(shè)置就都可以,但有些概念參數(shù)是什么意思不太懂……本文主要是解決這些疑惑的,并在此基礎(chǔ)上開(kāi)始用ffmpeg壓制視頻。
一、背景引入
首先,一般意義上的壓制視頻是:用符合需求的碼率壓制出盡量高的“觀感質(zhì)量”。
“觀感質(zhì)量”只是通俗說(shuō)的看上去的質(zhì)量,它不等同于視頻的實(shí)際質(zhì)量?!案哂^感質(zhì)量”通俗說(shuō)就是視頻播放很流暢,看上去很清晰,聲音聽(tīng)起來(lái)很順暢、飽滿?!按a率”又叫比特率(bitrate),每秒鐘傳輸?shù)谋忍匚粩?shù),具體概念搜索一下百科就挺明白了。就像“速度”,碼率的單位是kbps,千位每秒。
直接查看視頻文件“屬性-詳細(xì)信息”就可以知道它的碼率大小。(不同容器格式顯示的信息不一樣,這里是mp4)

例如這個(gè)視頻,它的視頻(僅畫(huà)面)碼率就是這里的數(shù)據(jù)速率,音頻(視頻的聲音)碼率是這里的比特率。
視頻畫(huà)面碼率(數(shù)據(jù)速率)+視頻聲音碼率(音頻比特率)=碼率(總比特率)。
碼率是直接決定平常說(shuō)的“視頻大小”的,碼率越大,視頻體積大小就越大。比如up做一個(gè)這樣的壓制視頻操作:一部100分鐘左右的電影,大概6000kbps碼率的話它的大小有4.2g左右,同樣時(shí)長(zhǎng)如果碼率只有2300kbps,這電影的大小就只有約1.6g。視頻實(shí)際質(zhì)量損失了很多,但音畫(huà)質(zhì)在觀感上幾乎沒(méi)啥變化。
所以,碼率或者“視頻大小”,對(duì)視頻觀感來(lái)說(shuō)沒(méi)有什么很決定的關(guān)系,而與視頻實(shí)際質(zhì)量有著“不可逆的正比”關(guān)系。不是單純說(shuō)碼率越高,視頻很大,10g的視頻,視頻觀感就一定越好,實(shí)際質(zhì)量就一定越高。雖然在不同的編碼格式下,要達(dá)到幾乎一樣的觀感,所要求的碼率可能有高低,但我們可以壓制視頻的時(shí)候不改變編碼格式,只把碼率調(diào)高,視頻的音畫(huà)質(zhì)感覺(jué)會(huì)提高很多嗎?會(huì)提高嗎?
顯然不可能。可有時(shí)我們又看到,下載了一個(gè)十幾二十g的電影,“觀感質(zhì)量”確實(shí)比相同電影的兩三g好很多啊?這涉及到視頻來(lái)源以及壓制損耗多少的問(wèn)題。
壓制視頻,對(duì)視頻實(shí)際質(zhì)量來(lái)說(shuō)一定是一個(gè)從高到低的過(guò)程。因此,用于壓制的視頻的文件來(lái)源或者網(wǎng)絡(luò)地址源等,就決定了我們的壓制質(zhì)量“頂點(diǎn)”。字幕組或者官方版權(quán)方發(fā)布等壓制后上傳的視頻,他們所用的“片源”實(shí)際質(zhì)量可能會(huì)有不同。實(shí)際質(zhì)量越高,按照相應(yīng)的壓制需求,如果不是有意增大壓制損耗的話,一般我們看到下載到的,反過(guò)來(lái)對(duì)我們是“片源”的視頻,它的實(shí)際質(zhì)量也會(huì)越高。而我們又將這些“片源”作為素材再創(chuàng)作壓制上傳,質(zhì)量就都更低了。壓制視頻,盡量找到更高實(shí)際質(zhì)量的“片源”非常重要。
總而言之,壓制視頻即損失“觀感質(zhì)量”與實(shí)際質(zhì)量,從高到低且不可逆。實(shí)際質(zhì)量能決定“觀感質(zhì)量”,反之不然。我們一般按需求去取舍實(shí)際質(zhì)量,但一定保證“觀感質(zhì)量”在線。
二、-b參數(shù)的學(xué)習(xí)
“-b”,“bitrate,比特率”的意思,顧名思義就是用它來(lái)調(diào)控設(shè)置比特率。例如“-b 3000k”表示將輸入文件的視頻碼率(數(shù)據(jù)速率)設(shè)置為3000kbps。
提一下對(duì)舊版本來(lái)說(shuō)有考慮單位的問(wèn)題。如果ffmpeg默認(rèn)單位是kbps,那就是輸入“-b 3000”,其它涉及比特率方面的參數(shù)同理。現(xiàn)在一般沒(méi)有了,默認(rèn)單位bps。
可這樣我們沒(méi)有設(shè)定音頻比特率是多少,ffmpeg會(huì)自動(dòng)默認(rèn)為128kbps的。所以一般不直接用“-b”的這個(gè)形式。和“-c”類似,我們用“-b:v”來(lái)限定只設(shè)置視頻畫(huà)面比特率,“-b:a”來(lái)限定只設(shè)置視頻聲音比特率。如“-b:v 2500k”、“-b:a 320k”。
注意,“-b”參數(shù)不能和“-c copy”一起使用,這是互相矛盾的。“-c copy”是照抄復(fù)制,那還怎么壓制重新設(shè)定比特率吶?
三、開(kāi)始用ffmpeg壓制視頻
現(xiàn)在,我們的壓制命令行出來(lái)了:
ffmpeg -i .\input.mp4 -b:v 2000k -b:a?320k .\output.mp4
ffmpeg會(huì)默認(rèn)以輸入視頻原來(lái)的編碼格式進(jìn)行編碼,如下圖:

也可以同時(shí)進(jìn)行轉(zhuǎn)碼操作,只是不能用“-c copy”而已。例如:
ffmpeg -i?.\input.mp4 -b:v 2000k -c:a?copy .\output.avi
ffmpeg -i?.\input.mp4 -b:v 2000k -b:a?320k -f wmv .\output.wmv
ffmpeg -i .\input.webm -b:v 1800k -b:a 192k -c:v h264 -c:a aac .\output.mp4
通過(guò)比特率的設(shè)置,我們便能解決一些轉(zhuǎn)碼尤其是轉(zhuǎn)換編碼格式之后觀感畫(huà)質(zhì)損失的問(wèn)題。至于其它更多的壓制參數(shù)以及一些求精確的設(shè)置,咱們下次再說(shuō)~
感謝你觀看到這里。