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