码率控制
ABR,CBR,VBR的關(guān)系
與ABR相應(yīng)的技術(shù)有CBR,VBR。這些碼率控制技術(shù)首先都是在音頻編碼中采用,是解決音頻編碼采用什么樣的比特率最優(yōu)的問題。
 ??? CBR編碼碼比特率基本保持恒定在目標(biāo)比特率,有利于流式播放。
 ??? CBR的缺點在于復(fù)雜場景碼率不夠用,簡單場景碼率浪費,因此編碼內(nèi)容的視覺質(zhì)量不穩(wěn)定。通常在較低比特率下,這種質(zhì)量的變化會更加明顯。
 
 ??? VBR編碼為簡單場景分配較大的QP,為復(fù)雜的場景分配較小的QP,得到基本穩(wěn)定的輸出視覺質(zhì)量。? ?
 ?????? 相對于CBR,在相同文件大小的條件下,VBR的輸出結(jié)果要比CBR好的多,這有利于媒體下載和本地存儲。
 ??? VBR的缺點在于輸出碼流大小不可控。同時對于復(fù)雜度恒定的內(nèi)容(例如新聞播音)沒什么優(yōu)勢。
 
 ??? ABR編碼為簡單場景分配較少的比特,從而留出足量的比特用于生成高質(zhì)量的復(fù)雜部分。使得有限的比特數(shù)能夠在不同的場景間合理分配,這類似于VBR。
 ?????? 同時ABR分配碼率,使得在一定時間內(nèi),平均碼率趨近于目標(biāo)碼率,這樣可以控制輸出文件大小,這點類似于CBR。
 ??? 因此可以認為ABR是CBR和VBR的一種折中優(yōu)化方案。
 
 ??? 分析視頻編碼碼率控制可以通過三個因素:
 ??? 1. 視覺質(zhì)量穩(wěn)定性,利于視覺主觀質(zhì)量;
 ??? 2. 即時輸出碼率,相當(dāng)于每幀編碼輸出比特數(shù);
 ??? 3. 輸出視頻文件大小可控,利于傳輸,存儲。
 ??? 比較這三種碼率控制方式如下:
 ?????? #??????? 視覺質(zhì)量穩(wěn)定性???????? 即時輸出碼率??????? 輸出文件大小
 ?????? CBR????????? 不穩(wěn)定?????????????? 恒定?????????????? 可控
 ?????? VBR?????????? 穩(wěn)定??????????????? 變化????????????? 不可控
 ?????? ABR???????? 基本穩(wěn)定????????????? 變化?????????????? 可控 (即時碼率變化,但一段時期內(nèi)平均碼率趨近目標(biāo)碼率)
 
