最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

(七)控制視頻畫面碼率的方式背景,ffmpeg常用壓制音視頻參數(shù)總結(jié)

2020-02-16 15:05 作者:思思陸思思  | 我要投稿

往期回顧。

這期我們來了解學習不同的控制碼率方式以及ffmpeg用于壓制的常用參數(shù)。像設(shè)置幀率、分辨率、音頻采樣率、聲道等。另外,上期命令行壓制出來的視頻,通常輸出的視頻畫面最終碼率都還可以,和所設(shè)置的一般相差小于兩百。但有時也會有偏差過大的情況,up這一般是比設(shè)置的多出大概幾百,甚至上千。現(xiàn)在我們也來解決這個問題。



一、控制視頻畫面碼率的方式背景

這塊算是視頻壓制處理的背景知識,不只限于ffmpeg。

控制碼率方式,是指通過什么方式來控制編碼器的輸出碼率或解碼器的輸入碼率,進而設(shè)置音視頻的最終碼率。這個最終碼率比如指視頻畫面碼率、視頻聲音碼率、總比特率、pr里的“目標碼率”……看我們具體操作的是什么。

這里介紹的是視頻畫面碼率的控制方式。大體分為兩類:固定碼率(CBR,costant bit rate)、可變碼率(VBR,variable bit rate)。

其中可變碼率(VBR)可分為:二次編碼(2pass)、固定質(zhì)量(CRF,constant rate factor)、平均碼率(ABR,average bit rate)。

我們接觸比較多的通常就是這幾個。up目前傾向于認為ffmpeg是默認以ABR方式控制碼率的,不然如果是CBR的話那應(yīng)該會精準很多(比如設(shè)定3000k壓制出來是2994k左右這樣)。

因此,顧名思義,CBR方式是通過固定之前說的輸出或輸入碼率值來設(shè)置最終碼率的,VBR方式就是說這個輸出或輸入的碼率可以變動。2pass方式進行兩次編碼,第一次先預(yù)算全程的碼率,第二次再運算輸出,所以比較耗時。


但是實際上,無論哪一種方式,都不可能做到讓碼率全程絲毫不變。就CBR來說,對于我們設(shè)置的碼率數(shù)值,實際壓制運行過程中CBR方式是將碼率限制在這個數(shù)值附近的一個小范圍內(nèi)波動。ABR通俗來說可看做是VBR與CBR的折中方案,它的“波動”比CBR要大一些。而至于2pass和CRF,“波動”就更大了。

這個“波動”意味著什么呢?對視頻而言,畫面里的場景、人物等變化越快速繁雜,這個地方就越需要更多的碼率?!安▌印痹酱?,說明這種控制碼率方式對碼率更加的“自由”:哪里需要碼率,碼率就能去哪個地方。這樣的話視頻的實際質(zhì)量也會越好。CRF方式以質(zhì)量為首,在所設(shè)定的數(shù)值上不用擔心哪個地方碼率“不夠用”,缺點是CRF不確定最終碼率和文件大小。

所以,四種方式對“波動”從大到小的排序為CRF>2pass>ABR>CBR。若考慮實際質(zhì)量優(yōu)先的話,我們首選CRF,如果壓制需求還有碼率限制,就選擇2pass。


不過,“波動”范圍大了也會有問題。無論是本地還是網(wǎng)絡(luò),“波動”太大的話可能會因為播放器解碼不過來,網(wǎng)絡(luò)加載不過來而發(fā)生播放卡頓、看一會緩沖一會的現(xiàn)象。(反之不一定,也可能其它的編碼問題,網(wǎng)絡(luò)狀況或者串流協(xié)議問題理解起來就是,一個視頻不同的地方,若碼率相差太過懸殊,有些比如1234k,有些地方達到23456k,那就“波動”過大,播放的時候就“吃力”了。

現(xiàn)在大多是通過網(wǎng)絡(luò)來傳輸、觀看視頻聽音樂,如果能做到“波動”比較小,那對于相同或者一般般的網(wǎng)速來說就更容易緩沖播放。(這點也還涉及到串流協(xié)議等問題)對CBR來說,它是要想方設(shè)法地減小“波動”,有些碼率太高的地方就直接砍掉壓掉,而碼率較低的地方就“灌水”填充進去。


總而言之,CBR方式最利于傳輸視頻,但最不利于本地存儲,也最損失實際質(zhì)量。CRF方式則最利于本地存儲,最不利于傳輸,最大程度保存質(zhì)量。如果以質(zhì)量優(yōu)先兼顧傳輸推薦考慮2pass,以傳輸優(yōu)先兼顧質(zhì)量則考慮ABR。



二、常用壓制音視頻參數(shù)

“-r”,“frame,幀率”的意思。非常好理解,“-r 25”就是指設(shè)置視頻幀率為25。

“-s”,resolution,分辨率。相同地,“-s 1920x1080”指設(shè)置視頻分辨率為1920x1080,即1080p(這里ffmpeg默認逐行掃描,基本都不用考慮這個問題)。“-s 1280*720”這樣也是可以的。

“-vol”,volume,音量。“-vol 256”表示原音量,“-vol 512”表示原來音量的兩倍,以此類推。(這個參數(shù)比較過時了,但依然很好用)

“-ab”,audio bitrate,音頻比特率。例如“-ab 320k”表示設(shè)置音頻的比特率為320k。對視頻里的音頻設(shè)置也是可以的。

“-ar”,audio sampling rate,音頻采樣率。如“-ar 44100”。(這個通常不用設(shè)置,ffmpeg以原來的數(shù)據(jù)直接默認)

“-ac”,audio channels,音頻聲道。如“-ac 2”表示雙聲道,“-ac 1”表示單聲道。這個通常也不用管)



