程相昱,劉 昱,段繼忠,汪少初
(天津大學 信息工程學院,天津 300072)
H.264/AVC[1]作為新一代視頻壓縮編碼標準,由于其高效的壓縮性能和良好的網絡親和性,在數字廣播電視領域和互聯網領域逐步進入實際應用。基于視頻轉換編碼技術[2-3]的H.264/AVC圖標、字幕插入應用將會有廣泛的應用需求。視頻轉換編碼的核心思想是通過信息重用在視頻質量、碼率和編碼計算量之間取得平衡。經測算,在H.264/AVC編碼過程中,宏塊模式判斷和幀間運動估計占用了75%左右的計算量。因此,在轉碼系統中,編碼端重用解碼獲得的宏塊類型、幀內/幀間預測模式、運動矢量、參考幀等編碼參數,可以在保證輸出高質量視頻的前提下,大幅度降低計算量,提高編碼速度。
文獻[4]系統評價了多種轉碼架構的優劣性,根據轉碼需求,本文采用像素域級聯轉碼架構。文獻[5]討論了在MPEG-2碼流中的圖標插入算法。文獻[6]提出一種H.264碼流中的圖標插入算法,該算法在幀內編碼時,對圖標周圍的宏塊采用IPCM編碼的方式以保證無損,但此方案在應用中會造成碼率明顯增大,且不能有效解決幀間編碼由于圖標插入而造成的影響。筆者在此基礎上,提出了一種高效、優質,且支持碼流特性全面的H.264/AVC圖標插入轉換編碼器。
轉碼器架構如圖1所示。

圖1 轉碼器架構框圖
該轉碼器架構采用像素域的級聯轉碼器(Cascaded Pixel-Domain Transcoder,CPDT)[4],解碼端將視頻完整解碼到像素域作為編碼端輸入,重新執行變換和量化,編碼所需要的宏塊類型、量化參數、預測模式、運動矢量等參數從解碼端獲得。重用的語法信息如表1所示。

表1 重用的語法元素(對應標準)
本文采用了無再損編碼方案,減少二次編碼過程的信息損失,保證轉碼得到的碼流具有高圖像質量;通過重用輸入碼流的編碼參數,節省編碼過程中模式判斷和運動估計的計算量,大幅提高編碼速度。
簡化的轉碼過程如圖2所示。

圖2 簡化的轉碼過程框圖
無再損H.264編碼,即第一次編碼的重建圖像和第二次編碼的重建圖像嚴格一致。文獻[7]提出無再損幀內編碼的算法,解決了幀內編碼中由于數據溢出和整數運算誤差造成的圖像失真問題。
H.264中引入去塊效應濾波,濾波會修改宏塊邊界以及邊界附近的像素。為保證兩次編碼重構圖像一致,筆者在解碼過程中關閉去塊效應濾波,以未濾波的圖像作為編碼端輸入,最大限度地減少了二次編碼過程的信息損失。
在以未濾波圖像為輸入源的情況下,假設反變換與反量化均為線性可逆運算,則圖2中,從B到G的過程沒有信息損失,兩次編碼的重建圖像嚴格一致,即為無再損編碼。H.264編解碼中大多數運算為8 bit整數運算,在重構過程中可能產生數據溢出,H.264標準中規定了Clip運算保證輸出數據的有效性。由于整數運算的誤差及數據溢出的誤差,嚴格的無再損無法實現,但實驗結果表明,在大多數情況下,該方法可高質量恢復原圖像,部分序列可實現完全恢復原圖像。
編碼器大多只實現標準中的一部分特性而非全部,而在實際轉碼應用中,存在一些碼流,含有不被編碼器支持的碼流特性。在這種情況下,解碼參數直接映射到編碼端,不能被正確編碼。解決此類問題有兩個方案,一是設計合理的算法,選擇其他參數代替該特性;二是對于一些常見的而編碼器不支持的碼流特性,完善編碼器,并加入其對該特性的支持。
該轉碼平臺選用x264作為編碼器,此編碼器不支持宏塊幀場自適應編碼(MacroBlock Adaptive Field Frame,MBAFF),而此特性在碼流中較為常見,因此筆者為x264平臺加入其對宏塊幀場自適應的支持。
MBAFF幀編碼最核心的問題是相鄰宏塊、塊地址的推導,相鄰像素的加載、相鄰宏塊的幀/場狀態、CBP(Code Block Pattern)、非零系數個數、運動矢量等參數的加載都與此直接相關。
MBAFF幀中,直接賦予宏塊幀/場狀態、宏塊類型等編碼參數。在P、B幀中,遇到Skip類型的宏塊,會出現特殊問題。由于Skip類型的宏塊在碼流中只有1個mb_skip_flag的標志位,表征該宏塊幀/場狀態的語法元素mb_field_decoding_flag的值與該宏塊對中另一非Skip類型宏塊的值相同,如果1個宏塊對中的2個宏塊均為Skip類型,則該宏塊對中的每個宏塊都不存在mb_field_decoding_flag。這時,根據標準,該宏塊對的mb_field_decoding_flag值將按下列規則推導出。相應程序段為:

