周 建 政
(天格科技(杭州)有限公司 浙江 杭州 310011)
?
一種HEVC碼率控制改進(jìn)算法
周 建 政
(天格科技(杭州)有限公司浙江 杭州 310011)
HEVC(High Efficiency Video Coding)采用的基于R-λ模型的碼率控制算法在控制輸出碼率的精確和提高編碼效率上都取得了良好的效果。然而該算法沒有考慮到實際視頻編碼中場景切換的影響。提出一種新的針對場景切換的碼率控制算法。首先結(jié)合幀間的亮度差及其變換趨勢判斷是否發(fā)生場景切換,在場景切換發(fā)生時對碼率控制的參數(shù)以及編碼結(jié)構(gòu)都做出及時調(diào)整。最后實驗表明,與HEVC自帶的碼率控制相比,所提出的碼率控制算法能夠有效應(yīng)對視頻序列中的場景切換,提高了編碼質(zhì)量,降低了編碼復(fù)雜度,并且保持精確的輸出碼率。
碼率控制場景切換HEVC編碼
隨著視頻服務(wù)多樣化的發(fā)展以及高清甚至超高清視頻的普及,原有的視頻編碼標(biāo)準(zhǔn)如H.264/MPEG-4 AVC以及越來越力不從心,因此,人們迫切需要一種新的更加高效的視頻編碼標(biāo)準(zhǔn)。HEVC是 ISO-IEC/MPEG 和 ITU-T /VCEG兩大國際標(biāo)準(zhǔn)化組織聯(lián)合制定的新一代視頻編碼標(biāo)準(zhǔn),它沿用了傳統(tǒng)視頻編碼標(biāo)準(zhǔn)的混合視頻編碼基本框架,但在各個編碼模塊上都進(jìn)行了改進(jìn)和革新。與H.264/AVC相比,在同等應(yīng)用條件和視頻質(zhì)量下釆用HEVC進(jìn)行編碼的碼率要降低將近一半[1,4,5]。
在視頻編碼的過程中,輸出視頻質(zhì)量與使用的碼率是密切相關(guān)的,編碼視頻的質(zhì)量越好,消耗的碼率資源也會越多。但是在實際的應(yīng)用過程中,因為存儲空間和傳輸帶寬有限,需要將編碼視頻的輸出碼率控制在一定范圍內(nèi),同時又要盡可能地提高視頻質(zhì)量,這時就應(yīng)該采取碼率控制。碼率控制雖然不是視頻編碼中必須的內(nèi)容,但是卻是視頻編碼的非常重要組成部分。目前HEVC參考軟件HM中采用的是Bin Li等人提出的基于R-λ模型的碼率控制算法[2]。其中λ是RDO(Rate Distortion Optimization)過程中的一個重要參數(shù)。R-λ模型如下:
λ=α×Rβ
(1)
式中α和β是和編碼視頻有關(guān)的參數(shù),可以隨著編碼過程不斷更新。R是當(dāng)前編碼幀或編碼單元的目標(biāo)比特。在計算得到λ之后,通過下式計算量化參數(shù)QP:
QP=4.2005×lnλ+13.7122
(2)
雖然該碼率控制算法相比于傳統(tǒng)的碼率控制可以取得更高的編碼效率,卻并未考慮到實際應(yīng)用中場景切換對視頻編碼和碼率控制的影響。場景切換會切斷相鄰幀之間的時間相關(guān)性,若編碼器不能及時進(jìn)行調(diào)整,將會導(dǎo)致編碼資源浪費,壓縮效率降低,同時預(yù)測模型參數(shù)的有效性也會降低,影響碼率控制的準(zhǔn)確性。目前,針對場景切換提出了很多碼率控制算法。如文獻(xiàn)[7]中提出一種低比特率情況下的實時檢測場景切換以及進(jìn)行QP調(diào)整的碼率控制算法;文獻(xiàn)[6]中提出了一種自適應(yīng)碼率控制算法,通過YUV三個分量的變化來檢測場景變換,同時GOP長度也進(jìn)行自適應(yīng)改變;文獻(xiàn)[7]分析了場景切換對編碼質(zhì)量的影響,并利用人眼的時域掩蓋特性提出了相應(yīng)的目標(biāo)比特數(shù)計算方法。
上述算法都是應(yīng)用于H.264平臺。本文提出一種應(yīng)用于HEVC平臺的基于場景切換的碼率控制算法。首先通過計算相鄰幀的亮度差變換趨勢探測場景切換幀,在確定當(dāng)前幀是場景切換幀后,對編碼參數(shù)進(jìn)行及時調(diào)整,保持視頻平滑性并提高編碼質(zhì)量,同時保持輸出碼率的準(zhǔn)確性。實驗表明,該碼率控制算法可以有效提高有場景切換視頻的編碼效率。
場景切換處都伴隨著相鄰兩幀亮度分量的大幅度變化。因此本文使用當(dāng)前幀與前一幀的亮度差作為場景切換檢測的基礎(chǔ),亮度差的計算公式可以表示如下:
(3)
其中,D(n)為當(dāng)前幀,即第n幀,與前一幀亮度的差值。Yn(i,j)是第n幀(i,j)位置的亮度分量值。M和N是幀的寬度和高度。D(n)不能單獨作為場景切換的判斷依據(jù),因為沒有發(fā)生切換的場景中運(yùn)動的快慢變化也會影響到D(n)的大小。為了消除這種影響,應(yīng)該將當(dāng)前幀的亮度變化與前面已編碼幀的亮度變化趨勢相比較。亮度變化趨勢D′(n-1)可以表示如下:
D′(n-1)=0.5×D(n-1)+0.5×D′(n-2)
(4)
設(shè)序列的第二幀以及場景切換后一幀的D′都等于D。D′(n-1)的計算不包括上一個場景切換幀及其之前的幀。判斷當(dāng)前幀是否為場景切換幀的依據(jù)K(n)的計算為:
(5)
設(shè)序列的第一幀,第二幀的K為1。場景切換發(fā)生后的幾幀內(nèi)一般不會再發(fā)生場景變換,但是此時亮度變換趨勢也并不穩(wěn)定,為防止此時發(fā)生誤判,設(shè)場景變換后的4幀的K都等于1。我們截取了6個分辨率為832 480的測試序列,分別是35幀Keiba, 38幀F(xiàn)lowervase, 40幀PartyScene, 41幀BQMall, 37幀BasketballDrill, 33幀RaceHorse合成了一個有5處場景切換的序列。圖1給出這個序列各幀K值的變化曲線。
圖1 合成序列中各幀K值的變換曲線
從圖1中可以看出在場景切換處K值都發(fā)生了劇烈的變化。因此若當(dāng)前幀的K(n)滿足以下條件,我們就判定該幀為場景切換幀:
K(n)>th
(6)
式中,th為設(shè)置的閾值。我們通過大量的實驗經(jīng)驗將th取值2.5,實驗沒有出現(xiàn)漏檢和誤檢的情況。
本文的算法在編碼每一幀前都會先使用上述場景切換檢測算法判斷當(dāng)前幀是否是場景切換幀。如果沒有發(fā)生場景切換,碼率控制采用文獻(xiàn)[2]中的方法。如果檢測到當(dāng)前幀是場景切換幀,那么碼率控制策略將發(fā)生如下改變:
1) 將碼率控制模型中使用的參數(shù),即和,置換成初始值。場景切換發(fā)生時,前后幀之間的時間相關(guān)性被切斷。因為碼率控制中的模型參數(shù)是從前面已編碼幀預(yù)測得來,而此時圖像的屬性已發(fā)生突變,模型參數(shù)失去有效性從而導(dǎo)致碼率控制的不準(zhǔn)確,同時因為參數(shù)更新是一個緩變的過程,如不及時調(diào)整還會影響到后續(xù)多幀的碼率控制準(zhǔn)確性。
2) 由于前后幀已不具備時間相關(guān)性,如果后續(xù)幀依然將切換前的幀作為參考幀,就會浪費大量的編碼資源。所以在本文算法中,當(dāng)前GOP提前結(jié)束,并將當(dāng)前場景切換幀設(shè)置為I幀,后面的幀不以場景變換以前的幀作為參考幀。
3) 為了保持視頻質(zhì)量的平滑,當(dāng)前幀的λ和QP應(yīng)該盡量與前面已編碼幀的λ和QP保持一致??紤]到當(dāng)前幀可能產(chǎn)生大量比特造成緩沖區(qū)上溢,λ和QP應(yīng)該適當(dāng)上調(diào),但是場景切換幀作為關(guān)鍵參考幀,它的編碼質(zhì)量將嚴(yán)重影響后續(xù)編碼幀的質(zhì)量,λ和QP又不能過大。綜合上述因素,本文提出以下方法確定場景切換幀的λ:
λcur=λpre×R
(7)
其中λcur是編碼當(dāng)前場景切換幀要使用的λ值。λpre表示實際編碼上一個GOP中最后一幀所使用的λ。R是一個調(diào)節(jié)因子。設(shè)QPpre為實際編碼上一個GOP中最后一幀所使用的QP,當(dāng)QPpre小于32時,R的值為4,防止發(fā)生緩沖區(qū)上溢;當(dāng)大于32,的值為-4,保證編碼質(zhì)量。之后按照式(2)計算場景切換幀的QP。
4) 場景切換幀之后將開始一個新的GOP的編碼。GOP的目標(biāo)比特TGOP的設(shè)置參考文獻(xiàn)[2]中的方法,即:
(8)
其中NGOP表示GOP的大小,PPicAvg是目標(biāo)碼率,Ncoded是已編碼幀數(shù),SW是平滑窗大小,Rcoded是已編碼幀消耗的比特數(shù),需要將提前終止的GOP剩余的比特數(shù)以及編碼場景切換幀消耗的比特數(shù)都計算在內(nèi)。
為了驗證本文算法的有效性,在HM10.0測試平臺[8]上進(jìn)行實驗。測試序列編碼采用low delay P幀的編碼結(jié)構(gòu),GOP的長度設(shè)為4。此處對兩個測試序列的結(jié)果進(jìn)行分析,序列1是用35幀Keiba,38幀F(xiàn)lowervase,40幀PartyScene,41幀BQMall,37幀BasketballDrill, 33幀RaceHorse合成的序列,總共編碼224幀,共有5處場景切換,分辨率為832×480,幀率是30幀/秒,目標(biāo)碼率設(shè)置為1000 kbps;序列2是用35幀BQTerrace,41幀BasketballDrive,36幀Kimono,38幀Cactus,43幀ParkScene合成的序列,總共編碼193幀,共有4處場景切換,分辨率為1920×1080,幀率是50幀/秒,目標(biāo)碼率設(shè)置為1500 kbps。圖2和圖3顯示了分別用HM10自帶的碼率控制,即文獻(xiàn)[2,4,5],以及本文的碼率控制編碼的各幀PSNR變化曲線。
圖2 測試序列1中各幀PSNR的變換曲線
圖3 測試序列2中各幀PSNR的變換曲線
從圖2、圖3中可以看出本文提出的碼率控制算法很好地提高了編碼質(zhì)量并且維持了輸出視頻質(zhì)量的穩(wěn)定性。實驗結(jié)果表明相比于HM自帶算法的編碼結(jié)果,各幀平均PSNR提高了2.16 dB,標(biāo)準(zhǔn)差降低了1.57。同時由于將場景變換幀設(shè)為幀內(nèi)編碼,又減少了后續(xù)幀的參考幀的緣故,本文算法的編碼時間相比于原算法減少了18.9%。對于序列2,PSNR的提高并不顯著,平均只提高了0.15 dB,這是由于序列2中各場景變換前后編碼復(fù)雜度的改變不如序列1大,所以原算法也能取得較好的效果。但是本文的算法的編碼時間卻減少了17.4%。同時兩個序列的測試結(jié)果都精確地控制了碼率,序列1的實際碼率是1000.76 kbps,序列2的實際碼率是1492.52 kbps,誤差都沒有超過1%。
本文首先提出了一種快速場景切換檢測的方法,并在場景切換對視頻編碼所造成影響充分分析的基礎(chǔ)上,通過自適應(yīng)調(diào)整參數(shù),改變編碼結(jié)構(gòu),使碼率控制可以很好地處理場景變換的情況。結(jié)合HEVC編碼器的實驗結(jié)果表明,本文的算法可以更合理地分配碼率資源,提高視頻質(zhì)量同時又降低了編碼復(fù)雜度,從而有效地提高了編碼效率。
[1] Sullivan G J, Ohm J, Han W J, et al, Overview of the high efficiency video coding (HEVC) standard[J].IEEE Trans. Circuits and Systems for Video Technology,2012,22(12):1649-1668.
[2] Li B. Rate control by R-lambda model for HEVC, Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T 1/SC 29/WG 11[C]//11th Meeting: Shanghai, CN,2012:10-19.
[3] Lee C, Lee S, Oh Y, et al, Real-time H.264 rate control for scene change video at low bit rate[C]//ICCE 2007; 2007:1-2.
[4] Choi H, Nam J, Yoo J,et al. Rate control based on unified RQ model for HEVC. MPEG2012/M23088(JCTVC-H0213)[C].San Jose, USA, Feb,2012.
[5] Choi H, Nam J, Sim D, et al. Initial QP set for rate control. MPEG2012/M25590(JCTVC-J0262)[C].Stockholm, SE,2012.
[6] 余成偉,陸建華,鄭君里.基于場景切換的H.264碼率控制技術(shù)[J].清華大學(xué)學(xué)報,2008,47(7):1133-1136.
[7] 范曉東,余松煜,孫軍. 基于場景切換檢測的碼率控制策略[J].上海交通大學(xué)學(xué)報,2000(6):756-760,764.
[8] HM-10.0 reference software[EB/OL].https://hevc.hhi.fraunhofer.de/svn/svn HEVCSoftware/branches/HM-10.0.
AN IMPROVED ALGORITHM FOR HEVC RATE CONTROL
Zhou Jianzheng
(TiangeTechnology(Hangzhou)Co.,Ltd,Hangzhou310011,Zhejiang,China)
The rate control algorithm based on R-λ model adopted by HEVC (High Efficiency Video Coding) has achieved great performance in both controlling the accuracy of output bitrate and improving coding efficiency. But it does not consider the influence brought forward by scene changes in practical video coding. This paper proposes a new rate control algorithm for scene changes. We first detect whether there are the scene changes by the difference of luma between frames and the variation tendency of the difference. When the scene change occurs, the parameters in rate control and coding structure will be all adjusted instantly and adaptively. Experiment shows that comparing with the rate control in HEVC itself, ours can handle with scene changes in video sequences effectively. The quality is raised and the coding complexity is decreased, while the accuracy of output bitrate is still maintained.
Rate controlScene changeHEVC
2015-04-07。杭州市重大科技創(chuàng)新項目(20142011 A07)。周建政,高工,主研領(lǐng)域:多媒體技術(shù)軟件開發(fā)。
TP3
A
10.3969/j.issn.1000-386x.2016.08.041