三、控制視頻畫面碼率的參數(shù)

“-pass 2”,使用“二次編碼”方式。同理,“-pass 1”即為一次編碼,范圍是1~3。注意會在所輸出目錄生成如下兩個文件:

注意“-pass 1”的使用和平常一樣,但使用“-pass 2”或“-pass 3”要先運行一遍“-pass 1”,再來運行。這里運行“-pass 1”的時候因為這時只是預(yù)算視頻畫面數(shù)據(jù),可以使用“-an”不對音頻操作,最后以“NUL”表示不輸出視頻文件,之后“-pass 2”再來輸出。例如:

ffmpeg -i .\input.mp4 -b:v 2000k -c:v libx264 -pass 1 -an?-f mp4 NUL

ffmpeg -i .\input.mp4 -b:v 2000k -c:v libx264 -c:a copy?-pass 2?.\output.mp4

“-crf”,使用“固定質(zhì)量”方式。例如“-crf 20”,一般選擇16~25,范圍0~51,數(shù)值越小質(zhì)量越高。簡單理解為0是無損,51是全損,在這之間劃分了52個質(zhì)量等級。

“-preset”,preset,預(yù)設(shè),相當于預(yù)設(shè)好的一些用時、質(zhì)量不同的壓制方案。默認“-preset medium”。從快到慢有ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo。一般看情況用faster~slower之間這些就可以。

“-tune”,tune,調(diào)諧。根據(jù)輸入文件的“特性”所采取的一些壓制方案。如“-tune film”。有以下這些:film(一般文件),animation(動畫),grain(老視頻顆粒噪音),still image(圖片幻燈片),fast decode(解碼快),zeolatency(網(wǎng)絡(luò)視頻、編碼快)。


如果出現(xiàn)了最終碼率與“-b”設(shè)置的偏差過大(即“碼率溢出”)的情況可考慮如下參數(shù)。up目前也沒很明白,就只給出用法例子不作說明了。

這里有一個“緩沖區(qū)”的概念。簡單理解就是,緩沖區(qū)像一個池子,碼率就像水,把水一直放進池子里裝著給播放器解碼。每次解碼用的水都不同,就是指之前說的不同地方的碼率有高有低。我們要做的是想讓池子里的水一直保持在一個范圍內(nèi)波動,這樣便可減小原來的“波動”也防止碼率溢出。

“-bufsize”,設(shè)定碼率控制緩沖區(qū)大小,讓整體的碼率更趨近于希望的值,一般配合“-b:v”使用,減少“波動”。例如“-b:v 2000k -bufsize 2500k”。

“-maxrate”,設(shè)定緩沖區(qū)最大填入速度。如“-b:v 3000k -maxrate 2000k”。

“-minrate”,設(shè)定緩沖區(qū)最小填入速度如“-b:v 3000k?-minrate 1000k”。

更進一步,這三個參數(shù)需要配合公式計算使用。而且,緩沖區(qū)也可能存在溢出等情況

(具體參考文章https://blog.csdn.net/soulmate_scut/article/details/82985365)

還有一個感覺用得很少的參數(shù)“-fs”,限制輸出文件的大小。如“-fs 120.6M”(注意是大寫M)表示限制輸出文件的大小為120.6MB(但實際上一般輸出文件最終會略大于所限制的這個數(shù)值),注意這并不是將整個文件壓制到所限制的大小的意思,“-fs”是讓ffmpeg運行處理到所限定的文件大小時就自動停止結(jié)束。像秒表一樣,“-fs”只是設(shè)定了一個“”文件大小size計時“,其它另外的處理得看其它參數(shù)的設(shè)置。


最后補充三個有時能帶來執(zhí)行方便的參數(shù):

“-y”,若輸出目錄已存在同名同容器格式的文件,直接輸出當前文件將其覆蓋而不再詢問。

“-n”,?不要覆蓋輸出文件,如果已經(jīng)存在同名同容器格式的文件,立即結(jié)束運行。與“-y”相反。

“-hide_banner”,隱藏版本號及一些描述信息。如下兩圖:

至此,《通俗易懂的ffmpeg系列教程》的啟蒙、轉(zhuǎn)碼、簡單剪輯、壓制篇章就完結(jié)啦!以后up會更新一些ffmpeg非常實用的命令行技巧,當然還有很多更深奧但也是實用的東西x~希望能得到大家繼續(xù)的關(guān)注支持啦~



感謝你觀看到這里。

(七)控制視頻畫面碼率的方式背景,ffmpeg常用壓制音視頻參數(shù)總結(jié)的評論 (共 條)

分享到微博請遵守國家法律
枣阳市| 凤庆县| 化德县| 怀宁县| 韶关市| 海南省| 乌兰察布市| 台湾省| 阿坝县| 旺苍县| 二手房| 都兰县| 青州市| 东阳市| 临漳县| 莱芜市| 仁怀市| 通河县| 陈巴尔虎旗| 香港 | 桐城市| 揭西县| 临颍县| 建宁县| 谷城县| 商丘市| 教育| 化州市| 榕江县| 裕民县| 南平市| 五家渠市| 西盟| 沈阳市| 荔波县| 平果县| 水城县| 东丽区| 临沧市| 绍兴县| 南涧|