專利名稱:一種基于h.264分層b幀編碼結(jié)構(gòu)的碼率控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻壓縮技術(shù),特別涉及視頻壓縮技術(shù)中的一種基于H. 264分層B幀 編碼結(jié)構(gòu)的碼率控制方法。
背景技術(shù):
碼率控制在視頻壓縮技術(shù)中起著至關(guān)重要的作用,其最終目的是在給定的目標(biāo)比 特率及緩存容量的條件下,使得傳輸?shù)囊曨l質(zhì)量最優(yōu)化。H. 264是由聯(lián)合視頻組(JVT)推出的最新視頻編碼標(biāo)準(zhǔn),在對其進(jìn)行碼率控制的 時候,由于壓縮過程中產(chǎn)生的量化參數(shù)(QP)既用于碼率控制過程,又用于率失真優(yōu)化過 程,因此會產(chǎn)生“蛋雞悖論”的問題一方面,為了計算當(dāng)前宏塊的率失真優(yōu)化(RDO),需要 利用當(dāng)前宏塊的QP作為輸入;另一方面,當(dāng)前宏塊的QP的計算則需要利用該宏塊的平均絕 對差(MAD)來揭示其編碼復(fù)雜度,然而,每個當(dāng)前宏塊的MAD只有在得知其RDO后才能計算 出。因此,如何解決“蛋雞悖論”成了 H. 264碼率控制過程中的難題。目前,應(yīng)用較為廣泛的H. 264碼率控制算法是JVT-G012,其要點是為保證碼率控 制精度,分為圖像組(GOP)級別、幀級別、基本單元(BU)級別的比特數(shù)分配,并通過流量模 型計算某個時刻的緩沖器占用量以輔助調(diào)整分配的比特數(shù)大?。煌ㄟ^線性MAD預(yù)測模型來 預(yù)測當(dāng)前編碼單元的MAD值,以解決“蛋雞悖論”;使用MPEG-2中經(jīng)典的二次碼率-量化步 長(R-Q)模型來計算量化步長(Q),從而得到最后的QP。雖然JVT-G012碼率控制算法解決 了“蛋雞悖論”的問題并在多數(shù)情況下取得較好的編碼效果,但是該算法并不能很好地支持 分層B幀這種特殊的編碼結(jié)構(gòu)。在分層B幀編碼結(jié)構(gòu)中,關(guān)鍵幀直接或者間接地作為二個連續(xù)的GOP之間的分層 B幀的參考幀;較低層的B幀作為較高層的B幀的參考幀。換句話說,越低層的編碼幀對整 體的編碼效率貢獻(xiàn)越大。在這種編碼結(jié)構(gòu)中,應(yīng)當(dāng)給低層編碼幀分配較多的編碼比特數(shù),以 保證整體的編碼效率。但是,在JVT-G012中,B幀的QP值是對兩個相鄰P幀的QP值進(jìn)行 插值計算得到,沒有考慮屬于不同時域編碼層的編碼幀的重要性。因此,若仍沿用JVT-G012 中的算法,就會由于沒有很好地利用分層B幀的編碼特性而導(dǎo)致最終碼率控制不準(zhǔn)確以及 編碼視頻質(zhì)量下降。為了提高JVT-G012算法在分層B幀編碼結(jié)構(gòu)下的碼率控制性能,可以采用如下的 改進(jìn)的算法1、采用層疊量化(Cascading QP)的方法首先利用相鄰P幀的QP插值得到低層 B幀的QP值,其次對其上層B幀逐層加大QP值,以此保證低層編碼幀分配到較多比特數(shù)。 這種方法存在的問題是控制結(jié)果較為粗糙,并且不同編碼幀之間的峰值信噪比(PSNR)波 動很大。2、通過預(yù)先定義不同層B幀與P幀編碼比特數(shù)的目標(biāo)比例來分配編碼比特數(shù),并 伸縮(Scale)由P幀的統(tǒng)計結(jié)果得到的二次R-Q模型用于不同時域?qū)拥腂幀。該方法雖然 可以獲得較為精確的碼率控制結(jié)果,但是,由于不同層B幀與P幀編碼比特數(shù)的目標(biāo)比例、二次R-Q模型的伸縮比例都需要預(yù)先設(shè)定,并不能自適應(yīng)于不同的編碼序列。 綜上所述,針對分層B幀編碼結(jié)構(gòu)的碼率控制,目前的JVT-G012算法及其改進(jìn)算
法在性能上都存在缺陷。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于H. 264分層B幀編碼結(jié)構(gòu) 的碼率控制方法,能夠克服JVT-G012碼率控制算法及其改進(jìn)算法在性能上存在的缺陷,實 現(xiàn)對分層B幀編碼結(jié)構(gòu)最有效的碼率控制。本發(fā)明解決其技術(shù)問題是采取以下技術(shù)方案實現(xiàn)的一種基于H. 264分層B幀編碼結(jié)構(gòu)的碼率控制方法,用于依次對當(dāng)前GOP中的每 個編碼幀進(jìn)行碼率控制,包括如下步驟(1)在編碼第i個GOP的初始階段,利用可用信道帶寬、第i_l個GOP的目標(biāo)比特 數(shù)和實際編碼比特數(shù)之差計算為每個GOP分配的目標(biāo)比特數(shù);(2)在為第i個GOP分配目標(biāo)比特數(shù)之后,進(jìn)行時域?qū)蛹壉忍胤峙?,利用第i-Ι個 GOP的編碼結(jié)果計算第i個GOP的所有時域?qū)拥臋?quán)重系數(shù),并以此計算為每個時域?qū)臃峙涞?目標(biāo)比特數(shù);(3)在完成第k個時域?qū)泳幋a之后根據(jù)其編碼結(jié)果對剩余未編碼時域?qū)臃峙涞哪?標(biāo)比特數(shù)進(jìn)行調(diào)整;(4)在編碼當(dāng)前時域?qū)拥?個編碼幀的初始階段,通過利用目標(biāo)緩沖器水平、實際 的緩沖器占用量、可用信道帶寬、幀率和當(dāng)前時域?qū)邮S啾忍財?shù)計算給當(dāng)前編碼幀分配的 比特數(shù);(5)在計算出為當(dāng)前編碼幀分配的比特數(shù)之后,采用多MAD預(yù)測模型來預(yù)測當(dāng)前 編碼幀MAD,采用多二次R-Q模型計算當(dāng)前編碼幀量化步長并轉(zhuǎn)換為QP,最后將QP值經(jīng)過 調(diào)整得到碼率控制模塊的輸出。而且,在步驟⑵中,第i個(i = 2,3...)G0P第k個時域?qū)拥臋?quán)重系數(shù)按如下公 式計算
n(k)r(k) . --U 1 = 2 a(i, k)=
^ n(m)/(m)
m=0
0.5 χ T x^dlelse
lTL
Z Xfl (/-1, w)
m=0其中,Xtl(i-1, k)是第i-1個GOP中第k層的編碼復(fù)雜度,n(k)是第k層的編碼 幀數(shù)目,&代表GOP中最高的時域?qū)犹?,Y (k)是第k層編碼幀的初始權(quán)重系數(shù)。而且,所述的第k層編碼幀的初始權(quán)重系數(shù)Y (k)是通過實驗得到的,其取值如 下Il
Q
21 2
Oo ___
'1 if k = 0 0.5 if k = \ 0.4 if k = 2 0.3 if k 二 3 0.2 if k 而且,在步驟(3)中,在完成第k個時域?qū)泳幋a之后根據(jù)其編碼結(jié)果對剩余未編碼 時域?qū)臃峙涞谋忍財?shù)進(jìn)行調(diào)整的方法為對時域?qū)訛榈趉+j層(j = 1. . . LTL-k)按如下公式 計算
T(i,k + j): 二(“ + ■/)_χ_s、i,h) + T(i,k + j) ^ a(i, k + m)
m=\其中,ABits(i,k)是第k層的目標(biāo)編碼比特數(shù)與實際編碼比特數(shù)之差。而且,在步驟(4)中,在計算給當(dāng)前編碼幀分配的比特數(shù)過程中所涉及的第i 1 GOP第k個時域?qū)拥哪繕?biāo)緩沖區(qū)水平下降幅度按如下公式計算
k) χ (^tbl (/ -1) - ^tbl (0) ABTBL(i,k) =
n(k) 其中BTBL(i)表示第i個GOP的目標(biāo)緩沖器水平,其計算如下
ζ/ / = 2
else
「BL(Z.)“
buffer (2, 0,0)
N -\其中Np是二個I幀之間的P中貞總數(shù),BBuffer (i,k,1)是在完成第i個GOP第k層中 的第,1幀編碼后的緩沖器占用量。而且,在步驟(5)中,對于當(dāng)前編碼幀是關(guān)鍵幀的QP值按如下公式進(jìn)行調(diào)整QP(i, 0,0) 二 mm{QP{i — 1,0,0) + v1 xmx{QP{i — 1,0,0)-v QP(i, 0,0)}}其中QP (i,k,1)和分別是調(diào)整前及調(diào)整后的QP值,V1取值如下 V,= <對于當(dāng)前編碼幀是B幀的QP值按如下公式進(jìn)行調(diào)整QP{u k,l) = min{QPR (i, k, /) + V2,max{QPR (/, k, /), QP(i, k,l)}}其中 =3力 1^,^1)是QP(i,k,l)的參考值,其定義如下QPk (i,k, 1) = max (QP1, QP2I其中,QP1和QP2分別是當(dāng)前編碼幀的二個最鄰近參考幀的QP值。
6ifLTL =5ifLtl ~4if^TL =3ifLTL =
6
本發(fā)明的優(yōu)點和積極效果是本發(fā)明碼在對當(dāng)前編碼幀進(jìn)行碼率控制時,首先計算為GOP分配的編碼比特數(shù), 然后計算為當(dāng)前時域?qū)臃峙涞木幋a比特數(shù),再計算幀級別編碼比特數(shù),最后計算出QP。相對 于現(xiàn)有的碼率控制算法,本發(fā)明充分地利用分層B幀編碼結(jié)構(gòu)的特點,可以更精確合理地 控制屬于不同時域?qū)拥木幋a幀比特數(shù),克服了 JVT-G012碼率控制算法及其改進(jìn)算法在性 能上存在的缺陷,提高了碼率控制的準(zhǔn)確性和編碼制質(zhì)量,避免了不同編碼幀之間的峰值 信噪比(PSNR)的波動,能夠自適應(yīng)不同的編碼序列,實現(xiàn)了對分層B幀編碼結(jié)構(gòu)更有效的 碼率控制。
圖1為本發(fā)明所采用的碼率控制方法的流程圖;圖2為對QCIF的“Container”序列采用本實施例方法與JVT-G012算法及其它改 進(jìn)算法仿真后的編碼性能比較示意圖;圖3為對QCIF的“Foreman”序列采用本實施例方法與JVT-G012算法及其它改進(jìn) 算法仿真后的編碼性能比較示意圖;圖4為對CIF的“Bus”序列采用本實施例方法與JVT-G012算法及其它改進(jìn)算法 仿真后的編碼性能比較示意圖;圖5為對CIF的“Football”序列采用本實施例方法與JVT-G012算法及其它改進(jìn) 算法仿真后的編碼性能比較示意圖;圖6為對QCIF的“Foreman”序列在196kbps下采用本實施例方法與JVT-G012改 進(jìn)算法仿真后的逐幀PSNR比較示意圖;圖7為對CIF的“Bus”序列在1500kbps下采用本實施例方法與JVT-G012改進(jìn)算 法仿真后的逐幀PSNR比較示意圖。
具體實施例方式以下結(jié)合實例對本發(fā)明做進(jìn)一步描述。為解決現(xiàn)有技術(shù)中存在的問題,本發(fā)明提出一種全新的基于H. 264分層B幀編碼 結(jié)構(gòu)的碼率控制方法。由于低層編碼幀對整體編碼效率有相對更高的貢獻(xiàn),所以應(yīng)該給低 層的編碼幀分配更多的比特數(shù),以提高高層編碼幀在進(jìn)行運動估計時的效率;相反,應(yīng)該給 高層編碼幀分配較少的比特數(shù),因為高層編碼幀影響到的編碼幀相對低層而言要少。本發(fā) 明提出的方法充分利用了這些編碼結(jié)構(gòu)特性,針對每個G0P,根據(jù)信道帶寬、幀率和緩沖器 狀態(tài)計算分配的目標(biāo)比特數(shù);采用了時域?qū)蛹壍谋忍財?shù)分配,保證不同的時域?qū)臃峙涞胶?理的目標(biāo)比特數(shù);在此之后,在幀級別給關(guān)鍵幀以及分層B幀分配相應(yīng)的目標(biāo)比特數(shù);最 后,根據(jù)目標(biāo)比特數(shù)計算相應(yīng)的QP并進(jìn)行調(diào)整。相對于現(xiàn)有JVT-G012算法及其改進(jìn)算法, 本控制方法對分層B幀編碼結(jié)構(gòu)下的碼率控制更加有效?;谏鲜鼋榻B,本發(fā)明所述方案的具體實現(xiàn)包括以下步驟(1)在編碼第i個GOP的初始階段,利用可用信道帶寬、第i_l個GOP的目標(biāo)比特 數(shù)和實際編碼比特數(shù)之差計算為每個GOP分配的目標(biāo)比特數(shù);(2)在為第i個GOP分配目標(biāo)比特數(shù)之后,進(jìn)行時域?qū)蛹壉忍胤峙洌玫趇-Ι個GOP的編碼結(jié)果計算第i個GOP的所有時域?qū)拥臋?quán)重系數(shù),并以此計算為每個時域?qū)臃峙涞?目標(biāo)比特數(shù);(3)在完成第k個時域?qū)泳幋a之后根據(jù)其編碼結(jié)果對剩余未編碼時域?qū)臃峙涞哪?標(biāo)比特數(shù)進(jìn)行調(diào)整;(4)在編碼當(dāng)前時域?qū)拥?個編碼幀的初始階段,通過利用目標(biāo)緩沖器水平、實際 的緩沖器占用量、可用信道帶寬、幀率和當(dāng)前時域?qū)邮S啾忍財?shù)計算給當(dāng)前編碼幀分配的 比特數(shù);(5)在計算出為當(dāng)前編碼幀分配的比特數(shù)之后,采用多MAD預(yù)測模型來預(yù)測當(dāng)前 編碼幀MAD,采用多二次R-Q模型計算當(dāng)前編碼幀量化步長并轉(zhuǎn)換為QP,最后將QP值經(jīng)過 調(diào)整得到碼率控制模塊的輸出。為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明進(jìn)一 步詳細(xì)說明。如圖1所示,本發(fā)明所采用的碼率控制方法包括以下步驟步驟101 序列的第1幀為立即刷新幀(IDR),該幀獨立構(gòu)成第1個G0P,采用 JVT-GO12中的方法分配初始QP,直接編碼該幀。步驟102 在編碼第i個GOP的初始階段,計算給整個GOP分配的目標(biāo)比特數(shù)???慮了可用信道帶寬、幀率以及緩沖器狀態(tài),其計算如下^gop (/) =X TVoop + Δ5 (/ -1)(1)其中TroP(i)表示分配給第i個GOP的比特數(shù),u(i,0,0)是第i個GOP初始時刻可 用信道帶寬,F(xiàn)是幀率,Ntop是一個GOP里總的幀數(shù),ΔΒ( -Ι)是第i_l個GOP的目標(biāo)比特數(shù) 與實際編碼比特數(shù)之差。從該公式可以看到,后續(xù)GOP的編碼結(jié)果取決于之前的GOP——如 果上一個GOP目標(biāo)編碼比特數(shù)大于實際值,那么當(dāng)前GOP就可以多分配一些比特數(shù),反之少 分配一些。換句話說,如果上一個GOP的實際編碼比特數(shù)超支,那么為本GOP分配的比特數(shù) 就要“承受”這種超支;如果上一個GOP的實際編碼比特數(shù)比目標(biāo)值少,那么剩余的比特數(shù) 就可以留給本GOP使用,這樣就可以保證總體碼率控制的精度。需要注意的是,若當(dāng)前GOP 是第二個G0P,由于第1個GOP只包含一個IDR幀,故公式(1)中的后半部分不考慮,采用下 式計算rG0P (2) =χ TVgop(2)步驟103 在為第i個GOP分配目標(biāo)比特數(shù)之后,進(jìn)行時域?qū)蛹壉忍胤峙?,利用?i-Ι個GOP的編碼結(jié)果計算第i個GOP的所有時域?qū)拥臋?quán)重系數(shù)。一方面,屬于不同層的編 碼幀有不同的R-D特性,另一方面,不同層包含的編碼幀數(shù)目也各不相同。考慮以上兩點因 素,第k個時域?qū)拥哪繕?biāo)比特數(shù)計算如下T(i, k) = α (i, k) XTgop(i) (3)其中α (i,k)是第i個GOP (第1個GOP只含一個IDR幀,不予以計算)中第k層 的權(quán)重系數(shù),在本發(fā)明中,其計算如下
8
其中Q(i,k,1)是第i個GOP第k層第1幀的QP值,B(i,k,1)是編碼該幀產(chǎn)生 的實際比特數(shù)。公式(3)和(6)中的n(k)是第k層的編碼幀數(shù)。采用公式(3)進(jìn)行計算的原因是首先,若當(dāng)前GOP為編碼序列中的第二個GOP中 (i = 2),通過實驗設(shè)定合適的權(quán)重系數(shù)初始值,使前幾個GOP的編碼性能有所保證;其次, 若當(dāng)前GOP非編碼序列中的第二個G0P,其權(quán)重系數(shù)計算依賴于為之前一個GOP分配的權(quán)重 系數(shù)及該權(quán)重系數(shù)下的編碼結(jié)果(編碼復(fù)雜度),使得當(dāng)前GOP的權(quán)重系數(shù)計算更為準(zhǔn)確。步驟104 在完成第k個時域?qū)泳幋a后,進(jìn)行時域?qū)蛹壉忍卣{(diào)整。與GOP級比特分 配相似,假如某層有剩余比特,余下的比特將被按比例分配給未編碼的時域?qū)樱员WC編碼 質(zhì)量的最大化;假如該層實際的編碼比特數(shù)比預(yù)期多,那么余下的未編碼層將共同承受該 層比特數(shù)超支的影響。根據(jù)以上分析,在完成第k個時域?qū)泳幋a之后,本發(fā)明采用如下公式 來對高于其的剩余未編碼時域?qū)臃峙浔忍財?shù)進(jìn)行更新
m-\
其中,ABits(i,k)是第k層的目標(biāo)編碼比特數(shù)與實際編碼比特數(shù)之差,j = 1, 步驟105 在編碼第i個GOP的第k層的第1幀初始階段,進(jìn)行幀級比特分配。與 JVT-G012相似,通過預(yù)先為每個編碼幀定義目標(biāo)緩沖器占用量來實現(xiàn)比特分配。分配給i 個GOP第k層的第1幀的比特數(shù)通過目標(biāo)緩沖器水平、幀率、可用信道帶寬以及實際的緩沖器占用量計算如下
(8)其中Y是常數(shù),其典型值為0.25。F是幀率,u(i,k,l)是編碼第i個GOP第k層 的第1幀時的信道帶寬,Beuffer(i, k,1)是在完成第i個GOP第k層中的第1幀編碼后的緩 沖器占用量,Bm(i,k,1)表示目標(biāo)緩沖器水平,其更新如下
(9)不同于JVT-G012,本發(fā)明中,目標(biāo)緩沖區(qū)水平下降幅度ABm(i,k)計算如下
10)其中BTBL(i)表示第i個GOP的目標(biāo)緩沖器水平,其計算如下 其中Np是二個I幀之間的P幀總數(shù)。從公式(10)可以看到,與JVT-G012不同,由于不同時域?qū)拥腂幀編碼產(chǎn)生出的比 特數(shù)各不相同,因此本發(fā)明中的緩沖器控制方法并不是控制整個緩沖器占用量在完成每幀 編碼后以相同的幅度下降。不同層的緩沖器下降幅度根據(jù)各層權(quán)重系數(shù)決定,在相同層內(nèi) 的下降幅度相同。同時,分配給每幀的比特數(shù)必須考慮時域?qū)拥哪繕?biāo)比特數(shù) 其中尹和分別代表編碼第i個GOP第k層中第1幀前的剩余比特數(shù) 及剩余未編碼幀數(shù)目。最終分配給每幀的目標(biāo)比特數(shù)是PFrame(i·,、/)和fFrame(/,A;,/)的一個加權(quán)和
(13)其中β是常數(shù)且典型值為0. 9,該值的選取與JVT-G012 —致。步驟106 在第i個GOP的第k層的第1個編碼幀比特數(shù)分配完成之后,進(jìn)行QP計 算。采用經(jīng)典的二次R-Q模型計算量化參數(shù)
(14)其中R'是分配給當(dāng)前編碼幀的總比特數(shù),H代表頭信息,Mf是當(dāng)前幀MAD的預(yù)測 值,X1和X2是兩個模型參數(shù)。計算得到的量化步長Q經(jīng)過轉(zhuǎn)化得到QP。
因為不同時域?qū)觾?nèi)的編碼幀具有不同的R-D特性,因此針對不同層,采用不同的 R-Q模型。也就是說,模型參數(shù)是將與當(dāng)前編碼幀相同層內(nèi)的已編碼幀的實際編碼比特數(shù)及 量化步長作為歷史數(shù)據(jù),使用線性回歸方法更新得到。頭信息采用相同層內(nèi)前一個編碼幀的實際頭信息值作為預(yù)測值。MAD預(yù)測方法采 用的是JVT-G012中提出的線性預(yù)測模型。為了獲得準(zhǔn)確的預(yù)測結(jié)果,編碼幀在各自層上使 用各自的線性預(yù)測模型進(jìn)行更新。為獲得較為平滑的編碼質(zhì)量,通過R-Q模型計算得到的QP還要進(jìn)行調(diào)整。如果當(dāng)
前編碼幀是關(guān)鍵幀,調(diào)整過程如下
QPiU 0,0) = mm{QP{i — 1,0,0) + v max {QP(i -1,0,0)-v,, QP(i, 0,0)}} (15)其中QP(i,k,1)和分別是調(diào)整前及調(diào)整后的QP值。在JVT-G012中,
V1設(shè)置為2。對于分層B幀編碼結(jié)構(gòu),在兩個關(guān)鍵幀之間插入的B幀數(shù)越多,意味著兩個關(guān) 鍵幀之間的距離就越遠(yuǎn),兩者間的相關(guān)度就越低,故V1的值就應(yīng)該越大。本發(fā)明通過實驗 得到以下經(jīng)驗值 V1 = <
ifLfl = 4if厶 TL = 3ifLpl = 2(16)ifLjl = 1
5 4 3
ν如果當(dāng)前編碼幀是B幀,其調(diào)整流程如下
QP(i, k, /) = min {QPR (ζ, k,l) + v2, max {QPR (i, kj), QP(i, k,l)}} (17)其中 為經(jīng)驗值,在本發(fā)明中取值為3;QPK(i,k,l)是QP(i,k,l)的參考值,其定 義如下QPk (i,k, 1) = max (QP1, QP2I (18)其中QP1和QP2是當(dāng)前編碼幀的二個最鄰近參考幀的QP值。由公式(17)及(18) 可以看到,處于上層的B幀分配到的QP值必須大于或者等于較低的時域?qū)?,這是因為越上 層的B幀對整個序列的編碼效率貢獻(xiàn)越小,所以應(yīng)該給它們分配更大的QP。步驟107 采用分配到的QP值編碼當(dāng)前幀。步驟108 判斷序列是否結(jié)束,是則結(jié)束碼率控制流程,否則進(jìn)入步驟109。步驟109 判斷當(dāng)前GOP是否編碼完畢,是則轉(zhuǎn)入步驟102,否則進(jìn)入步驟110。步驟110 判斷當(dāng)前時域?qū)邮欠窬幋a完畢,是則轉(zhuǎn)入步驟104,否則轉(zhuǎn)入步驟105。至此,即完成了本發(fā)明所述的分層B幀碼率控制方法的過程。以H. 264參考軟件JM14. 2作為平臺,仿真了所提出的碼率控制算法。為了驗證該 算法的性能,本發(fā)明還與碼率控制算法JVT-G012、針對分層B幀編碼結(jié)構(gòu)的碼率控制改進(jìn) 算法JVT-W042中的模式3以及JVT-P014中所提出的Cascading QP算法性能進(jìn)行比較。實驗的編碼幀率為30fps,兩個關(guān)鍵幀之間插入的B幀數(shù)目為7 ;運動估計的精度 設(shè)置為1/4,搜索范圍為16,參考幀的個數(shù)為1。開啟CABAC編碼模式以及RD0。實驗選擇
11的測試序列為 QCIF 序列 “Container” 和 “Foreman” 以及 CIF 序列 “Bus” 和 “Football”。圖2 圖5展示了 4個測試序列的R-D性能曲線。其中,JVT-GO12, JVT-PO14中 的Cascading QP的方法、JVT-W042中的模式3以及本發(fā)明所提出的碼率控制算法在圖中 分別標(biāo)識為“6012”,叩014”,“1042”以及“本發(fā)明算法”。從圖中可以看出,針對分層B幀 編碼結(jié)構(gòu),與傳統(tǒng)碼率控制JVT-G012相比,本發(fā)明所提出的碼率控制算法可以獲得相當(dāng)可 觀的編碼增益,例如2000kbps下的“Football”序列PSNR增益達(dá)到1. 4dB。與Cascading QP的方法以及JVT-W042里的模式3比較,本發(fā)明提出的算法也獲得了更高的編碼質(zhì)量。圖6及圖7分別展示了“Foreman”序列在目標(biāo)碼率為196kbps下以及“Bus”序列 在1500kbps下前16個GOP的逐幀亮度PSNR比較圖。圖中給出了 W042模式3、Cascading QP的算法以及本發(fā)明算法的測試結(jié)果。從圖中可以看出,絕大部分情況下,本發(fā)明算法的 PSNR都要高于另外兩種算法。同時可以觀察到,在同一個GOP內(nèi),Cascading QP算法PSNR 波動很大,W042次之,而本發(fā)明算法獲得的結(jié)果相對穩(wěn)定。表1 表4分別列出了 4個序列的具體編碼結(jié)果,從中可以看到,本發(fā)明所提出的 碼率控制方法可以得到比其它方法更精確的控制結(jié)果,目標(biāo)碼率與實際碼率之間的誤差在 2%以內(nèi);同時,針對不同序列的不同目標(biāo)碼率值,本發(fā)明算法都可以獲得比另外3種算法 更高的亮度PSNR值。表1 “Container”序列編碼結(jié)果 表2 “Foreman”序列編碼結(jié)果
表3 “Bus”序列編碼結(jié)果 總之,本發(fā)明碼率控制方法在對分層B幀編碼結(jié)構(gòu)進(jìn)行碼率控制時,首先,利用緩 沖器狀態(tài)、信道帶寬、幀率計算為每個GOP分配的比特數(shù);其次,利用之前一個GOP的編碼信 息計算為當(dāng)前GOP中的每個時域?qū)臃峙涞谋忍財?shù),并在完成每個時域?qū)泳幋a之后根據(jù)該時 域?qū)拥木幋a結(jié)果對剩余未編碼時域?qū)臃峙涞谋忍財?shù)進(jìn)行調(diào)整;接著,根據(jù)目標(biāo)緩沖器水平 以及實際緩沖器充溢狀態(tài)、信道帶寬、幀率,對每個編碼幀分配編碼比特數(shù);最后,采用線性 MAD預(yù)測模型及二次R-Q模型計算當(dāng)前編碼幀量化步長,在將該量化步長轉(zhuǎn)換成QP之后,做 進(jìn)一步的調(diào)整。采用本發(fā)明所述的方法,相對于現(xiàn)有的碼率控制方法,可以更有效地利用分 層B幀編碼結(jié)構(gòu)特點,克服了 JVT-G012碼率控制算法應(yīng)用于分層B幀編碼結(jié)構(gòu)時存在的缺 陷,實現(xiàn)最有效的碼率控制。需要強(qiáng)調(diào)的是,本發(fā)明所述的實施例是說明性的,而不是限定性的,因此本發(fā)明并 不限于具體實施方式
中所述的實施例,凡是由本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出 的其他實施方式,同樣屬于本發(fā)明保護(hù)的范圍。
1權(quán)利要求
一種基于H.264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征在于用于依次對當(dāng)前GOP中的每個編碼幀進(jìn)行碼率控制,包括如下步驟(1)在編碼第i個GOP的初始階段,利用可用信道帶寬、第i 1個GOP的目標(biāo)比特數(shù)和實際編碼比特數(shù)之差計算為每個GOP分配的目標(biāo)比特數(shù);(2)在為第i個GOP分配目標(biāo)比特數(shù)之后,進(jìn)行時域?qū)蛹壉忍胤峙?,利用第i 1個GOP的編碼結(jié)果計算第i個GOP的所有時域?qū)拥臋?quán)重系數(shù),并以此計算為每個時域?qū)臃峙涞哪繕?biāo)比特數(shù);(3)在完成第k個時域?qū)泳幋a之后根據(jù)其編碼結(jié)果對剩余未編碼時域?qū)臃峙涞哪繕?biāo)比特數(shù)進(jìn)行調(diào)整;(4)在編碼當(dāng)前時域?qū)拥趌個編碼幀的初始階段,通過利用目標(biāo)緩沖器水平、實際的緩沖器占用量、可用信道帶寬、幀率和當(dāng)前時域?qū)邮S啾忍財?shù)計算給當(dāng)前編碼幀分配的比特數(shù);(5)在計算出為當(dāng)前編碼幀分配的比特數(shù)之后,采用多MAD預(yù)測模型來預(yù)測當(dāng)前編碼幀MAD,采用多二次R Q模型計算當(dāng)前編碼幀量化步長并轉(zhuǎn)換為QP,最后將QP值經(jīng)過調(diào)整得到碼率控制模塊的輸出。
2.根據(jù)權(quán)利要求1所述的一種基于H.264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征 在于在步驟(2)中,第i個(i = 2,3...)G0P第k個時域?qū)拥臋?quán)重系數(shù)按如下公式計算 其中,Xtl(i-l, k)是第i-1個GOP中第k層的編碼復(fù)雜度,n(k)是第k層的編碼幀數(shù) 目,&代表GOP中最高的時域?qū)犹?,Y (k)是第k層編碼幀的初始權(quán)重系數(shù)。
3.根據(jù)權(quán)利要求2所述的一種基于H. 264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征 在于所述的第k層編碼幀的初始權(quán)重系數(shù)γ (k)是通過實驗得到的,其取值如下
4.根據(jù)權(quán)利要求1所述的-種基于H. 264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征 在于在步驟(3)中,在完成第k個時域?qū)泳幋a之后根據(jù)其編碼結(jié)果對剩余未編碼時域?qū)臃?配的比特數(shù)進(jìn)行調(diào)整的方法為對時域?qū)訛榈趉+j層(j = 1. . . LTL-k)按如下公式計算 其中,ABits(i,k)是第k層的目標(biāo)編碼比特數(shù)與實際編碼比特數(shù)之差。
5.根據(jù)權(quán)利要求1所述的一種基于H.264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征 在于在步驟(4)中,在計算給當(dāng)前編碼幀分配的比特數(shù)過程中所涉及的第i個GOP第k個 時域?qū)拥哪繕?biāo)緩沖區(qū)水平下降幅度按如下公式計算 其中Bm(i)表示第i個GOP的目標(biāo)緩沖器水平,其計算如下 召孤⑴召孤⑵-W2’0’0)x(/-1) else 其中Np是二個I幀之間的P幀總數(shù),BBuffCT(i,k,1)是在完成第i個GOP第k層中的第 1幀編碼后的緩沖器占用量。
6.根據(jù)權(quán)利要求1所述的一種基于H.264分層B幀編碼結(jié)構(gòu)的碼率控制方法,其特征 在于在步驟(5)中,對于當(dāng)前編碼幀是關(guān)鍵幀的QP值按如下公式進(jìn)行調(diào)整 其中QP (i,k,1)和A:,/)分別是調(diào)整前及調(diào)整后的QP值,V1取值如下 對于當(dāng)前編碼幀是B幀的QP值按如下公式進(jìn)行調(diào)整QPiUKI) = min{QPr(i,k,l) + v2,max{QPK(i,k,I),QP{i,k,l)}}其中V2 = 3 ;QPE(i,k, 1)是QP(i,k,1)的參考值,其定義如下 QPk (i,k,D=HiaxiQP1, QP2I其中,QP1和QP2分別是當(dāng)前編碼幀的二個最鄰近參考幀的QP值。
全文摘要
本發(fā)明公開了一種基于H.264分層B幀編碼結(jié)構(gòu)的碼率控制方法,用于依次對當(dāng)前GOP中的每個編碼幀進(jìn)行碼率控制,包括步驟(1)根據(jù)信道帶寬、幀率和之前一個GOP的目標(biāo)比特數(shù)和實際編碼比特數(shù)之差計算為每個GOP分配的比特數(shù);(2)利用之前一個GOP的時域?qū)泳幋a信息計算為當(dāng)前GOP中的時域?qū)臃峙涞谋忍財?shù);(3)在對時域?qū)油瓿删幋a之后根據(jù)其編碼結(jié)果對剩余未編碼時域?qū)臃峙涞谋忍財?shù)進(jìn)行調(diào)整;(4)對每個編碼幀分配編碼比特數(shù);(5)計算當(dāng)前編碼幀量化步長,在將該量化步長轉(zhuǎn)換成QP之后,做進(jìn)一步的調(diào)整得到碼率控制模塊的輸出。本發(fā)明充分利用了分層B幀編碼結(jié)構(gòu)的特點,克服了JVT-G012碼率控制算法及其改進(jìn)算法在性能上的缺陷,實現(xiàn)對分層B幀編碼結(jié)構(gòu)更有效的碼率控制。
文檔編號H04N7/50GK101917614SQ201010190719
公開日2010年12月15日 申請日期2010年6月3日 優(yōu)先權(quán)日2010年6月3日
發(fā)明者葉鋒, 宗曉飛, 常侃, 張文豪, 楊波, 邸金紅, 門愛東, 韓鈺 申請人:北京郵電大學(xué)