專利名稱:視頻編碼中幀級(jí)碼率的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖像信息視頻編碼壓縮技術(shù),特別涉及視頻編碼中幀級(jí)碼率的控制方法。
背景技術(shù):
如今的通訊服務(wù)已不再僅限于傳統(tǒng)的語(yǔ)音業(yè)務(wù),而是將目光投向了更加豐富多彩的多媒體業(yè)務(wù)。隨著網(wǎng)絡(luò)應(yīng)用的日益擴(kuò)大,多媒體業(yè)務(wù)的重要性尤其是視頻應(yīng)用,更加凸顯。視頻應(yīng)用相對(duì)于以往的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)頁(yè)瀏覽,郵件服務(wù),對(duì)帶寬的要求更大,對(duì)實(shí)時(shí)性要求更高。目前基于有線信道或者無(wú)線信道網(wǎng)絡(luò)的視頻應(yīng)用包括交互式應(yīng)用,如會(huì)議電視,預(yù)編碼的視頻流下載,如實(shí)時(shí)視頻流等等。盡管現(xiàn)在有線信道所能提供的帶寬不斷增大,但是對(duì)于視頻序列來(lái)說(shuō),帶寬還是無(wú)法滿足其高數(shù)據(jù)量的要求,無(wú)線信道更是只能提夠有限的帶寬。這樣視頻編碼輸出的瞬間碼流過(guò)高會(huì)對(duì)有限的網(wǎng)絡(luò)資源造成沖擊,更嚴(yán)重的會(huì)有丟包現(xiàn)象。因此,為滿足這些視頻應(yīng)用的需求,充分利用網(wǎng)絡(luò)資源,視頻壓縮后的碼流要盡可能的占滿帶寬,并且保持平穩(wěn)輸出,碼率控制在其中扮演著重要的角色。
常用的碼率控制方法分為幀內(nèi)碼率控制和幀間碼率控制。幀內(nèi)碼率控制主要是利用率失真理論,這種方法能夠達(dá)到較好的控制效果,但數(shù)學(xué)計(jì)算量大,且使得瞬間碼率過(guò)高,對(duì)網(wǎng)絡(luò)具有一定的沖擊性,甚至?xí)斐蓙G包現(xiàn)象。幀間碼率控制是利用前幾幀編碼的信息,調(diào)整當(dāng)前幀的量化參數(shù),或者進(jìn)行丟幀,以保證輸出碼流的平均碼率控制在帶寬要求內(nèi),達(dá)到碼流平穩(wěn)的效果。因此,幀間碼率控制是有效的控制住瞬間碼率過(guò)高,讓碼流輸出平穩(wěn)的方法。
傳統(tǒng)的幀間碼率控制的方法通過(guò)前幾幀的編碼情況來(lái)調(diào)整當(dāng)前幀的量化因子或者目標(biāo)碼率,以達(dá)到幾幀平均碼率平穩(wěn)的目的,但是這樣反應(yīng)速度慢,無(wú)法很快的使碼流平穩(wěn)。例如,中國(guó)專利CN01130703的“視頻壓縮碼率控制方法”,該專利是利用碼率積累超過(guò)經(jīng)驗(yàn)閾值,才對(duì)目標(biāo)碼率進(jìn)行調(diào)整,這樣使得瞬間碼率無(wú)法盡快下降,而且還是一樣無(wú)法完全避免高數(shù)據(jù)量對(duì)網(wǎng)絡(luò)的沖擊。國(guó)際專利WO0019137的“FAME-LEVEL RATE CONTROL FOR VIDEOCOMPRESSION”,該專利利用時(shí)間窗分配碼字過(guò)于平均,另外還需要根據(jù)量化因子,運(yùn)動(dòng)差值等對(duì)目標(biāo)比特?cái)?shù)進(jìn)行調(diào)整,達(dá)到較好的調(diào)整效果需要對(duì)多種因素進(jìn)行考慮,判斷條件復(fù)雜,實(shí)現(xiàn)繁瑣。
發(fā)明內(nèi)容
為了克服現(xiàn)有技術(shù)的缺陷和不足,本發(fā)明的目的在于提供一種計(jì)算量小并且效果好的視頻編碼中幀級(jí)碼率的控制方法。
為了達(dá)到上述目的,本發(fā)明一種視頻編碼中幀級(jí)碼率的控制方法,包括以下步驟(1)獲取一幀圖像的額定編碼比特?cái)?shù),并為環(huán)形滑動(dòng)窗的所有元素進(jìn)行賦值;(2)計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù),并根據(jù)該允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差判斷是否對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼,如果判斷結(jié)果為是,則進(jìn)入步驟(3);如果判斷結(jié)果為否,步驟結(jié)束;(3)獲取當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼后,更新環(huán)形滑動(dòng)窗。
優(yōu)選地,所述步驟(1)具體為(11)將視頻碼率除以幀頻來(lái)獲取一幀圖像的額定編碼比特?cái)?shù);(12)使用該額定編碼比特?cái)?shù)給環(huán)形滑動(dòng)窗的所有元素進(jìn)行賦值。
優(yōu)選地,所述步驟(2)具體為(21)計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù),并計(jì)算該允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差值;(22)將該差值與修正加權(quán)值作乘積后,判斷是否小于預(yù)設(shè)的丟幀的閾值,如果不小于,則判定需要對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼,進(jìn)入步驟(3);如果小于,則丟棄當(dāng)前幀,步驟結(jié)束。
優(yōu)選地,步驟(21)中所述計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)的方法為(A)通過(guò)累加環(huán)形滑動(dòng)窗內(nèi)元素的值來(lái)獲取當(dāng)前幀之前所有幀的實(shí)際編碼比特?cái)?shù)的和;(B)將所述步驟(A)中獲取的和與環(huán)形滑動(dòng)窗中保存的第一幀圖像的實(shí)際編碼比特?cái)?shù)做差值;(C)將當(dāng)前幀之前所有幀的額定編碼比特?cái)?shù)的和減去所述步驟(B)中的差值,來(lái)獲取當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)。
優(yōu)選地,所述步驟(3)具體為(31)將當(dāng)前幀的額定編碼比特?cái)?shù)與所述步驟(22)中得到的乘積值作和,來(lái)獲取當(dāng)前幀的目標(biāo)編碼比特?cái)?shù);(32)根據(jù)該目標(biāo)編碼比特?cái)?shù)對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼后,更新環(huán)形滑動(dòng)窗。
優(yōu)選地,步驟(32)中所述更新環(huán)形滑動(dòng)窗的方法為將當(dāng)前幀編出的比特?cái)?shù)替換掉滑動(dòng)窗口內(nèi)當(dāng)前元素的值,并將當(dāng)前幀的編碼后將索引值加1再模N,獲取下一幀在滑動(dòng)窗中的窗口索引值;其中,所述的N為當(dāng)前幀之前的所有幀個(gè)數(shù)的和。
采用上述的方法后,通過(guò)將環(huán)形滑動(dòng)窗應(yīng)用于視頻編碼器,運(yùn)用環(huán)形滑動(dòng)窗平滑每幀的編碼比特?cái)?shù),平滑不下時(shí)就丟棄當(dāng)前幀,如果不需丟棄當(dāng)前幀,就運(yùn)用滑動(dòng)窗得到當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)進(jìn)行編碼后更新環(huán)形滑動(dòng)窗,不需要對(duì)多種因素全面考慮,判斷條件也簡(jiǎn)單有效,能較好的調(diào)整碼字分配,避免流量突變,最大程度的平緩了碼流的效果,有效的控制住瞬間碼率過(guò)高,讓碼流輸出平穩(wěn),緩解了網(wǎng)絡(luò)壓力,提高了編碼效率,達(dá)到了計(jì)算量小,并且編碼過(guò)程效果好的目的。
圖1為本發(fā)明環(huán)形滑動(dòng)窗的結(jié)構(gòu)示意圖;圖2為本發(fā)明視頻編碼中幀級(jí)碼率的控制的具體流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)說(shuō)明。
如圖1所示,本發(fā)明將環(huán)形滑動(dòng)窗應(yīng)用于視頻編碼器,該環(huán)形滑動(dòng)窗隨時(shí)間轉(zhuǎn)動(dòng),時(shí)間軸為t-3、t-2、t-1、t、t+1、t+2、t+3、t+4、t+5等,對(duì)于待編碼的第t幀對(duì)應(yīng)于時(shí)間軸的時(shí)間為t,此時(shí),環(huán)形滑動(dòng)時(shí)間窗對(duì)應(yīng)的索引為0(t),時(shí)間窗上的其它索引為1(t-N+1)、2(t-N+2)、3(t-N+3)、N-1(t-1)、N-2(t-2),當(dāng)處理完第t幀后,由于環(huán)形滑動(dòng)窗是循環(huán)使用的,下一個(gè)待編碼的第t+1幀對(duì)應(yīng)時(shí)間軸的時(shí)間順延為t+1,而環(huán)形滑動(dòng)時(shí)間窗的索引就對(duì)應(yīng)為第t幀的索引加1后模N,得到的索引為1(t+1)。
如圖2所示,為本發(fā)明視頻編碼中幀級(jí)碼率的控制的具體流程,包括以下步驟(101)首先判斷編碼是否為第一幀,如果是第一幀,則進(jìn)入步驟(102);如果不是第一幀,則進(jìn)入步驟(103);(102)初始化環(huán)形滑動(dòng)窗。開始視頻編碼時(shí),要給環(huán)形滑動(dòng)窗的N個(gè)元素賦初值。環(huán)形滑動(dòng)窗記錄了當(dāng)前幀之前的連續(xù)N幀的實(shí)際編碼比特?cái)?shù)。即滑動(dòng)窗每個(gè)元素對(duì)應(yīng)前N幀中某一幀的實(shí)際編碼比特?cái)?shù)。剛啟動(dòng)編碼器時(shí),由于還沒(méi)有編碼,滑動(dòng)窗的每個(gè)元素都設(shè)為一幀圖像的額定編碼比特?cái)?shù),隨著編碼過(guò)程的持續(xù),再不斷更新為實(shí)際編碼比特?cái)?shù)。
初始化環(huán)形滑動(dòng)窗包括以下步驟(A1)計(jì)算一幀圖像的額定編碼比特?cái)?shù)FrameRate,由視頻碼率BitRate除以幀頻FramePerSecond得到,即
FrameRate=BitRate/FramePerSecond(A2)用額定編碼比特?cái)?shù)FrameRate給環(huán)形滑動(dòng)窗的每個(gè)元素SlipWindow[i]賦值,即SlipWindow[i]=FrameRate i=0,…,N-1(A3)賦值過(guò)程結(jié)束后,將初始化標(biāo)志FirstTime置為無(wú)效,即當(dāng)編碼開始后不再以每幀圖像的額定編碼比特?cái)?shù)給環(huán)形滑動(dòng)窗元素賦值。
(103)計(jì)算在環(huán)形滑動(dòng)窗內(nèi)允許的當(dāng)前幀編碼比特?cái)?shù),即當(dāng)前幀編碼比特?cái)?shù)的上限;包括以下步驟(B1)累加環(huán)形滑動(dòng)窗內(nèi)所有元素的值,得到當(dāng)前幀之前N幀的實(shí)際編碼比特?cái)?shù)之和SumBits,即SumBits=Σi=0N-1SlipWindow[i]]]>(B2)累加的結(jié)果SumBits減去環(huán)形滑動(dòng)窗中保存的第一幀圖像的實(shí)際編碼比特?cái)?shù)SlipWindow[WindowIndex],得到前N-1幀的實(shí)際編碼比特?cái)?shù)的和SumBitsplusFisrtFrm。WindowIndex是第一幀在滑動(dòng)窗中的窗口索引,如圖1所示,因?yàn)榄h(huán)形滑動(dòng)窗是循環(huán)使用的,所以WindowIndex與時(shí)間軸上的幀序號(hào)不是一致的,即WindowIndex不一定等于0。從后面的步驟中可以看出結(jié)束對(duì)當(dāng)前幀的處理后WindowIndex將做為當(dāng)前幀的窗口索引。
SumBitsplusFisrtFrm=SumBits-SlipWindow[WindowIndex](B3)用N幀額定編碼比特?cái)?shù)的和Nominal減去SumBitsplusFisrtFrm得到當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)LeftFrameBitsl,即LeftFrameBitsl=Nominal-SumBitsplusFisrtFrm(104)根據(jù)當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差判斷是否需要丟棄當(dāng)前幀,如果是則進(jìn)入步驟(105);如果不是,則進(jìn)入步驟(106);上述步驟(104)可以包括以下步驟(C1)計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)LeftFrameBitsl與額定編碼比特?cái)?shù)FrameRate的差ExtraBitsl;即ExtraBitsl=LeftFrameBitsl-FrameRate
(C2)為了增大碼流的平滑度,將ExtraBitsl乘以修正加權(quán)值(1/(N/2)),即將碼流的波動(dòng)平均分配在后續(xù)的N/2幀上,這個(gè)結(jié)果用來(lái)做為是否丟幀的重要依據(jù);ExtraBits=ExtraBitsl/(N/2)(C3)將ExtraBits與丟幀的閾值nThresh比較,小于則進(jìn)入步驟(105);大于則進(jìn)入步驟(106)。
(105)丟棄當(dāng)前幀后,進(jìn)入步驟(109)在丟幀前,更新滑動(dòng)窗內(nèi)當(dāng)前元素的值和窗口索引,閾值的大小隨碼率自適應(yīng)改變。即當(dāng)滿足條件ExtraBits<nThresh時(shí),則做如下操作SlipWindow[WindowIndex]=0;WindowIndex++;WindowIndex=WindowIndex%N;丟棄當(dāng)前幀;(106)確定當(dāng)前幀的目標(biāo)編碼比特?cái)?shù),編碼器將根據(jù)該值做更精細(xì)的碼率控制,使得當(dāng)前幀實(shí)際編碼比特?cái)?shù)盡可能的接近該值。
上述是將當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)根據(jù)它與額定編碼比特?cái)?shù)的差進(jìn)行修正得到當(dāng)前幀的目標(biāo)編碼比特?cái)?shù),在后續(xù)的編碼過(guò)程中用目標(biāo)編碼比特?cái)?shù)進(jìn)行更精細(xì)的碼率控制。修正的方法如下當(dāng)前幀目標(biāo)編碼比特?cái)?shù)=額定編碼比特?cái)?shù)+當(dāng)前幀在滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差×修正加權(quán)值。
也可以通過(guò)當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)=當(dāng)前幀的額定編碼比特?cái)?shù)+當(dāng)前幀在滑動(dòng)窗內(nèi)允許的比特?cái)?shù)與額定編碼比特?cái)?shù)的差/(N/2)來(lái)求得,即LeftFrameBits=FrameRate+ExtraBits;(107)進(jìn)行當(dāng)前幀數(shù)據(jù)的編碼;(108)結(jié)束當(dāng)前幀的編碼后,更新環(huán)形滑動(dòng)窗內(nèi)容和索引值。
包括以下步驟(D1)用當(dāng)前幀編出的比特?cái)?shù)BitsFrm替換掉窗口內(nèi)當(dāng)前元素的值;即
SlipWindow[WindowIndex]=BitsFrm(D2)更新窗口索引。由于環(huán)形滑動(dòng)窗是循環(huán)使用的,如圖1所示。窗內(nèi)當(dāng)前元素的窗口索引范圍是0~N-1。將當(dāng)前幀的編碼后將索引值加1再模N,得到下一幀在滑動(dòng)窗中的窗口索引值。即WindowIndex=WindowIndex+1WindowIndex=WindowIndex%N本發(fā)明通過(guò)將環(huán)形滑動(dòng)窗應(yīng)用于視頻編碼器,運(yùn)用環(huán)形滑動(dòng)窗平滑每幀的編碼比特?cái)?shù),平滑不下時(shí)就丟棄當(dāng)前幀,如果不需丟棄當(dāng)前幀,就運(yùn)用滑動(dòng)窗得到當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)進(jìn)行編碼后更新環(huán)形滑動(dòng)窗,不需要對(duì)多種因素全面考慮,判斷條件也簡(jiǎn)單有效,能較好的調(diào)整碼字分配,盡可能平滑碼流,避免流量突變,達(dá)到了計(jì)算量小,并且編碼過(guò)程效果好的目的。
權(quán)利要求
1.一種視頻編碼幀級(jí)碼率的控制方法,其特征在于,包括以下步驟(1)獲取一幀圖像的額定編碼比特?cái)?shù),并為環(huán)形滑動(dòng)窗的所有元素進(jìn)行賦值;(2)計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù),并根據(jù)該允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差判斷是否對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼,如果判斷結(jié)果為是,則進(jìn)入步驟(3);如果判斷結(jié)果為否,步驟結(jié)束;(3)獲取當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼后,更新環(huán)形滑動(dòng)窗。
2.按照權(quán)利要求1所述的視頻編碼幀級(jí)碼率的控制方法,其特征在于,所述步驟(1)具體為(11)將視頻碼率除以幀頻來(lái)獲取一幀圖像的額定編碼比特?cái)?shù);(12)使用該額定編碼比特?cái)?shù)給環(huán)形滑動(dòng)窗的所有元素進(jìn)行賦值。
3.按照權(quán)利要求2所述的視頻編碼幀級(jí)碼率的控制方法,其特征在于,所述步驟(2)具體為(21)計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù),并計(jì)算該允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差值;(22)將該差值與修正加權(quán)值作乘積后,判斷是否小于預(yù)設(shè)的丟幀的閾值,如果不小于,則判定需要對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼,進(jìn)入步驟(3);如果小于,則丟棄當(dāng)前幀,步驟結(jié)束。
4.按照權(quán)利要求3所述的視頻編碼幀級(jí)碼率的控制方法,其特征在于,步驟(21)中所述計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)的方法為(A)通過(guò)累加環(huán)形滑動(dòng)窗內(nèi)元素的值來(lái)獲取當(dāng)前幀之前所有幀的實(shí)際編碼比特?cái)?shù)的和;(B)將所述步驟(A)中獲取的和與環(huán)形滑動(dòng)窗中保存的第一幀圖像的實(shí)際編碼比特?cái)?shù)做差值;(C)將當(dāng)前幀之前所有幀的額定編碼比特?cái)?shù)的和減去所述步驟(B)中的差值,來(lái)獲取當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù)。
5.按照權(quán)利要求3或4所述的視頻編碼幀級(jí)碼率的控制方法,其特征在于,所述步驟(3)具體為(31)將當(dāng)前幀的額定編碼比特?cái)?shù)與所述步驟(22)中得到的乘積值作和,來(lái)獲取當(dāng)前幀的目標(biāo)編碼比特?cái)?shù);(32)根據(jù)該目標(biāo)編碼比特?cái)?shù)對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼后,更新環(huán)形滑動(dòng)窗。
6.按照權(quán)利要求5所述的視頻編碼幀級(jí)碼率的控制方法,其特征在于,步驟(32)中所述更新環(huán)形滑動(dòng)窗的方法為將當(dāng)前幀編出的比特?cái)?shù)替換掉滑動(dòng)窗口內(nèi)當(dāng)前元素的值,并將當(dāng)前幀的編碼后將索引值加1再模N,獲取下一幀在滑動(dòng)窗中的窗口索引值;其中,所述的N為當(dāng)前幀之前的所有幀個(gè)數(shù)的和。
全文摘要
本發(fā)明公開了一種視頻編碼中幀級(jí)碼率的控制方法。為解決現(xiàn)有技術(shù)中視頻編碼的復(fù)雜度高、效果差的問(wèn)題而發(fā)明。本發(fā)明視頻編碼中幀級(jí)碼率的控制方法包括以下步驟獲取一幀圖像的額定編碼比特?cái)?shù),并為環(huán)形滑動(dòng)窗的所有元素進(jìn)行賦值;計(jì)算當(dāng)前幀在環(huán)形滑動(dòng)窗內(nèi)允許的編碼比特?cái)?shù),并根據(jù)該允許的編碼比特?cái)?shù)與額定編碼比特?cái)?shù)的差判斷需要對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼,則獲取當(dāng)前幀的目標(biāo)編碼比特?cái)?shù)對(duì)當(dāng)前幀的數(shù)據(jù)進(jìn)行編碼后,更新環(huán)形滑動(dòng)窗。本發(fā)明能較好的調(diào)整碼字分配,避免流量突變,最大程度的平緩了碼流的效果,有效的控制住瞬間碼率過(guò)高,讓碼流輸出平穩(wěn),緩解了網(wǎng)絡(luò)壓力,提高了編碼效率,達(dá)到了計(jì)算量小,并且編碼過(guò)程效果好的目的。
文檔編號(hào)H04N7/26GK1964494SQ200610145809
公開日2007年5月16日 申請(qǐng)日期2006年11月17日 優(yōu)先權(quán)日2006年11月17日
發(fā)明者王寧, 吳釗, 魯曉牧 申請(qǐng)人:中興通訊股份有限公司