程棟彬,高志勇,張小云
(上海交通大學(xué) 電子工程系 圖像通信與網(wǎng)絡(luò)工程研究所,上海200240)
基于信息復(fù)用的多路x265視頻編碼系統(tǒng)設(shè)計(jì)
程棟彬,高志勇,張小云
(上海交通大學(xué) 電子工程系 圖像通信與網(wǎng)絡(luò)工程研究所,上海200240)
為了滿足不同網(wǎng)絡(luò)環(huán)境下的用戶需求,視頻節(jié)目往往需要經(jīng)過多次編碼以產(chǎn)生不同碼率的多個碼流。這種多次獨(dú)立編碼方式存在計(jì)算資源消耗大和效率低等問題,利用視頻在不同碼率編碼時存在的編碼信息相關(guān)性,設(shè)計(jì)了基于編碼信息復(fù)用的多路x265視頻編碼系統(tǒng),使多個從編碼器復(fù)用主編碼器產(chǎn)生的編碼信息,如編碼單元(CU)的層次劃分信息、預(yù)測單元(PU)的模式判別信息以及運(yùn)動估計(jì)參考幀信息等,從而大幅提高多路編碼效率。該系統(tǒng)支持單路視頻輸入,進(jìn)行基于信息復(fù)用的多路編碼后,同時輸出不同碼流的多路碼流。實(shí)驗(yàn)結(jié)果表明,與傳統(tǒng)的多次獨(dú)立x265編碼相比,該系統(tǒng)在保證視頻質(zhì)量的前提下,對高清1080p和準(zhǔn)高清720p視頻分別節(jié)省了43.32%和52.79%的編碼時間。
視頻編碼;HEVC;x265;編碼信息復(fù)用;多路編碼;多線程
視頻內(nèi)容從發(fā)送源端到終端,用戶往往需要應(yīng)對各種不同的網(wǎng)絡(luò)傳輸環(huán)境和終端設(shè)備類型等應(yīng)用因素,包括網(wǎng)絡(luò)類型、網(wǎng)絡(luò)帶寬、設(shè)備顯示屏大小等,因此對于同一視頻內(nèi)容,視頻服務(wù)提供商往往需要對其進(jìn)行多次編碼以得到多種碼率的視頻以滿足各種用戶需求。另一方面,在視頻編碼領(lǐng)域,目前廣泛使用的H.264/AVC[1]標(biāo)準(zhǔn)正逐漸被新一代高效率視頻編碼標(biāo)準(zhǔn)HEVC(High Efficiency Video Coding)[2]取代,HEVC相比H.264能提高1倍左右的視頻壓縮率,但也引入了3~10倍的編碼復(fù)雜度?;贖EVC標(biāo)準(zhǔn)的x265[3]是一款面向?qū)嵱玫母咝б曨l編碼器,它通過多線程機(jī)制支持幀級并行和行級并行編碼,并集成了大量的算法優(yōu)化、匯編加速、單指令多數(shù)據(jù)實(shí)現(xiàn)等,從而極大地提高了編碼速度。然而,在Intel的高性能8核處理器上,x265編碼器仍無法實(shí)現(xiàn)高清視頻的實(shí)時編碼,在更多核的服務(wù)器上運(yùn)行時x265仍面臨并行效率和處理器使用率較低的問題。因此,利用新一代HEVC高效編碼技術(shù)對同一視頻進(jìn)行多次獨(dú)立編碼以產(chǎn)生不同碼率的多路碼流,面臨著計(jì)算復(fù)雜度極高、資源消耗大、編碼效率低等問題。
基于上述現(xiàn)狀,本文利用視頻在不同碼率編碼時存在的編碼信息相關(guān)性,設(shè)計(jì)了基于編碼信息復(fù)用的多路x265視頻編碼系統(tǒng),使多個從編碼器復(fù)用單個主編碼器產(chǎn)生的編碼信息,如編碼單元(CU)的層次劃分信息、預(yù)測單元(PU)的模式判別信息以及運(yùn)動估計(jì)參考幀信息等,從而大幅提高多路編碼效率。另外,通過多路x265編碼器的并行執(zhí)行,本系統(tǒng)提高了并行效率和處理器使用率,進(jìn)一步降低了總編碼時間。
1.1 系統(tǒng)框架
多路x265視頻編碼系統(tǒng)結(jié)構(gòu)框圖如圖1所示,系統(tǒng)輸入原始的YUV格式視頻,經(jīng)過多路編碼器輸出該視頻的多種碼率碼流。系統(tǒng)中的多路編碼器分為兩類,分別是x265主編碼器和x265從編碼器。主編碼器在編碼的同時保存并輸出編碼信息,從編碼器則獲取主編碼器輸出的編碼器信息,并利用它們簡化自身的編碼運(yùn)算。整個系統(tǒng)由一個主編碼器和若干個從編碼器組成,一路輸入視頻通過包含1個主編碼器和N個從編碼器的x265多路編碼系統(tǒng),一次性編碼輸出N+1路不同碼率的視頻碼流。
圖1 多路x265視頻轉(zhuǎn)碼系統(tǒng)框架示意圖
多路x265視頻編碼器系統(tǒng)有兩大核心機(jī)制,首先是主編碼器到從編碼器的信息復(fù)用機(jī)制,該機(jī)制有效地降低了從編碼器的編碼復(fù)雜度;其次是多線程實(shí)現(xiàn)的多路編碼器機(jī)制,該機(jī)制使得這些編碼器在并行多路編碼的同時又能夠?qū)崿F(xiàn)信息交互。本系統(tǒng)中復(fù)用的編碼信息包括編碼單元(CU)層次劃分、預(yù)測單元(PU)的模式判別,以及運(yùn)動估計(jì)參考幀[2],這些模塊都是編碼過程中計(jì)算復(fù)雜度很高的環(huán)節(jié),復(fù)用這些模塊的信息能最大程度地減少編碼時間。
主編碼器產(chǎn)生盡可能準(zhǔn)確的編碼信息,因此主編碼器設(shè)置的碼率應(yīng)適當(dāng)偏大,使生成的信息更準(zhǔn)確有效。同時,為了盡可能讓從編碼器與主編碼器相關(guān)性最大,應(yīng)使主編碼器設(shè)置的碼率接近所有碼率的中間值。綜上,在固定碼率編碼時,一般將主編碼器的碼率設(shè)為中等偏大;在固定量化參數(shù)(QP) 編碼時,一般將主編碼器的量化參數(shù)設(shè)為中等偏小。
1.2 主從編碼器信息復(fù)用控制
x265編碼器的重要特性之一就是多線程并行編碼,具體地分為多幀并行和WPP(Wavefront Parallel Processing)行級并行[3]。多幀并行指的是x265主線程開啟多個幀級線程,每個幀級線程編碼一幀。具體地,每個幀級線程開啟多個行級線程,每個行級線程編碼一個CTU[2]行。在多核處理器環(huán)境下,x265編碼器同時存在多個線程在并行編碼多個幀中的多個CTU行,這是下述的信息復(fù)用控制機(jī)制的設(shè)計(jì)基礎(chǔ)。
主從編碼器通過內(nèi)存作為編碼信息的傳遞渠道,其信息傳遞機(jī)制類似于多線程并發(fā)問題中的生產(chǎn)者-消費(fèi)者模型。考慮到單個x265編碼器的并行性,因此該模型中無論是生產(chǎn)者還是消費(fèi)者的數(shù)目都不唯一,而且它們訪問內(nèi)存進(jìn)行讀寫的時間順序無法確定。為了保證編碼信息傳遞的正確性和高效性,在主編碼器產(chǎn)生編碼信息時,應(yīng)當(dāng)對其按照圖像序列號(POC)[4]和編碼樹單元(CTU)的位置進(jìn)行標(biāo)記,從編碼器讀取信息時,則按照當(dāng)前編碼單元所在的POC和CTU位置坐標(biāo)去內(nèi)存中相應(yīng)位置取得相應(yīng)數(shù)據(jù)。
如圖2為本系統(tǒng)設(shè)計(jì)的主從編碼信息傳遞機(jī)制示意圖,中間立體多幀結(jié)構(gòu)表示編碼復(fù)用信息緩沖區(qū),每個正方形區(qū)域用于存儲一個CTU的所有復(fù)用信息,左下角編號i用于標(biāo)記存儲的圖像序列號POC,陰影部分表示主編碼器已經(jīng)使用的空間,從編碼器按照圖像序列號i和CTU的坐標(biāo)(x,y)從中讀取。值得強(qiáng)調(diào)的是,由于主從編碼器對復(fù)用信息緩沖區(qū)的讀寫實(shí)際上是多線程間同步問題和臨界資源的訪問問題,因此需要對其中的CTU復(fù)用信息用線程鎖加以保護(hù),確保同一時間只有單個線程對其進(jìn)行操作。
圖2 主從編碼器信息傳遞示意圖
圖3為主從編碼器信息傳遞流程圖,圖3a為主編碼器輸出信息到CTU信息緩沖區(qū)流程圖,主要過程是將復(fù)用的編碼信息按照當(dāng)前POC以及CTU的坐標(biāo)放到緩沖區(qū)的特定位置中,然后呼叫并喚醒可能在等待該信息的從編碼器。圖3b為從編碼器從CTU信息緩沖區(qū)中獲取編碼器信息流程圖,主要過程是按照POC以及CTU坐標(biāo)在緩沖區(qū)中找到特定位置后,如果信息已經(jīng)就緒則直接讀取,否則進(jìn)入睡眠狀態(tài)等待主編碼器的呼叫。另外,讀取過程中需要統(tǒng)計(jì)每個位置中CTU信息的讀取次數(shù),當(dāng)該次數(shù)等于從編碼器個數(shù)時,則刷新該部分空間以便重用。
圖3 主從編碼器讀寫CTU信息傳遞流程圖
上述的主從編碼器復(fù)用信息傳遞機(jī)制充分地考慮了x265編碼器的并行性,以CTU信息為基本復(fù)用單元,對其標(biāo)記圖像序列號POC以及CTU的坐標(biāo),準(zhǔn)確和高效地實(shí)現(xiàn)了信息傳遞。此外,通過對從編碼器讀取信息次數(shù)進(jìn)行統(tǒng)計(jì),保證了每個從編碼器都能獲得正確的編碼信息。
HEVC是為高清、超高清視頻序列而設(shè)計(jì)的編碼標(biāo)準(zhǔn),相比H.264/AVC的16×16像素大小的分塊方式[1],HEVC編碼樹單元CTU達(dá)到64×64像素大小。同時,它引入了更為靈活的像素塊劃分結(jié)構(gòu),包括編碼單元(CU)、預(yù)測單元(PU)、變換單元(TU)[2]等。這些基于四叉樹結(jié)構(gòu)的編碼方式能得到更準(zhǔn)確的劃分模式,然而在遞歸地劃分和搜索最佳模式時,每種可能的CU、PU、TU模式都需要進(jìn)行RDO(Rate-Distortion Optimization)[2]的計(jì)算,因此引入了極為龐大的計(jì)算量。正因?yàn)镠EVC編碼器中上述過程占據(jù)相當(dāng)部分的計(jì)算量,于是本系統(tǒng)對CU層次劃分信息、PU模式判別信息、運(yùn)動估計(jì)參考幀信息進(jìn)行了復(fù)用。
2.1 CU層次劃分信息
(1)
本系統(tǒng)中首先在主編碼器中針對該CTU執(zhí)行完整的劃分過程,并將劃分結(jié)果輸出,從編碼器得到主編碼器該CTU的CU層次劃分結(jié)果后,將其作為自身CU劃分的參考??紤]到在x265編碼器中,同一個CTU內(nèi)部不同子CU的量化參數(shù)(QP)保持不變,因此復(fù)用算法將QP作為衡量指標(biāo),其核心思想如式(1)所示。設(shè)主編碼器的某個CU層次劃分結(jié)果為Depth主,從編碼器的對應(yīng)CU層次劃分結(jié)果為Depth從。記從編碼器當(dāng)前CTU的量化參數(shù)為QP從,主編碼器的為QP主,若QP從
2.2 PU模式判別信息
將正方形的CU經(jīng)過橫向或者縱向的劃分后得到的矩形像素塊被稱為預(yù)測單元(PU),PU的預(yù)測方式可分為四類,即Intra(幀內(nèi)預(yù)測)、Inter(幀間預(yù)測)、Merge(合并相鄰PU模式)、Skip(無殘差模式)[5]這4種模式,對于每個PU,編碼器需要依據(jù)RDO性能最佳的準(zhǔn)則進(jìn)行模式選擇,該過程被稱為PU模式判別。
本系統(tǒng)中首先由主編碼器完成PU的模式判別過程,選出最佳模式并輸出該信息,從編碼器獲知主編碼器的PU模式判別結(jié)果后,按表1所示原則只對表中選中的模式進(jìn)行判別和選擇。例如,如果主編碼器該P(yáng)U的最佳模式是Intra,則從編碼器的PU需要在Intra、Inter、Merge和Skip所有四種模式中進(jìn)行判別和選擇;如果主編碼器選中了Merge模式,則從編碼器只需要在Merge和Skip這兩種模式中選擇。簡而言之,PU模式判別的四種模式從殘差數(shù)據(jù)最多的Intra模式到無殘差的Skip模式,它們所占用的碼率開銷依次降低,表1中的準(zhǔn)則概括來說就是從編碼器只在開銷小于或等于主編碼器的模式中進(jìn)行判別和選擇。
2.3 運(yùn)動估計(jì)參考幀信息
對于預(yù)測單元PU的幀間預(yù)測模式(Inter),需要從參考幀中搜索找出同樣大小的像素塊作為當(dāng)前塊的預(yù)測值,使得真實(shí)值與預(yù)測值的殘差最小,該過程被稱為運(yùn)動估計(jì)。運(yùn)動估計(jì)往往選取多個參考幀進(jìn)行搜索以達(dá)到最優(yōu),HEVC標(biāo)準(zhǔn)規(guī)定可以多達(dá)16個參考幀,實(shí)際應(yīng)用中為降低計(jì)算復(fù)雜度通常設(shè)為3~5個,這些參考幀組成參考幀列表。PU的運(yùn)動估計(jì)需要在參考幀中找到最佳匹配的像素塊,該像素塊所在的參考幀為最佳參考幀。而雙向預(yù)測模式的B幀,則存在兩個參考幀列表,并需要找出兩個最佳參考幀[5]。
表1 PU模式判別復(fù)用算法的從編碼器模式判別準(zhǔn)則
主編碼器從編碼器IntraInterMergeSkipIntra√√√√Inter—√√√Merge——√√Skip———√
本系統(tǒng)的運(yùn)動估計(jì)參考幀復(fù)用算法,首先主編碼器對每個Inter模式的PU執(zhí)行完整的運(yùn)動估計(jì),并將所有PU的最佳參考幀的幀號輸出。從編碼器在執(zhí)行當(dāng)前PU塊的運(yùn)動估計(jì)時,獲取主編碼器相應(yīng)位置中所有PU的最佳參考幀(PU個數(shù)可能不唯一,因此最佳參考幀個數(shù)不唯一),并只在上述最佳參考幀列表中進(jìn)行運(yùn)動搜索匹配。對于雙向預(yù)測的B幀,由于主從編碼器幀結(jié)構(gòu)相同,從編碼器的當(dāng)前幀同樣是B幀,于是在前向和后向參考幀列表中,各自獨(dú)立地選出最佳參考幀列表,然后完成前向和后向運(yùn)動估計(jì)。該算法避免了從編碼器在那些未被選中的參考幀中進(jìn)行運(yùn)動搜索,減少了搜索幀數(shù),從而節(jié)省了運(yùn)動估計(jì)的計(jì)算時間。
本系統(tǒng)基于Intel多核處理器平臺,中央處理器為Intel(R) Xeon(R) CPU E5-2697 v2 @2.7 GHz x24,Windows7操作系統(tǒng)。本系統(tǒng)基于x265開源代碼的1.8版本進(jìn)行開發(fā),并調(diào)用其應(yīng)用程序編程接口(API)得到兩種功能的編碼器,即x265主編碼器和x265從編碼器。多路編碼系統(tǒng)支持x265的3種碼率控制模式即固定量化參數(shù)(CQP)模式、固定碼率(CBR)模式和固定質(zhì)量(CRF)模式[3],為了評估本系統(tǒng)多路編碼性能,測試時對每個測試序列使用1個主編碼器、3個從編碼器的結(jié)構(gòu),分別對應(yīng)固定量化參數(shù)QP為22、27、32、37,以QP=27作為主編碼器,并求出各自的平均碼率、編碼時間和處理器平均使用率。本系統(tǒng)的對照組為單路編碼的原始x265編碼器,對每個測試序列,同樣分別采用上述4個量化參數(shù)進(jìn)行4次編碼,每次編碼獨(dú)立運(yùn)行,并統(tǒng)計(jì)相應(yīng)數(shù)據(jù),所用的視頻質(zhì)量衡量指標(biāo)為BDBR[6-7]。
表2給出了視頻測試序列BasketballDrive在無復(fù)用的x265單路編碼器多次編碼的視頻質(zhì)量與時間結(jié)果。表3給出了BasketballDrive序列在本文的多路x265視頻編碼單次編碼的多路輸出結(jié)果。通過表2和表3中的結(jié)果計(jì)算可知,多路x265視頻編碼系統(tǒng)相比多次x265編碼的BDBR僅為1.005%,即同等視頻質(zhì)量下碼率僅增加1%,而全局編碼時間節(jié)省為41.94%,與此同時,處理器平均使用率從66%增加到了79%。
表2 BasketballDrive測試序列在無復(fù)用的多次x265編碼中的視頻質(zhì)量與時間性能
QP碼率/(kbit·s-1)Avg-PSNR/dBY-PSNR/dBU-PSNR/dBV-PSNR/dB總編碼時間/s處理器平均使用率/%2215914.2240.7739.5543.7845.03276282.3138.9737.7542.3342.90323136.8537.2335.9541.0541.11371675.0735.3433.8240.0439.7941.1166
表3 BasketballDrive測試序列在多路x265視頻編碼器中的視頻質(zhì)量與時間性能
QP碼率/(kbit·s-1)Avg-PSNR/dBY-PSNR/dBU-PSNR/dBV-PSNR/dB總編碼時間/s處理器平均使用率/%2216214.4940.8139.5743.9145.17276353.2139.0437.8042.4943.08323243.6237.2335.9741.0341.03371719.8435.2833.8839.7039.2425.6179
本系統(tǒng)共選取了5個分辨率為1 920×1 080和3個1 280×720的測試序列,測試結(jié)果如表4所示。無論是對1080p還是對720p測試序列,多路編碼系統(tǒng)的平均BDBR都在0.5%左右,可認(rèn)為同等碼率下視頻質(zhì)量下降極其微小。此外,多路編碼系統(tǒng)對兩類序列均能提高處理器使用率,且對于更小的分辨率視頻,該項(xiàng)提升更加顯著。對于全局編碼時間,1080p序列平均節(jié)省了43.32%,而720p序列平均則平均節(jié)省了52.79%。
表4 多路x265編碼系統(tǒng)在不同序列下性能結(jié)果
測試序列時間節(jié)省/%視頻質(zhì)量BDBR/%處理器平均使用率/%原始x265多路編碼1080p序列BasketballDrive41.94 1.0056679BQTerrace42.88 0.4896475Cactus43.50 1.3586378Kimono146.13 0.0277082ParkScene42.13-0.8165977平均值43.32 0.4136478720p序列FourPeople50.13 0.5564369Johnny53.68 0.1164468KristenAndSara54.57 0.8654871平均值52.79 0.5124570
本文提出了基于主從編碼器之間信息復(fù)用的多路x265視頻編碼系統(tǒng),首先從系統(tǒng)框架、主從編碼器信息復(fù)用控制等方面講述了系統(tǒng)上層架構(gòu),闡述了上述結(jié)構(gòu)的必要性和優(yōu)越性;其次說明了包括CU層次劃分、PU模式選擇和運(yùn)動估計(jì)參考幀等信息在內(nèi)的編碼信息復(fù)用算法,解釋了主從編碼器間信息復(fù)用算法的原理與過程。最后通過仿真與測試,給出了多路x265編碼系統(tǒng)相比原始的多次x265編碼的視頻質(zhì)量BDBR值、時間節(jié)省百分?jǐn)?shù)、處理器使用率的變化等。
總之,多路x265視頻編碼系統(tǒng)利用主從編碼器間編碼信息的相似性,通過復(fù)用部分主編碼器的編碼信息,降低了從編碼器的時間復(fù)雜度,提高了多核處理器使用率,成功地在視頻質(zhì)量幾乎沒有下降的情形下節(jié)省了一半左右的全局編碼時間。
[1] POURZZAD M T, DOUTRE C, AZIMI M, et al. HEVC: the new gold standard for video compression: how does HEVC compare with H.264/AVC?[J]. IEEE transactions on consumer electronics magazine, 2012, 1(3):36-46.
[2] MCCANN K. High efficiency video coding (HEVC) test model 12 (HM 12) encoder description[S]. 2013.
[3] MulticoreWare Inc. x265 documentation[EB/OL].[2016-05-12]. http://x265.readthedocs.io/en/default/api.html.
[4] 畢厚杰. 新一代視頻壓縮編碼標(biāo)準(zhǔn)——H.264/AVC[M].2版.北京:人民郵電出版社,2009,181-185.
[5] SULLIVAN G J, OHM J R, HAN W J, et al. Overview of the high efficiency video coding (HEVC) standard[J]. IEEE transactions on circuits and systems for video technology, 2012,22(12): 1649-1668.
[6] BJONTEGAARD G. Improvements of the BD-PSNR model [EB/OL].[2016-05-20]. http://www. researchgate. net/publ:catim/284626 737_Improvements-of-the-BD-PSNR-model.
[7] PATEUX S JUNG J. An excel add-in for computing Bjontegaard metric and its evolution[C]// Proc. of VCEG Meeting. Marrakech, MA:Citeseer, 2007:112-116.
[8] 姚佳,高志勇,張小云. 基于眾核平臺的多路超高清視頻編碼系統(tǒng)設(shè)計(jì)[J]. 電視技術(shù), 2016, 40(4):7-11.
程棟彬,碩士生,主研視頻編解碼、視頻轉(zhuǎn)碼等;
高志勇,博士生導(dǎo)師,主要研究高速圖像與視頻處理、數(shù)字電視等;
張小云,碩士生導(dǎo)師,主要研究視頻編解碼、高速視頻處理等。
責(zé)任編輯:薛 京
Implementation and design of multi-channel x265 video encoding system based on encoding units’ information reusing
CHENG Dongbin, GAO Zhiyong, ZHANG Xiaoyun
(ImageCommunicationandNetworkEngineeringInstitute,ElectronicEngineering,ShanghaiJiaoTongUniversity,Shanghai200240,China)
To meet the demands of all consumers in different network conditions, the same video may need to be encoded for many times to produce different bitrate streams by video manufacturers. This kind of several times independent encoding leads to heavy computation expense and low encoding efficiency. In this paper, a multi-channel x265 video encoding system based on the similarity of encoding units’ information between different encoders is proposed. In the proposed system, number optional slave encoders reuse the encoding units’ information produced by one master encoder to substantially increase the multi-channel encoding efficiency, and these information mainly includes the following contents: the depth decision results of the coding units(CUs), the mode partition result of the prediction units(PUs), and the motion estimation reference frames for prediction units. This system has one raw video file as input, and result in multi encoded video streams of different bitrates at one time after information reusing encoding. Experimental results show that our system can separately save 43.32% and 52.79% encoding time for 1080P and 720P video sequences comparing with traditional several independent x265 encoders, while keeping the video quality almost not decreased.
video encoding; HEVC; x265; encoding information reusing; multi-channel encoding; multi-thread
程棟彬,高志勇,張小云.基于信息復(fù)用的多路x265視頻編碼系統(tǒng)設(shè)計(jì)[J]. 電視技術(shù),2017,41(1):1-5. CHENG D B, GAO Z Y, ZHANG X Y.Implementation and design of multi-channel x265 video encoding system based on encoding units’ information reusing[J]. Video engineering,2017,41(1):1-5.
TN949.292
A
10.16280/j.videoe.2017.01.001
國家自然科學(xué)基金項(xiàng)目(61301116)
2016-06-07