劉鵬宇 張 悅 賈克斌 段 堃 劉 暢 孫 萱 崔騰鶴
(北京工業(yè)大學(xué)信息學(xué)部 北京 100124)
(先進(jìn)信息網(wǎng)絡(luò)北京實(shí)驗(yàn)室 北京 100124)
(計(jì)算機(jī)智能與智能系統(tǒng)北京市重點(diǎn)實(shí)驗(yàn)室 北京 100124)
隨著多媒體技術(shù)的不斷發(fā)展,視頻源向著高分辨率、高幀率、多視點(diǎn)的方向邁進(jìn),視頻數(shù)據(jù)量呈爆炸式增長(zhǎng)。與先進(jìn)視頻編碼(Advanced Video Coding, AVC)標(biāo)準(zhǔn)相比,由視頻編碼聯(lián)合專家小組(Joint Collaborative Team on Video Coding,JCT-VC)正式發(fā)布的高效視頻編碼(High Efficiency Video Coding, HEVC)標(biāo)準(zhǔn)能在相同視頻壓縮質(zhì)量下節(jié)省近50%的碼率,獲得了更高壓縮性能[1-4]。基于HEVC標(biāo)準(zhǔn)的x265是一款面向?qū)嶋H業(yè)務(wù)場(chǎng)景的高效視頻編碼器,其極大提升了編碼速度,成為業(yè)界關(guān)注的熱點(diǎn)[5,6]。
視頻編碼器中涉及的技術(shù)主要分為標(biāo)準(zhǔn)技術(shù)與非標(biāo)準(zhǔn)技術(shù)兩大類,視頻編碼標(biāo)準(zhǔn)所規(guī)定的編碼技術(shù)即為標(biāo)準(zhǔn)技術(shù),而根據(jù)不同視頻編碼業(yè)務(wù)需求衍生出的技術(shù)則為非標(biāo)準(zhǔn)技術(shù),后者能夠改善視頻編碼器的壓縮性能[7]。在眾多非標(biāo)準(zhǔn)技術(shù)中,幀類型決策技術(shù)著眼于最基本的視頻幀類型,HEVC中根據(jù)對(duì)視頻各幀采用的預(yù)測(cè)方式,將待編碼幀分為幀內(nèi)編碼幀(Intra-coded picture, I幀)、前向預(yù)測(cè)編碼幀(Predictive-coded picture, P幀)、雙向預(yù)測(cè)編碼幀(Bidirectionally predicted picture, B幀)和普通P和B幀(Generalized P and B picture,GPB幀),不同幀類型因采取的編碼方式不同會(huì)影響視頻壓縮效率。因此,根據(jù)視頻內(nèi)容特性決策視頻幀類型至關(guān)重要。
視頻通常由具有不同內(nèi)容的場(chǎng)景拼接而成,不同場(chǎng)景拼接處稱為視頻的場(chǎng)景切換,場(chǎng)景切換處伴隨幀間內(nèi)容的大幅變化。若使用前一場(chǎng)景幀的內(nèi)容對(duì)當(dāng)前幀預(yù)測(cè)編碼,無(wú)疑會(huì)導(dǎo)致編碼后的視頻質(zhì)量大幅下降。因此,在視頻編碼過(guò)程中,將場(chǎng)景切換幀定為I幀能夠顯著提高編碼質(zhì)量。目前,針對(duì)待編碼視頻的場(chǎng)景切換檢測(cè)主要有基于率失真代價(jià)(Rate-Distortion Cost, RD Cost)的場(chǎng)景切換檢測(cè)算法[6]和基于亮度直方圖的場(chǎng)景切換檢測(cè)算法[8-11]。x265采用基于RD Cost的場(chǎng)景切換檢測(cè)算法,在檢測(cè)場(chǎng)景切換幀時(shí),比較當(dāng)前幀的全幀內(nèi)編碼RD Cost和當(dāng)前幀與參考幀之間的幀間編碼RD Cost,當(dāng)全幀內(nèi)編碼RD Cost大于幀間編碼RD Cost時(shí),則將當(dāng)前幀設(shè)為場(chǎng)景切換幀,該算法雖性能優(yōu)異計(jì)算復(fù)雜度較高??紤]到亮度直方圖統(tǒng)計(jì)的圖像中每個(gè)像素點(diǎn)的亮度信息在一定程度上能夠反映圖像內(nèi)容,因此,幀間亮度直方圖差異在一定程度上可以表示幀間場(chǎng)景差異。為克服上述方法的缺陷,文獻(xiàn)[8-11]通過(guò)計(jì)算并比較視頻前后兩幀的全局直方圖差異實(shí)現(xiàn)場(chǎng)景切換檢測(cè),雖顯著提升了編碼速度,但因?yàn)槠洳](méi)有考慮到幀間的局部?jī)?nèi)容差異,使得本就不大的幀間亮度分布差異淹沒(méi)在了巨量像素點(diǎn)中,存在閾值設(shè)置困難、檢測(cè)精度較低的缺點(diǎn)。
非I幀的視頻幀則需要通過(guò)決策圖像組(Group Of Pictures, GOP)大小以確定為GPB幀或B幀,主要包括固定GPB幀和B幀決策算法及自適應(yīng)GPB幀與B幀決策算法。其中,固定GPB幀和B幀決策算法采用可配置的單一幀結(jié)構(gòu)確定整段視頻序列的幀類型[12],算法簡(jiǎn)單且適合大多數(shù)視頻序列,但無(wú)法根據(jù)視頻時(shí)序特性進(jìn)一步提高壓縮性能。與固定GPB幀和B幀決策算法相比,自適應(yīng)GPB幀和B幀決策算法能夠根據(jù)視頻時(shí)序特性自適應(yīng)調(diào)整GOP大小,提升壓縮效率。x265中引入了快速自適應(yīng)GPB幀和B幀決策算法及基于Viterbi思想的自適應(yīng)GPB幀與B幀決策算法[13,14]。前者通過(guò)比較不同大小GOP的RD Cost實(shí)現(xiàn)GPB幀和B幀決策,后者則基于Viterbi算法通過(guò)迭代實(shí)現(xiàn)GPB幀和B幀決策,與快速自適應(yīng)GPB幀和B幀決策算法相比顯著提升了壓縮效率,但計(jì)算復(fù)雜度也大大增加。
綜上分析,為解決全局直方圖不能很好地反映視頻時(shí)序特性、現(xiàn)有GPB幀和B幀決策算法復(fù)雜度較高的問(wèn)題,受視頻內(nèi)容與其亮度直方圖具有強(qiáng)相關(guān)性,且統(tǒng)計(jì)亮度直方圖的計(jì)算復(fù)雜度較低的啟發(fā),本文提出基于局部亮度直方圖的自適應(yīng)視頻幀類型決策算法,以視頻幀間局部亮度直方圖差異作為決策視頻幀類型的依據(jù),分為I幀決策和GPB幀與B幀決策兩個(gè)部分,從而高效決策視頻幀類型,降低視頻編碼的算法復(fù)雜度。
如前所述,編碼視頻的幀類型包括I幀、P幀、B幀和GPB幀。I幀采用全幀內(nèi)編碼方式,所占數(shù)據(jù)量較大。P幀和B幀通過(guò)運(yùn)動(dòng)補(bǔ)償?shù)玫疆?dāng)前幀與參考幀之間的差值及運(yùn)動(dòng)矢量并進(jìn)行傳送。其中,P幀只參考最靠近它的前向I幀或P幀,壓縮效率較高,B幀的參考幀為前向I幀或P幀和后向P幀,壓縮效率最高。GPB幀是P幀和普通B幀的統(tǒng)稱,普通B幀將在低時(shí)延應(yīng)用場(chǎng)景中取代P幀,采用類似B幀的雙向預(yù)測(cè)方式,但其參考幀均為當(dāng)前幀之前的幀,增加了運(yùn)動(dòng)估計(jì)的準(zhǔn)確度。x265中通過(guò)外部配置實(shí)現(xiàn)將GPB幀選擇為P幀還是普通B幀。
GOP是視頻編、解碼器對(duì)視頻進(jìn)行處理的基本單元,一段GOP的第1幀為I幀,其余幀為B幀或P幀,如圖1所示,其中箭頭方向表示幀間參考關(guān)系。在碼率不變的前提下,GOP大小將影響視頻質(zhì)量,GOP越大,視頻中的B幀和P幀的數(shù)量越多,平均每幀所占用的字節(jié)數(shù)就越多,就能得到更高的視頻質(zhì)量。因此,在編碼復(fù)雜度可控的前提下,根據(jù)視頻特性決策視頻的各幀類型能夠有效提升視頻編碼效率。
圖1 GOP示意圖
圖像的空間信息是反映圖像內(nèi)容的關(guān)鍵。針對(duì)全局亮度直方圖無(wú)法反映圖像空間信息的問(wèn)題,本文提出基于局部亮度直方圖的自適應(yīng)視頻幀類型決策算法,流程圖如圖2所示。
圖2 基于局部亮度直方圖的自適應(yīng)視頻幀類型決策算法流程圖
為與x265編碼框架耦合,避免引入額外的計(jì)算負(fù)擔(dān),本文以64×64大小的CTU為單位獲取視頻各幀局部亮度直方圖以彌補(bǔ)全局亮度直方圖空間信息的缺失,如式(1)和式(2)
其中,Hn表 示第n幀中所有CTU的局部亮度直方圖集合,Hn,i,j表 示第n幀 中第i行 第j列CTU的局部亮度直方圖,Hn,i,j[k]表 示Hn,i,j中第k個(gè)亮度值出現(xiàn)的次數(shù)。
圖3為視頻《送你一朵小紅花》[15]中一處明顯的場(chǎng)景切換前后兩幀的全局亮度直方圖和相同位置CTU的局部亮度直方圖??梢钥闯霎?dāng)發(fā)生場(chǎng)景切換但亮度變化不大時(shí),除個(gè)別亮度等級(jí)的像素點(diǎn)數(shù)量有些許不同外,兩幀的全局亮度直方圖分布幾乎沒(méi)有差異,而局部亮度直方圖在亮度分布和亮度頻次上的差異明顯。
圖3 某場(chǎng)景切換處前后兩幀全局亮度直方圖和CTU局部亮度直方圖
本文比較了存在場(chǎng)景切換且具有不同運(yùn)動(dòng)特性的4段視頻中場(chǎng)景切換處前后兩幀的幀間全局亮度直方圖差異Dhist和局部亮度直方圖差異Dlocal_hist,見(jiàn)表1,Dhist和Dlocal_hist表達(dá)式如式(3)和式(4)。其中,Kimono運(yùn)動(dòng)平緩且僅存在一處場(chǎng)景切換,《送你一朵小紅花》運(yùn)動(dòng)平緩且存在多處場(chǎng)景切換,《戰(zhàn)狼2》[16]運(yùn)動(dòng)劇烈且存在多處場(chǎng)景切換,《F1賽車越野》[17]高速運(yùn)動(dòng)且存在多處場(chǎng)景切換。
表 1 全局亮度直方圖差異D hist 與 局部亮度直方圖差異D local_hist比較
進(jìn)一步,如何利用局部亮度直方圖客觀度量幀間場(chǎng)景變換程度是幀類型決策的關(guān)鍵問(wèn)題,步驟為:
其中, CTUi-1,j-1, C TUi-1,j, C TUi-1,j+1,CTUi,j-1, C TUi,j+1, C TUi+1,j-1, C TUi+1,j和CTUi+1,j+1為 C TUi,j的8個(gè)相鄰CTU。
(3)基于得到的場(chǎng)景切換塊計(jì)算當(dāng)前幀cur與參考幀ref的幀間場(chǎng)景變換程度 inter_diff,如式(7)
根據(jù)經(jīng)驗(yàn)將I幀檢測(cè)窗的大小和滑動(dòng)步長(zhǎng)均設(shè)為5,以檢測(cè)窗為基本單位遍歷整段視頻序列檢測(cè)I幀,具體步驟如下:
(1)如圖4所示,將視頻幀顯示順序(Picture Order Count, POC)中的第2幀(POC=1)作為檢測(cè)窗的起始位置,以當(dāng)前幀n的 前一幀n-1和檢測(cè)窗外前一幀 W為參考幀,從左到右依次遍歷檢測(cè)窗內(nèi)的5幀,分別計(jì)算幀間場(chǎng)景變換程度i nter_diffn-1和inter_diffW。若i nter_diffn-1和 i nter_diffW均大于所設(shè)閾值,則判斷當(dāng)前幀為關(guān)鍵幀k ey_frame。
圖4 I幀檢測(cè)過(guò)程
(2)對(duì)檢測(cè)窗內(nèi)的5幀依次檢測(cè)后,關(guān)鍵幀數(shù)量nkey_frame 存在0幀、1幀和多幀3種情況。關(guān)鍵幀數(shù)量為1時(shí),該幀即為I幀;關(guān)鍵幀數(shù)量為多幀時(shí),可能存在畫面抖動(dòng),計(jì)算所有關(guān)鍵幀的平均幀間場(chǎng)景變換程度a vg_diff,并選擇滿足式(9)的第1幀作為最終的場(chǎng)景切換幀,即為I幀。a vg_diff的表達(dá)式如式(8)
其中,參數(shù)α?xí)绊憶Q策場(chǎng)景切換幀的準(zhǔn)確性,本文通過(guò)統(tǒng)計(jì)大量視頻中存在多幀關(guān)鍵幀時(shí)正確場(chǎng)景切換幀的 inter_diffW與a vg_diff的大小關(guān)系,取參數(shù)α=1.1。
(3)考慮到頻繁插入I幀將導(dǎo)致碼率激增的問(wèn)題,本文引入窗間標(biāo)志位Flag平滑I幀的密度,窗間標(biāo)志位默認(rèn)為復(fù)位狀態(tài)(即Flag=0)。當(dāng)檢測(cè)窗內(nèi)檢測(cè)到I幀且Flag=0時(shí),將窗間標(biāo)志位置位(Flag=1),否則清除當(dāng)前檢測(cè)窗內(nèi)的I幀,并移動(dòng)檢測(cè)窗進(jìn)行下一輪檢測(cè),當(dāng)檢測(cè)窗內(nèi)不再檢測(cè)到I幀時(shí)將Flag復(fù)位。
分析視頻的運(yùn)動(dòng)特性可知,運(yùn)動(dòng)劇烈的視頻連續(xù)兩幀內(nèi)容變化較大,GPB幀和B幀的壓縮效率較低;而運(yùn)動(dòng)平緩的視頻連續(xù)兩幀內(nèi)容基本一致,GPB幀和B幀的壓縮效率較高。若對(duì)具有不同運(yùn)動(dòng)特性的視頻采用相同大小的GOP進(jìn)行編碼,必然會(huì)導(dǎo)致兩段視頻的編碼效率差異過(guò)大。因此,本文以MiniGOP為基本單元,考慮通過(guò)調(diào)整GPB幀的密度以改善視頻編碼效率差異。一段MiniGOP從上一I幀或GPB幀之后開(kāi)始,至下一個(gè)GPB幀為止,如圖5所示。
圖5 MiniGOP示意圖
遍歷已確定I幀的序列,通過(guò)確定MiniGOP大小將視頻劃分為若干段完整的MiniGOP,具體步驟為:
(1)以當(dāng)前幀的前8幀為參考幀,計(jì)算當(dāng)前幀與參考幀的平均幀間局部亮度直方圖差異和a vg_Dlocal_hist,其表達(dá)式如式(10)所示
(2)以x265中基于Viterbi思想的決策算法得到的MiniGOP大小為MiniGOP真值,通過(guò)分析真值與avg_Dlocal_hist的關(guān)系可知,視頻中MiniGOP大小與a vg_Dlocal_hist存在較強(qiáng)相關(guān)性,故本算法由此判斷每個(gè)MiniGOP大小,并將視頻劃分為一段段完整的MiniGOP,將MiniGOP中最后一幀設(shè)置為GPB幀,其余幀設(shè)置為B幀。
為驗(yàn)證本文提出的基于局部亮度直方圖的自適應(yīng)視頻幀類型決策算法的性能,將本算法嵌入x265 3.0中,在硬件配置為AMD Ryzen 7 4800H with Radeon Graphics,主頻為2.90GHz,內(nèi)存為16.0GB;軟件配置為Microsoft Visual Studio 2019的實(shí)驗(yàn)平臺(tái)進(jìn)行測(cè)試實(shí)驗(yàn)。
首先,為評(píng)估本文提出的場(chǎng)景切換檢測(cè)算法的性能,選取10段具有不同場(chǎng)景切換情況、不同運(yùn)動(dòng)特點(diǎn)和不同分辨率的視頻:Traffic(2560×1600)、FourPeople(1280×720)和RaceHorses(416×240)運(yùn)動(dòng)平緩且不存在場(chǎng)景切換,BQMall(832×480)運(yùn)動(dòng)平緩且存在鏡頭平移,Kimono(1920×1080)運(yùn)動(dòng)平緩且僅存在一處場(chǎng)景切換,《送你一朵小紅花》(1920×1056)運(yùn)動(dòng)平緩且存在場(chǎng)景切換,《戰(zhàn)狼2》、《紅海行動(dòng)》[18]和《變形金剛5》[19](1280×720)運(yùn)動(dòng)劇烈且存在場(chǎng)景切換,《F1賽車越野》(960×540)運(yùn)動(dòng)快速且存在場(chǎng)景切換。通過(guò)比較x265、參考文獻(xiàn)[11]和本文算法檢測(cè)場(chǎng)景切換幀的準(zhǔn)確率P和召回率R衡量場(chǎng)景切換檢測(cè)的準(zhǔn)確性,實(shí)驗(yàn)結(jié)果如表2所示。準(zhǔn)確率P和召回率R計(jì)算公式如式(11)和式(12)
表2 本場(chǎng)景切換檢測(cè)算法與x265和參考文獻(xiàn)[11]的檢測(cè)準(zhǔn)確度對(duì)比
其中,nT,nF和nM分別表示正確檢測(cè)、錯(cuò)誤檢測(cè)和未檢測(cè)到的場(chǎng)景切換數(shù)。
由表2可以看出,本文算法的檢測(cè)召回率R均在80%以上,準(zhǔn)確率P均在95%以上,最高可達(dá)100%。對(duì)于具有多種運(yùn)動(dòng)特性和復(fù)雜場(chǎng)景切換的視頻(《送你一朵小紅花》、《戰(zhàn)狼2》、《紅海行動(dòng)》、《變形金剛5》和《F1賽車越野》),本文算法的檢測(cè)準(zhǔn)確度大幅領(lǐng)先于另外兩種算法。
通過(guò)比較本文算法與x265中場(chǎng)景切換檢測(cè)算法的運(yùn)行時(shí)間來(lái)衡量算法復(fù)雜度,實(shí)驗(yàn)結(jié)果如表3所示,可以看出本文算法的運(yùn)行時(shí)間僅為x265中場(chǎng)景切換檢測(cè)算法的千分之一。從整體上看,本文算法能在大大降低算法復(fù)雜度的前提下,大幅提升場(chǎng)景切換檢測(cè)性能。
表3 本場(chǎng)景切換檢測(cè)與x265算法運(yùn)行耗時(shí)對(duì)比(μs)
其次,選取HEVC標(biāo)準(zhǔn)測(cè)試序列中不同類別的12段測(cè)試序列,將本文算法與x265中的快速自適應(yīng)GPB幀和B幀決策算法、基于Viterbi思想的自適應(yīng)GPB幀和B幀決策算法及參考文獻(xiàn)[13]的算法進(jìn)行比較。以x265中固定GPB幀和B幀決策算法為基準(zhǔn),用峰值信噪比的減少量BDPSNR[20]衡量算法的客觀壓縮性能,用時(shí)間節(jié)省百分比 ΔT衡量算法的編碼復(fù)雜度,實(shí)驗(yàn)結(jié)果見(jiàn)表4。ΔT的計(jì)算公式如式(13)
由表4可以看出,在客觀壓縮性能方面,本文算法整體上領(lǐng)先于另外3種算法,但對(duì)于具有不同運(yùn)動(dòng)特征的視頻,本文算法存在一定差異:對(duì)具有不規(guī)則運(yùn)動(dòng)(如旋轉(zhuǎn)、縮放等)的視頻(Cactus,BasketballPass與PartyScene),本文算法的客觀壓縮性能明顯下降,對(duì)運(yùn)動(dòng)平緩或靜止的視頻(Kimono,FourPeople, SlideEditing等),本文算法的客觀壓縮性能有很好的提升。另外,本文算法的編碼復(fù)雜度最低,且與具有相近客觀壓縮性能的x265中基于Viterbi思想的決策算法相比,平均減少了5.463%的編碼時(shí)間。
表4 本文算法與x265中兩種算法和參考文獻(xiàn)[13]的算法性能比較
針對(duì)全局直方圖不能很好地反映視頻時(shí)序特性且現(xiàn)有幀類型決策算法計(jì)算復(fù)雜度較高的問(wèn)題,本文以CTU為基本單位對(duì)視頻各幀分塊并統(tǒng)計(jì)局部亮度直方圖,提出基于局部亮度直方圖的自適應(yīng)視頻幀類型決策算法。主要貢獻(xiàn)為利用視頻幀的局部亮度直方圖差異表征各幀內(nèi)容,從而通過(guò)幀間局部亮度直方圖差異度量幀間場(chǎng)景變換程度,實(shí)現(xiàn)I幀、GPB幀和B幀的自適應(yīng)決策。同時(shí),引入窗間標(biāo)志位Flag,有效避免因頻繁插入I幀而導(dǎo)致的碼率激增問(wèn)題。實(shí)驗(yàn)結(jié)果表明,本文提出的基于局部亮度直方圖的視頻幀類型決策算法與x265中的相關(guān)算法相比能夠減少5.463%編碼時(shí)間。通過(guò)與其他算法進(jìn)行比較,驗(yàn)證了本文算法的檢測(cè)準(zhǔn)確度和客觀壓縮效率。本文算法能實(shí)現(xiàn)視頻幀類型的高效決策,且適合于具有不同運(yùn)動(dòng)特性的視頻序列,魯棒性較強(qiáng)。