一對在原始碼流中不全為Skip類型的宏塊對,可能在第二次編碼后,恰好全滿足Skip類型的條件,這是在被賦予的mb_field_decoding_flag值條件下滿足Skip類型的條件。解碼過程中,如果按上述規則推導出的mb_field_decoding_flag值與當前宏塊編碼的真實mb_field_decoding_flag值不一致時,由于幀/場狀態錯誤,解碼圖像將出現錯誤,后續解碼宏塊也都將解碼錯誤。因此,如果一個宏塊對中的每個宏塊的mb_field_decoding_flag都不存在,且該宏塊對的mb_field_decoding_flag值與按照標準預測出的值不一致時,本文將強制把該宏塊對的底宏塊的類型修正為非Skip類型,且將正確的mb_field_decoding_flag賦予該宏塊,并寫入碼流中,以保證碼流中存在表征該宏塊對真實幀/場狀態的語法信息。
根據插入圖標處理對宏塊編碼參數造成的影響,可將一幀中的宏塊分為3類,如圖3所示。Ⅰ為圖標區域宏塊,圖像數據發生變化;Ⅱ為非圖標區域的宏塊,自身圖像沒有變化,但幀內、幀間預測時參考了圖標區域的圖像;Ⅲ為非圖標區域的宏塊,自身圖像、參考圖像都沒有變化。

圖3 受圖標插入影響不同的幾類宏塊示意圖
對應上述不同類型的宏塊,編碼參數的優化采取不同方案。
Ⅰ、Ⅱ類宏塊,由于圖像數據或參考圖像數據的變化,其宏塊類型、預測模式、運動矢量等參數已非最優,如果把這些參數編入碼流,將會導致圖像質量惡化、碼率增加。因此,這兩類宏塊須重新做模式判斷和運動估計,以得到最優的編碼參數。
Ⅲ類宏塊,自身圖像和參考圖像都沒有變化,直接用原碼流的參數,可大幅度提高編碼速度。
在Ⅲ類宏塊中,幀間的Skip類型宏塊必須同時滿足運動矢量殘差為0和像素殘差為0;由于圖標插入處理,相鄰宏塊的運動矢量可能發生變化,導致當前宏塊運動矢量殘差不再為0,同時,由于二次編碼中,變換、量化中整數運算造成的舍入誤差和數據溢出的誤差,像素殘差也可能不再為0。因此,Skip類型宏塊需要判斷是否滿足Skip條件,做出調整,規則(程序段)如下:

