李君
摘要:當前保留的大多數(shù)視頻節(jié)目都是由 MPEG-2壓縮得到的,為了適應(yīng)實際的需要,由 MPEG-2到 H.264的標清分辨率實時轉(zhuǎn)碼是很有必要的。本論文研究的目的,是在盡可能少增加碼流和盡量少降低圖像質(zhì)量的前提下,實現(xiàn)MPEG-2到H.264在D1分辨率(720x576)的實時轉(zhuǎn)碼。本文重點分析了轉(zhuǎn)碼方案中 I,P,B 幀的轉(zhuǎn)碼算法,測試結(jié)果,證明本文研究的轉(zhuǎn)碼器其轉(zhuǎn)碼速度和轉(zhuǎn)碼質(zhì)量滿足實際需求。
關(guān)鍵詞:轉(zhuǎn)碼;實時;MPEG-2;H.264
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2017)06-0219-04
1 概述
多種視頻壓縮標準的同時存在,導(dǎo)致視頻設(shè)備間急需解決兼容問題,而視頻轉(zhuǎn)碼是有效解決這種兼容問題的一種技術(shù)。H.264作為新一代的視頻壓縮標準,具有比其它視頻壓縮標準擁有更高的壓縮率。然而,當前保留的大多數(shù)視頻節(jié)目都是由 MPEG-2壓縮得到的,為了適應(yīng)實際的需要,由 MPEG-2到 H.264的標清分辨率實時轉(zhuǎn)碼是很 有必要的。本文的研究工作就是圍繞標清實時轉(zhuǎn)碼技術(shù)展開的。
2 轉(zhuǎn)碼方案選取
在轉(zhuǎn)碼器中,編碼部分的耗時遠遠大于解碼部分。本論文研究的目的,是在盡可能少增加碼流和盡量少降低圖像質(zhì)量的前提下,實現(xiàn)MPEG-2到H.264在D1分辨率(720x576)的實時轉(zhuǎn)碼。為此,需要從輸入的MPEG-2碼流中提取可復(fù)用參數(shù)并用于H.264 編碼端,以減輕編碼端的編碼時間。
MPEG-2 轉(zhuǎn) H.264 轉(zhuǎn)碼器屬于不同標準間的轉(zhuǎn)碼。在其轉(zhuǎn)碼過程中,如果直接使用解碼端產(chǎn)生的運動矢量,將導(dǎo)致轉(zhuǎn)碼的運動估計不準、視頻質(zhì)量下降等許多問題, 所以需要對運動矢量進行調(diào)整。文獻[2]使用mobile-calendar序列對CPDT轉(zhuǎn)碼結(jié)構(gòu)和兩種DCT域轉(zhuǎn)碼結(jié)構(gòu)做了測試。測試的結(jié)果是, 象素域級聯(lián)轉(zhuǎn)碼器轉(zhuǎn)碼后的圖像質(zhì)量(以PSNR為標準)明顯高于DCT域轉(zhuǎn)碼。象素域級聯(lián)轉(zhuǎn)碼結(jié)構(gòu)有著低復(fù)雜度和高靈活性等特點,并且有最好的PSNR效果,對錯誤偏移也有很好的抗誤碼性,非常適合作為MPEG-2轉(zhuǎn)H.264轉(zhuǎn)碼器的結(jié)構(gòu)。因此,本文研究的轉(zhuǎn)碼器采用了運動矢量重估計的象素域級聯(lián)轉(zhuǎn)碼結(jié)構(gòu)。
3 轉(zhuǎn)碼器的實現(xiàn)
轉(zhuǎn)碼器的輸入端是正確的 MPEG-2 碼流,輸出端是可包含 I、P、B 三種幀類型的 H.264 碼流,其中 B 幀以及 IDR 幀的頻率可由轉(zhuǎn)碼器參數(shù)設(shè)定。這里詳細討論三種幀類型轉(zhuǎn)碼的算法。
3.1 I幀轉(zhuǎn)碼的實現(xiàn)
本文研究的轉(zhuǎn)碼器針對D1分辨率視頻流,每幀分辨率為720x576,即每幀有1620個宏塊需要編碼。如果I幀中宏塊的幀內(nèi)預(yù)測包含所有預(yù)測模式,將會有非常大的計算量,而且由于標準間較大的差異,轉(zhuǎn)碼器在幀內(nèi)預(yù)測方面可復(fù)用信息非常少。為了達到比較高的轉(zhuǎn)碼速度,并且不影響圖像質(zhì)量,本轉(zhuǎn)碼器采用了簡化幀內(nèi)預(yù)測模式的方法:轉(zhuǎn)碼器在幀內(nèi)預(yù)測部分只采用16x16幀內(nèi)預(yù)測的4種模式,同時降低量化參數(shù)。這樣,每個幀內(nèi)預(yù)測宏塊最多只需進行16次預(yù)測即可,遠遠小于選用全部幀內(nèi)預(yù)測模式的592次。這種方法雖然使轉(zhuǎn)碼器中I幀的壓縮率少量下降,但是大大提高了I幀轉(zhuǎn)碼速度。I幀宏塊的轉(zhuǎn)碼流程如圖1所示。
3.2 P幀的轉(zhuǎn)碼
本文研究的轉(zhuǎn)碼器其運動估計算法主要有以下幾個重點:
宏塊的模式選擇:由于MPEG-2和H.264中運動矢量的相關(guān)性,MPEG-2中得到的基于宏塊16x16的MV對于H.264中的7種幀間預(yù)測模式來說是比較準確的。如果只采用H.264的16x16,16x8,8x16,8x8四種分割方式進行預(yù)測,雖然會使預(yù)測更加準確從而減少10%的碼流,但是使運動估計部分的計算復(fù)雜度增加了4倍以上。本轉(zhuǎn)碼器對運算速度的要求很嚴格,所以為了提高轉(zhuǎn)碼速度,本轉(zhuǎn)碼器盡可能采用16x16模式對宏塊進行預(yù)測編碼。當16x16模式預(yù)測的塊其SAD超過閾值時,再進行8x8塊分割編碼。
亞像素搜索精度:一般來說編碼器在編碼每幀之前都要對當前幀做插值。H.264對亮度最高可達1/4像素,其半像素點需要通過復(fù)雜的6頭濾波,而1/4像素點由一對對角半像素點線性內(nèi)插得出。其計算量很龐大。本轉(zhuǎn)碼器最高搜索精度使用半像素,從而在略微增加碼流大小的情況下大大減少了運動估計的時間。
半像素插值范圍:普通視頻編碼器在編碼P幀前需要對整幅圖像進行插值。本論文研究的轉(zhuǎn)碼器為了提高轉(zhuǎn)碼效率,避免了對所有塊都進行半像素插值。方法是:當整像素匹配塊的SAD小于某個閾值時,直接以該匹配塊為最佳匹配塊進行殘差編碼,而不在半像素域內(nèi)進行搜索。這樣可以在對碼流影響不大的情況下,減少半像素6頭濾波的計算次數(shù)以及半像素域的運動搜索。
搜索窗口:轉(zhuǎn)碼器中輸入流包含的運動矢量和在全局范圍內(nèi)重新搜索得到的最佳運動矢量比較接近,為了減少6頭插值濾波的次數(shù)和搜索范圍,同時考慮到MPEG-2解碼產(chǎn)生的指向半像素的運動矢量與H.264編碼的最佳運動矢量有差距,本文轉(zhuǎn)碼方案中運動矢量在復(fù)用前首先進行取整操作。在對坐標為(x,y)的宏塊做運動估計時,如果需要進行半像素域搜索,則僅搜索其上下左右四個半像素點,從中找出SAD最小的塊作為最佳匹配塊。
宏塊模式復(fù)用:在MPEG-2碼流中我們還可以得到宏塊模式。對于非幀間預(yù)測塊可以直接利用此信息,將此塊作為H.264中的幀內(nèi)模式來處理。這樣就避免了此塊的模式選擇部分,節(jié)約了時間。
轉(zhuǎn)碼器的編碼端在進行P幀宏塊轉(zhuǎn)碼時,必須首先判斷出16x16宏塊的最佳參考塊位置。
每個P幀宏塊的轉(zhuǎn)碼流程為:
(1)判斷該塊是否為幀間預(yù)測塊,如果不是,則進行16x16幀內(nèi)預(yù)測編碼;
(2)如果該塊屬于幀間預(yù)測,則讀取該塊在解碼中對應(yīng)的運動矢量;
(3)如果該塊有兩個運動矢量,則分別對其進行(4)(5)步,并選取SAD小的運動矢量作為參考;
(4)根據(jù)解碼中對應(yīng)的取整運動矢量從參考幀中找到參考塊,并計算參考塊亮度與當前塊亮度之間的SAD;
(5)判斷SAD值是否超過閾值,如果兩個運動矢量所指向的參考塊其SAD均超過閾值,則到(6),否則選取使得SAD小的運動矢量作為運動重估計的參考,并到(10);
(6)根據(jù)該塊周圍塊的運動矢量,計算該塊的PMV,并計算該PMV所指向參考塊與當前塊之間的SAD;
(7)選取使SAD最小的運動矢量作為運動重估計的參考;
(8)如果SAD大于閾值,計算參考塊色差U和V相對于當前塊的SAD是否都小于閾值。如果是則選取參考塊為最佳匹配塊并運行(10),否則運行(9);
(9)對參考塊周圍進行6頭濾波插值,并在參考塊頂點像素上、下、左、右、頂點5個點的范圍內(nèi)搜素最佳匹配塊;
(10)根據(jù)最佳匹配塊和運動矢量判斷該塊是否屬于SKIP宏塊。如果是則按SKIP宏塊編碼,否則對該塊進行殘差編碼。
從P幀宏塊轉(zhuǎn)碼流程可以看到,本轉(zhuǎn)碼器采用的運動重估計無需對整幅圖像進行插值,并且計算過程中可大大減少半像素6頭濾波插值,從而提高轉(zhuǎn)碼器P幀轉(zhuǎn)碼的速度。
3.3 B幀的轉(zhuǎn)碼
P幀與B幀最大的區(qū)別在于,B幀編碼可以有三種預(yù)測方向:前向,后向和雙向。B幀預(yù)測方式如圖2所示。
3.3.1 MPEG-2中B幀的編碼
在MPEG-2標準中B幀不可以作為參考幀參與運動估計和運動補償,所以編碼器不存儲B幀的編碼重構(gòu)圖像。根據(jù)運動矢量的不同,MPEG-2的B幀宏塊編碼可分為三類:
如果只有一個前向預(yù)測運動矢量,那么該B幀宏塊僅參考前一個I幀或者P幀。這種僅采用前向預(yù)測的B幀宏塊的壓縮方法與P幀中幀間預(yù)測宏塊的壓縮方法類似;
如果只有一個后向預(yù)測的運動矢量,那么該B幀宏塊參考的是后向的一個I幀或P幀,其預(yù)測方法與P幀的幀間預(yù)測原理相同,只不過預(yù)測方向相反;
當前向和后向運動矢量都存在時,說明該B幀宏塊需要做雙向預(yù)測。它需要從前后兩個I幀或P幀中做預(yù)測,其殘差塊為當前原始宏塊像素與前向、后向兩個預(yù)測塊的像素平均值的差。
MPEG-2中B幀的模式選擇樹形結(jié)構(gòu)如圖3所示。
3.3.2 H.264中的B幀編碼
H.264中B幀的編碼原理和MPEG-2類似,不過其編碼方案有3個重要改進:
允許對B幀宏塊進行劃分,允許對其子塊進行運動估計和運動補償;
允許B幀在過去和將來有限的多幅參考幀中使用多個參考幀進行運動估計,參考幀的數(shù)量隨不同檔次而變;
允許B幀作為其它幀的參考幀。
圖4顯示了H.264中3種B幀編碼方式:一個前向和一個后向預(yù)測;兩個前向預(yù)測;兩個后向預(yù)測。
和MPEG-2相比H.264在B幀的模式中增加了一種DIRECT模式。這種模式與SKIP模式有些類似,其運動矢量不編碼,而是根據(jù)周圍宏塊的運動矢量進行預(yù)測得到的。不過它與SKIP模式最大的不同在于,SKIP模式的宏塊沒有像素殘差,而DIRECT模式有像素殘差。這樣在編碼過程中可以節(jié)省運動矢量的編碼位數(shù),從而增大壓縮比。
在B幀中可以對宏塊進行4種分割,分別是16x16、16x8、8x16、8x8。不同的分割方式可以采用的預(yù)測模式也不盡相同。表1所示為B幀的宏塊預(yù)測選擇。
3.3.3 B幀轉(zhuǎn)碼的實現(xiàn)
B幀的轉(zhuǎn)碼和P幀轉(zhuǎn)碼相似,也需要對運動矢量進行調(diào)整。B幀預(yù)測在H.264中是非常消耗時間的,如果使用多參考幀,其計算量遠遠高于P幀編碼。為了使轉(zhuǎn)碼器在高速轉(zhuǎn)碼B幀的同時,盡量少影響碼流大小,設(shè)計合理的模式選擇算法非常重要。
本文研究的轉(zhuǎn)碼器其B幀宏塊模式選擇方法有以下幾個關(guān)鍵:
一般來說,輸入MPEG-2碼流中B幀的預(yù)測模式選擇是比較準確的,所以轉(zhuǎn)碼器對MPEG-2碼流中B幀宏塊的預(yù)測方向進行復(fù)用。如果編碼宏塊對應(yīng)MPEG-2碼流中采用的是單向預(yù)測,則直接復(fù)用該預(yù)測模式。如果該宏塊采用的是雙向預(yù)測,則在H.264編碼時根據(jù)計算決定預(yù)測方式。這樣可以在碼流壓縮率基本不變的情況下,使預(yù)測模式的選擇時間減少到原來的三分之一;
H.264標準中的DIRECT模式支持16x16宏塊分割方式,并且使碼流壓縮率有明顯提高,所以本轉(zhuǎn)碼器在處理雙向預(yù)測塊的運動估計時,采用雙向預(yù)測和DIRECT預(yù)測模式,并從中選出最合適的模式進行宏塊殘差編碼。雖然和僅采用雙向預(yù)測相比增加了一種預(yù)測模式,從而增加了運動估計的運算,但是使得壓縮后B幀碼流比特率大大減少。
如果B幀宏塊在解碼端采用前向或后向預(yù)測,則H.264編碼端該宏塊采用和解碼時相同的預(yù)測模式進行編碼。當B幀宏塊解碼端采用雙向預(yù)測時,其模式選擇過程為:
取前向預(yù)測運動矢量,按前向預(yù)測方式找到最佳匹配塊,并計算SAD。如果SAD小于閾值,則按前向預(yù)測進行編碼,否則繼續(xù)進行預(yù)測模式的選擇;
取后向預(yù)測運動矢量,按后向預(yù)測方式找到最佳匹配塊,并計算SAD。如果SAD小于閾值,則按后向預(yù)測進行編碼,否則繼續(xù)進行預(yù)測模式的選擇;
進行DIRECT預(yù)測,找到最佳匹配塊,并計算SAD。如果小于閾值,則按DIRECT模式進行編碼,否則繼續(xù)進行預(yù)測模式的選擇;
進行雙向預(yù)測,并與DIRECT預(yù)測模式進行比較,選擇COST小的模式進行編碼。
B幀雙向預(yù)測塊轉(zhuǎn)碼流程如圖5所示。
4 測試結(jié)果
4.1不使用去方塊濾波器的轉(zhuǎn)碼效果
測試環(huán)境為PCIntel(R)Core(TM)2CPU2.0GHz,內(nèi)存1G。在試驗中D1(720x576)測試碼流選用廣電提供的大話西游片段序列和Tank序列,幀數(shù)均為25fps,GOP均為15,碼流格式為IBBP。轉(zhuǎn)碼輸出端輸出格式同輸入碼流格式,幀數(shù)均為25fps。測試轉(zhuǎn)碼時測試200幀,量化參數(shù)選用QP=32,不使用去方塊濾波。
大話西游測試碼流屬于運動不是很劇烈的碼流。使用本轉(zhuǎn)碼器測試后,PSNR平均值35.3712,最低值33.8383,最高值39.0904。前4幀PSNR為:
PSNR (YCbCr Y Cb Cr): 37.6093 36.2018 43.9715 43.8465
PSNR (YCbCr Y Cb Cr): 35.3219 33.7641 44.1130 43.7948
PSNR (YCbCr Y Cb Cr): 35.1656 33.6160 43.7726 43.4904
PSNR (YCbCr Y Cb Cr): 35.3718 33.8730 43.0355 42.8159
轉(zhuǎn)碼后200幀的碼流大小共1.296kb,轉(zhuǎn)碼速度為平均每幀24.184ms。在實時要求的每幀40ms情況下,可以實現(xiàn)實時轉(zhuǎn)碼器。
Tank序列和上一個序列相比運動比較劇烈。測試得到PSNR平均值為33.3818,最低值31.2469,最高值37.0915。前4幀PSNR為:
PSNR (YCbCr Y Cb Cr): 34.4716 32.8147 45.2238 46.8538
PSNR (YCbCr Y Cb Cr): 31.8217 30.1360 43.4940 46.3854
PSNR (YCbCr Y Cb Cr): 32.0798 30.3967 43.7334 46.2518
PSNR (YCbCr Y Cb Cr): 33.2598 31.6105 43.2837 46.0296
轉(zhuǎn)碼后200幀的碼流大小共2.540kb,轉(zhuǎn)碼速度為平均每幀27.3ms。可以實現(xiàn)實時轉(zhuǎn)碼。雖然在劇烈的運動視頻進行轉(zhuǎn)碼時PSNR會有所下降,但是從視覺上感覺差異不大。
由實驗結(jié)果可見,在對運動不是很劇烈的碼流進行轉(zhuǎn)碼時,碼流壓縮率比較高,圖像質(zhì)量比較好,轉(zhuǎn)碼速度很快,在對運動比較劇烈的碼流轉(zhuǎn)碼時,碼流壓縮率和圖像質(zhì)量都有所下降,但是都在可以接受的范圍內(nèi)。雖然轉(zhuǎn)碼速度也略有下降,但是還是能保證實時轉(zhuǎn)碼。
4.2使用去方塊濾波器的轉(zhuǎn)碼效果
測試時使用大話西游片段序列和Tank序列,同樣測試200幀,選用量化參數(shù)QP=32,轉(zhuǎn)碼時使用去方塊濾波器。
大話西游碼流平均轉(zhuǎn)碼速度為每幀29.61ms,其中濾波耗時平均每幀5.43ms。PSNR平均值35.6615,最低值34.1878,最高值39.4467,前4幀的PSNR為:
PSNR (YCbCr Y Cb Cr): 37.5639 36.1336 44.2403 44.0461
PSNR (YCbCr Y Cb Cr): 35.4928 33.9397 44.2055 43.8518
PSNR (YCbCr Y Cb Cr): 35.3602 33.8116 43.9539 43.6541
PSNR (YCbCr Y Cb Cr): 35.5582 34.0564 43.3320 42.9935
該測試條件下的PSNR和不使用濾波器時測得的PSNR平均值35.3712,最低值33.8383,最高值39.0904相比,有明顯的提升,且塊效應(yīng)有明顯的消除。碼流大小1,292kb,與不使用濾波時壓縮的1,296kb相比有少量下降。
Tank碼流平均轉(zhuǎn)碼速度為每幀35.199ms,其中濾波耗時平均每幀7.90ms。PSNR平均值33.5520,最低值31.4689,最高值37.2467,前4幀的PSNR為:
PSNR (YCbCr Y Cb Cr): 34.2591 32.5901 45.6571 47.0037
PSNR (YCbCr Y Cb Cr): 31.8855 30.1968 43.7478 46.5964
PSNR (YCbCr Y Cb Cr): 32.1336 30.4466 44.0063 46.5356
PSNR (YCbCr Y Cb Cr): 33.2226 31.5645 43.6591 46.2399
該測試條件下的PSNR和不使用去方塊濾波時PSNR平均值為33.3818,最低值31.2469,最高值37.0915相比,圖像質(zhì)量有明顯提高。轉(zhuǎn)碼后碼流大小為2,512kb,比不使用濾波時的2,540kb有所下降。
由實驗結(jié)果可見,兩個碼流在轉(zhuǎn)碼器添加去方塊濾波功能的情況下,圖像質(zhì)量有所提升,碼流大小略有下降,轉(zhuǎn)碼速度仍然達到了D1分辨率實時轉(zhuǎn)碼的目的。
5 結(jié)束語
本論文的研究目標是基于 PC 環(huán)境,在保證圖像質(zhì)量少量損失的前提下實現(xiàn) MPEG-2 到 H.264 的 D1 分辨率實時轉(zhuǎn)碼。當前,分辨率為 D1 電視格式的視頻編碼大多是通過 MPEG-2 壓縮的,而 H.264 由于其性能的卓越,注定會在當今與將來有更廣泛的應(yīng)用,所以研究 MPEG-2 到 H.264 的轉(zhuǎn)碼是很必要的,有很強的現(xiàn)實意義與價值。
參考文獻:
[1] 畢厚杰.新一代視頻壓縮編碼標準H.264/AVC[M].北京:人民郵電出版社,2005:22-24.
[2] Werner N.Requantization for transcoding of MPEG-2 intraframes[J]. IEEE Trans image Process,1999,8(2):.
[3] Assuncao P, Ghanbari M. Buffer analysis and control in CBR video transcoding[J].IEEE Trans. Circuits Syst. Video Technol,2002(12): 1009-1020.
[4] 王輔中,戴瓊海,丁嶸. 視頻轉(zhuǎn)碼中的運動重估計技術(shù)[J]. 有線電視技術(shù),2004,162(18): 24-28.
[5] Zhi Zhou, Shijun SunShawmin Lei. Ming-Ting Sun. Motion Information and Coding Mode Reuse for MPEG-2 to H.264 Transcoding. Circuit and systems. 2005.ISCAS2005.IEEE international Symposium,2005(2):1230-1233.