x264碼率控制介紹、配置及應用

概述

在視頻編碼中,編碼器要考慮爲每一幀給定的視頻分配多少比特。有損壓縮的目的是在保持視頻質量的前提下,儘可能地減少使用的比特。碼率控制(Rate Control, RC)要做的就是控制編碼質量和碼流尺寸之間的折衷。
常見的RC方法有:CQP、CRF、CBR、VBR、ABR和CVBR。本文首先對這幾種方法的作用進行簡介,然後介紹x264中怎麼使用參數配置使用這些模式,並給出每種配置的注意點。

常用的RC模式簡介以及在x264中的配置

無損模式
將CRF設置爲0或QP設置爲0會進行無損編碼。

x264 --crf 0 -o <output> <input>
x264 --qp 0 -o <output> <input>

CQP:Constant Quantization Parameter(1-pass)
恆定QP是最簡單的碼率控制方式,把某個量化值QP作爲目標,每幀圖像都按照一個特定的QP來編碼,每幀編碼後的數據量大小是未知的。常用於算法研究階段,算法的驗證。

x264 --qp 23 --ipratio 1.4 --pbratio 1.3 -o <output> <input> 

注意:
1)始終對I,P和B幀使用恆定的QP
2)要在x264中啓用,使用–qp,–ipratio和–pbratio選擇P,I和B幀分別需要的QP值。其中ipratio適用於所有模式。 只要禁用了MB樹,pbratio便適用於所有模式。
3)可生成用於2-pass的日誌文件

CRF:Constant Rate Factor
恆定碼率因子CRF,以特定的“視頻主觀質量”爲目標進行RC,CRF又稱爲Quality-Based VBR模式。CRF可以編碼較高視覺質量的視頻,但是文件大小不可控。其主要思想是:通過降低“less important”幀的比特數,將省下的比特數分配給有助於提升主觀質量的幀,從而實現各幀輸出視覺質量基本恆定的效果。“less important”指的是複雜和高速運動的場景幀,這些幀通常會消耗大量比特,但是人眼難以察覺。
在x264編碼器內部CRF和bitrate採用了相同的調整策略,只是它不遵循一個特定的輸出碼率。

x264 --crf 24 -o <output> <input> 

注意:
1)所有幀在編碼過程中保持質量恆定;
2)無法控制生成文件的比特率和文件大小。可以通過改變CRF值,直到獲得所需的比特率;
3)CRF取18時在視覺上認爲是無損的(實際上,仍然是有損壓縮),x264默認值爲23。CRF取值±6會使比特數有一半的變化。例如,使用CRF=18編碼,最終平均比特率爲3.0 Mbit/s,但是,希望VBV上限設置爲1.5 Mbit/s,因此可以將CRF增加到大約24,才能獲得一半的比特率;
4)同時使用–crf和–pass 2衝突,所以無法用於2-pass編碼,同時也可生成用於2-pass的log文件;
5)配合VBV使用,即CRF+VBV可以指定最大比特數,不至於導致比特浪費而且也可以達到較高的質量。

ABR:Average Bitrate
平均比特率ABR,可以實現恆定的平均目標碼率,編碼時需要設置平均碼率bitrate。ABR可以爲簡單的場景分配較少的比特,把節省的比特用於複雜場景,保持一段時間內的碼率恆定。我的理解,這是一種最理想但最難實現的RC模式,因爲在編碼過程中,無法提前預知視頻的複雜程度,所以,碼率會變化,特別在編碼開始時,碼率波動會很大,最後趨於穩定。另外,爲達到爲了達到這種模式編碼得到的視頻碼流,最終的文件大小恆定,而無法保證視覺質量。

x264 --bitrate 1500 -o <output> <input>

注意:
1)適用於生成1-pass日誌文件:可用於後續2-pass的VBR或CBR的模式;
2)適用於快速編碼並且不在乎質量的情況(通常沒有),所以ABR的開發者都不推薦使用ABR
3)使碼流保持在指定的比特率附近。無法保證視覺質量,但是可以很好的控制文件大小和比特率。

CBR:Constant Bitrate
CBR就是以恆定比特率方式進行編碼,有運動發生時,由於碼率恆定,只能通過增大QP來減少碼字大小,圖像質量變差;當場景靜止時,圖像質量又變好,因此圖像質量不穩定,這種算法優先考慮碼率(帶寬)。CBR編碼碼比特率基本保持恆定在目標比特率,有利於流式播放。CBR的缺點在於複雜場景碼率不夠用,簡單場景碼率浪費,因此編碼內容的視覺質量不穩定。通常在較低比特率下,這種質量的變化會更加明顯。

實際上在x264中不存在CBR模式,但是可以通過以下配置“模擬”CBR編碼模式:

//bitrate會賦值給vbv-maxrate,最大瞬時碼率也是1000
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input>
//指定最大瞬時碼率vbv-maxrate,可達到1024
x264 --vbv-bufsize 2000 --vbv-maxrate 1024 --bitrate 1000 -o <output> <input> 