本文使用H.264碼流作為測試輸入,序列采用walk、crew、ice、soccer、city,格式為 720 ×756,GOP 長度為 15,幀結構為“I-B-B-P-B-B-P”,I,P,B 幀 QP 分別為25,28,30,疊加的圖標尺寸為160×60。運行平臺為Pentium(R)4,CPU 3.00 GHz,Windows XP。
實驗分別采用本文提出的轉碼算法,和完整解碼到像素域用JM重新編碼兩種方案,進行圖標插入的轉換編碼測試,每個序列編碼298幀,將輸入H.264碼流解碼到像素域,疊加圖標,作為基準參考圖像,比較兩種方案得到碼流的PSNR、碼率以及各自的編碼時間。walk序列轉碼前、后碼流第一幀的解碼圖像如圖4所示。

圖4 walk序列轉碼前后碼流第一幀的解碼圖像
如圖4所示,轉碼后,在主觀上,人眼幾乎察覺不到圖像變化;客觀上,非圖標區域宏塊參數保持不變,最大限度地保持了輸入碼流的圖像質量。
該設計的轉碼器,編碼端采用開源代碼自由軟件庫x264,x264是通用計算平臺上較為快速的H.264編碼器。作為官方標準的編解碼模型,JM[8]注重全面實現H.264標準中定義的編解碼工具,而不注重編碼速度。因此,為了公平評價實驗結果,本文只與JM編碼得到的碼流比較PSNR、碼率的變化,不比較編碼速度。為了體現轉碼器速度上的優勢,以解碼到像素域并疊加圖標的YUV數據作為輸入,用x264編碼器重新編碼,記錄編碼時間,與轉碼器運行實際時間進行對比。
表2列出了圖標插入的情況下,分別采用本文設計的轉碼器和全解全編(JM編碼)轉碼后碼流的PSNR、兩種方案得到碼流碼率與原始輸入碼流碼率相比變化的百分比,以及x264編碼器重新編碼時間和轉碼器運行時間。

表2 圖標插入的轉換編碼PSNR、碼率和編碼時間的比較
實驗結果表明,轉碼前后,碼率波動幅度較小;在保持碼率穩定的情況下,與JM相比,可以獲得具有較高PSNR值的碼流。表2的運行時間數據表明,轉碼運行的時間受碼率大小影響明顯,表明大部分計算量被用于熵編碼過程,即用于模式判斷計算量的優化已趨近極限。多種序列的測試結果表明,本文提出的H.264/AVC圖標插入架構可高效、優質地實現標清H.264碼流中的圖標插入應用。
本文實現了一種基于x264編碼平臺的像素域級聯轉碼器,高效、優質地實現在H.264碼流中實時插入圖標的需求,支持大多數碼流特性,可用于實用產品。與H.264標準編碼器JM和開源的x264相比,本文無論在編碼速度上,還是圖像質量上,均具有明顯優勢。
[1] ITU-T Recommendations H.264-ISO/IEC 14496-10,Advanced video coding for generic audiovisual services[S].2005.
[2]李桂苓,王立.轉換編碼技術述評[J].電視技術,2007,31(7):18-20.
[3]殷國炯,薛永林.MPEG-2到H.264轉碼的快速模式選擇算法[J].電視技術,2010,34(1):26-29.
[4] XIN J,LIN C,SUN M.Digital video transcoding[J].Proceedings of the IEEE,2005,93(1):84-97.
[5] LIU Yu,LI Guiling,TANG Qiang,et al.DCT domain logo insertion of MPEG2 transcoding[C]//Proc.IEEE CCECE 2003.[S.l.]:IEEE Press,2003:1219-1222.
[6] XU Di,NASIOPOULOS P.Logo insertion transcoding for H.264/AVC compressed video[C]//Proc.the 16th IEEE ICIP 2009.[S.l.]:IEEE Press,2009:3693-3696.
[7]董鵬宇,林濤.基于H.264的無再損幀內編碼[J].電子與信息學報,2010,32(1):848-851.
[8] Joint Video Team.JVT reference software version 12.4[EB/OL].[2011-07-22].http://iphome.hhi.de/suehring/tml/.