x264的碼率控制
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]默認:0
說明:設(shè)置VBV可用的最大緩沖區(qū),單位是kbits。VBV(Video Buffering Verifier,視頻緩存檢驗器),它作用是處理各幀編碼后大小不一和恒定輸出碼率的矛盾。可以將VBV想象成為一個水池,水池的入口連接著encoder的輸出,出口為恒定碼率的網(wǎng)絡(luò)輸出。為了使得輸出恒定,encoder必須保證水池既不上溢也不下溢。下溢會導(dǎo)致無數(shù)據(jù)輸出,上溢會導(dǎo)致數(shù)據(jù)丟失。所以encoder在編碼一幀時會參考當(dāng)前vbv的充盈情況,并由此計算出,當(dāng)前幀應(yīng)當(dāng)編碼出多少比特,從而保證既不上溢(增加QP)也不下溢(減少Q(mào)P)。為了防止上溢,VBV會要求降低編碼比特,encoder會采用更大一些的QP,這樣必然降低了視頻序列質(zhì)量,因此只在真正需要的時候才設(shè)定它。一般在硬件解碼端的時候,一定要做這個設(shè)置。例如藍光定義最大的數(shù)據(jù)緩沖為30M比特,能夠解碼的最大視頻碼率為40Mbps。這是對硬件解碼器資源選配的一個合理限制,否則解碼器不知道預(yù)留多大的數(shù)據(jù)緩沖空間才是安全的。這類似264標(biāo)準(zhǔn)的level設(shè)定。
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]
默認:0
說明:設(shè)置VBV可用的最大碼率,單位是kbps。使用它等于限制了I幀最大的碼率輸出(一般都是I幀達到maxrate的限制,除非bitrate設(shè)置過低不合理)。而I幀質(zhì)量的降低,會拉低整個視頻序列的視頻質(zhì)量。因此只在真正有最大碼率限制的情況下才去設(shè)定它。
參見:–vbv-bufsize, –vbv-init,
在VBR和ABR情況下,可以設(shè)置vbv-maxrate和vbv-bufsize(很多情況下設(shè)置為vbv-maxrate = vbv-bufsize = bitrate,注意vbv-bufsize的量綱是不同,即最大緩存1s的數(shù)據(jù))。
在RC_ABR碼率控制方法下,如果vbv-maxrate == bitrate這時候其實進行的是CBR碼率控制方法,encoder力爭控制每一幀輸出都穩(wěn)定在bitrate上。
如果設(shè)置vbv-maxrate則vbv-bufsize必須設(shè)置,否則會提示"VBV maxrate specified, but no bufsize, ignored", vbv-maxrate會被改回為0。
如果設(shè)置vbv-bufsize而vbv-maxrate沒有設(shè)置,則會提示"VBV maxrate unspecified, assuming CBR",vbv-maxrate會被設(shè)為bitrate,此時進行CBR編碼。
一般設(shè)置為 vbv-maxrate = vbv-bufsize = a*bitrate。
a=0,不啟用VBV機制,編碼性能最好,適用于硬盤文件編碼;但它輸出的碼率波動性大,有可能某些幀的比特數(shù)過高,不適用于有實際帶寬限制的流媒體傳輸。
0<a<1,這樣的設(shè)置沒有什么意義,得不到任何的好處。
a=1,等于CBR,CBR是一種復(fù)雜和平滑場景都不大討好的碼率控制方法,一般不采用這一方法。
a>1,對每幀數(shù)據(jù)有限制,但又可以暫時超過平均碼率,適用于流媒體傳輸。
對于某些特殊場景編碼,例如電腦屏幕編碼,它的特點是I幀紋理細節(jié)豐富,編碼數(shù)據(jù)極大,P幀變化很小或者根本沒變化,p幀數(shù)據(jù)很小。
這種情況,如果不設(shè)置vbv參數(shù)(保持缺省值0),I幀數(shù)據(jù)壓不下來,碼流會周期性的高低變動;有可能造成網(wǎng)絡(luò)擁塞,數(shù)據(jù)包丟失,解碼端花屏。
如果設(shè)置a=1,I幀得到限制,可以壓下來,但編碼質(zhì)量下降太多,主觀質(zhì)量差。
因此需要根據(jù)網(wǎng)絡(luò)設(shè)置成a>1,使得I幀可以暫時有限度的大于平均碼率,而P幀編碼時候還能把平均碼率降下來。
--vbv-init <float>????? Initial VBV buffer occupancy [0.9]
默認:0.9
說明:設(shè)置播放之前必須先載入多少碼流到VBV緩沖中。如果值小于1,那么大小就為 vbv-init * vbv-bufsize。如果大于1,則是以kbits為單位的值。
參見:–vbv-maxsize,
ABR時不要設(shè)置這個參數(shù),可以完全忽略這個參數(shù)。
ffmpeg的碼率控制
ABR(Average Bit Rate)
ffmpeg -i input -c:v libx264 -b:v 1000k ....
它提供了某種“運行均值”的目標(biāo),終極目標(biāo)是最終文件大小匹配這個“全局平均”數(shù)字(因此基本上來說,如果編碼器遇到大量碼率開銷非常小的黑幀,它將以低于要求的比特率編碼,但是在接下來幾秒內(nèi)的非黑幀它將以高質(zhì)量方式編碼方式使碼率回歸均值)使用兩邊編碼模式是這個方法變得更加有效,你可以和“max bit rate ”配合使用來防止碼率的波動。
CBR(Constant Bit Rate)
事實上根本就沒有CBR這種模式,但是你可以通過補充ABR參數(shù)“模擬”一個恒定比特率設(shè)置,比如:
ffmpeg -i input -c:v libx264 -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
在這個例子中,-bufsize是一個“碼率控制緩沖區(qū)”,因此它會在每一個有用的1835k視頻數(shù)據(jù)內(nèi)強制一個你所要求的均值(此處為4000k),所以基本上我們會認為接收端/終端播放器會緩沖那么多的數(shù)據(jù),因此在這個數(shù)據(jù)內(nèi)部波動是沒有問題的。
當(dāng)然,如果只有黑幀或者空白幀,它所花費的的比特率將少于需求位率(但它會盡可能的提高質(zhì)量水平,直到crf)。
最大比特率的CRF模式
你可以通過聲明-crf和-maxrate設(shè)置來使用帶有最大比特率crf模式,比如:
ffmpeg -i input -c:v libx264 -crf 20 -maxrate 400k? -bufsize 1835k ?
這將會有效的將crf值鎖定在20,但是如果輸出碼率超過400kbps,在這種情況下編碼器會將質(zhì)量降低到低于crf 20。
總結(jié)
 
                            
                        - 上一篇: java中格林尼治时间的输出_Java中
- 下一篇: Win10系统无法使用VGAPlayer