注意:
1)最大值的vbv-maxrate的限制可能會導致質量嚴重下降,僅用在需要將比特率限制在一定值以下的情況;
2)CBR對於生成2-pass的CBR編碼的首遍日誌文件非常有用。 2遍通常對CBR並沒有多大幫助,有時會帶來損失;
3)CBR模式下,可以使用–nal-hrd cbr指定填充比特到目標比特;
4)優點:用於恆定比特流的場景,如直播;
5)缺點:不利於視頻存檔;無法有效使用bandwith

VBR:variable bitrate
VBR編碼爲簡單場景分配較大的QP,爲複雜的場景分配較小的QP,得到基本穩定的輸出視覺質量。相對於CBR,在相同文件大小的條件下,VBR的輸出結果要比CBR好的多,這有利於媒體下載和本地存儲。VBR的缺點在於輸出碼流大小不可控。同時對於複雜度恆定的內容(例如新聞播音)沒什麼優勢。執行2-pass及2次以上pass編碼的模式就是所謂的VBR模式。

x264 --pass 1 --bitrate 1000 -o <output> <input> 
x264 --pass 2 --bitrate 1000 -o <output> <input> //VBR

VBV:Video Buffering Verifier
視頻緩衝驗證器VBV可確保將比特率限制在一定的範圍內,VBV對於流式傳輸很有用,可以確保在特定時間範圍內發送的比特不會超過指定的最大比特數。VBV可以與2-pass的VBR一起使用(多個pass中均可用),稱爲CVBR。CVBR中使用的VBV buffer(vbv-bufsize)用於碼流的緩衝。有了vbv-bufsize的存在,可以在保證vbv-maxrate的條件下,根據vbv-bufsize的剩餘情況,對QP進行調整,使得輸出碼流、VBV buffer兩者保持恆定(bitrate會波動)。該方法在較長的時間內編碼得到的碼率到達平均比特。
VBV也可以與CRF一起使用,該模式也稱爲“具有上限的CRF”。
**您應該如何設置bufsize?**這取決於您希望比特率有多少可變性。一個好的默認設置是使緩衝區大小是最大速率的兩倍,但是建議可能會根據流設置而有所不同。如果客戶端緩衝區較小(大約幾秒鐘),則bufsize的大小應與maxrate的大小相同。如果您想限制流的比特率,請嘗試將bufsize設置爲最大速率的一半或更小。
優點:在帶寬限制下進行流傳輸;實時流式傳輸(VBV+CRF,1-pass編碼);VOD流式傳輸(VBV+bitrate,2pass)。

2-pass模式
2-pass模式可以進行簡單的配置,編碼用於網絡傳輸的碼流。但是該模式有兩個缺點:
(1)直接指定bitrate編碼時,不想CRF可以提前得知,得到的視頻質量很好,所以最終的視頻質量無法保證,這就必須進行一些測試以確保指定的比特率對於某些複雜的內容而言確實足夠高。
(2)由於VBV buffer的存在,比特率可能會出現局部峯值,這就意味着,接收端可能出現超比特的情況;
(3)允許編碼器進行兩次(或多次)編碼,可以使編碼器提前計算出在1-pass中編碼幀所需的成本,然後在第二遍中更有效地使用可用比特數。最終可以保證在一定的比特率約束下,輸出質量最佳。據x264開發人員說,1-pass和2-pass的視覺質量幾乎一樣好,但是1-pass的壓縮效率可能會差一點(2-pass可以完全用完指定的比特,不會浪費比)。

x264 --pass 1 --bitrate 1000 -o <output> <input>  //1-pass ABR
x264 --pass 2 --bitrate 1000 -o <output> <input>  //2-pass ABR=VBR

注意:
1)執行2-pass及2次以上pass編碼的模式就是所謂的VBR模式
2)使用更快的編碼配置,可以得到比1-pass編碼質量好的碼流,不一定需要更長的編碼時間;
3)經過2-pass編碼之後,再進行多次編碼對於質量的提升都微乎其微;
4)可以很好的控制文件大小和比特率
5)優點:可以達到特定的目標比特率;
6)缺點:不利於實時碼流傳輸。

使用場景總結

·對於1-pass編碼,可以使用CQP,ABR,CBR,CRF或無損編碼(儘量避免使用ABR,ABR質量無法保證)。
·如果對比特率較敏感(例如流媒體),最好的選擇是設置碼率上限的CRF(CRF + VBV)或CBR。
·對於2-pass以上次數的編碼,ABR和CBR用於1-pass生成log文件,將ABR,VBR或CBR用作後續pass的編碼。
·x264中,只有ABR和CBR可用於生成1-pass的log文件。

Tips:
1.視頻本地保存(保證質量)——使用CRF保證想要的質量
2.視頻點播(確保視頻不超過特定大小)——2-pass的最優CRF值(由於是點播,所以有時間調整得到最優CRF值)+VBV或者ABR+VBV限制比特數
3.直播流(要求保證質量+快速編碼+帶寬)——1-pass的CRF+VBV或者ABR+VBV限制比特數,或者在比特允許的情況下可以使用CBR
4.確保視頻最終具有特定大小——2-pass ABR

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章