基本信息
H.264是ITU-T的VCEG(視頻編碼專家組)和ISO/IEC的MPEG(活動圖像編碼專家組)的聯合視頻組(JVT:joint video team)開發的一個新的數字視頻編碼標準,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10 部分。1998年1月份開始草案徵集,1999年9月,完成第一個草案,2001年5月制定了其測試模式TML-8,2002年6月的 JVT第5次會議通過了H.264的FCD板。2003年3月正式發布。H.264和以前的標準一樣,也是DPCM加變換編碼的混合編碼模式。但它採用"回歸基本"的簡潔設計,不用眾多的選項,獲得比H.263++好得多的壓縮性能;加強了對各種信道的適應能力,採用"網路友好"的結構和語法,有利於對誤碼和丟包的處理;套用目標範圍較寬,以滿足不同速率、不同解析度以及不同傳輸(存儲)場合的需求;它的基本系統是開放的,使用無需著作權。在技術上,H.264標準中有多個閃光之處,如統一的VLC符號編碼,高精度、多模式的位移估計,基於4×4塊的整數變換、分層的編碼語法等。這些措施使得H.264算法具有很的高編碼效率,在相同的重建圖像質量下,能夠比H.263節約50%左右的碼率。H.264的碼流結構網路適應性強,增加了差錯恢復能力,能夠很好地適應IP和無線網路的套用。
技術亮點
分層設計
H.264的算法在概念上可以分為兩層:視頻編碼層(VCL:Video Coding Layer)負責高效的視頻內容表示,網路提取層(NAL:Network Abstraction Layer)負責以網路所要求的恰當的方式對數據進行打包和傳送。在VCL和NAL之間定義了一個基於分組方式的接口,打包和相應的信令屬於NAL的一部分。這樣,高編碼效率和網路友好性的任務分別由VCL和NAL來完成。VCL層包括基於塊的運動補償混合編碼和一些新特性。與前面的視頻編碼標準一樣,H.264沒有把前處理和後處理等功能包括在草案中,這樣可以增加標準的靈活性。NAL負責使用下層網路的分段格式來封裝數據,包括組幀、邏輯信道的信令、定時信息的利用或序列結束信號等。例如,NAL支持視頻在電路交換信道上的傳輸格式,支持視頻在Internet上利用RTP/UDP/IP傳輸的格式。NAL包括自己的頭部信息、段結構信息和實際載荷信息,即上層的VCL數據。(如果採用數據分割技術,數據可能由幾個部分組成)。
高精度、多模式運動估計
H.264支持1/4或1/8像素精度的運動矢量。在1/4像素精度時可使用6抽頭濾波器來減少高頻噪聲,對於1/8像素精度的運動矢量,可使用更為複雜的8抽頭的濾波器。在進行運動估計時,編碼器還可選擇“增強”內插濾波器來提高預測的效果。在H.264的運動預測中,一個宏塊(MB)可以按圖2被分為不同的子塊,形成7種不同模式的塊尺寸。這種多模式的靈活和細緻的劃分,更切合圖像中實際運動物體的形狀,大大提高了運動估計的精確程度。在這種方式下,在每個宏塊中可以包含有1、2、4、8或16個運動矢量。在H.264中,允許編碼器使用多於一幀的先前幀用於運動估計,這就是所謂的多幀參考技術。例如2幀或3幀剛剛編碼好的參考幀,編碼器將選擇對每個目標宏塊能給出更好的預測幀,並為每一宏塊指示是哪一幀被用於預測。
整數變換
H.264與先前的標準相似,對殘差採用基於塊的變換編碼,但變換是整數操作而不是實數運算,其過程和DCT基本相似。這種方法的優點在於:在編碼器中和解碼器中允許精度相同的變換和反變換,便於使用簡單的定點運算方式。也就是說,這裡沒有"反變換誤差"。 變換的單位是4×4塊,而不是以往常用的8×8塊。由於用於變換塊的尺寸縮小,運動物體的劃分更精確,這樣,不但變換計算量比較小,而且在運動物體邊緣處的銜接誤差也大為減小。為了使小尺寸塊的變換方式對圖像中較大面積的平滑區域不產生塊之間的灰度差異,可對幀內宏塊亮度數據的16個4×4塊的DC係數(每個小塊一個,共16個)進行第二次4×4塊的變換,對色度數據的4個4×4塊的DC係數(每個小塊一個,共4個)進行2×2塊的變換。
H.264為了提高碼率控制的能力,量化步長的變化的幅度控制在12.5%左右,而不是以不變的增幅變化。變換係數幅度的歸一化被放在反量化過程中處理以減少計算的複雜性。為了強調彩色的逼真性,對色度係數採用了較小量化步長。
統一的VLC
H.264中熵編碼有兩種方法,一種是對所有的待編碼的符號採用統一的VLC(UVLC :Universal VLC),另一種是採用內容自適應的二進制算術編碼(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可選項,其編碼性能比UVLC稍好,但計算複雜度也高。UVLC使用一個長度無限的碼字集,設計結構非常有規則,用相同的碼錶可以對不同的對象進行編碼。這種方法很容易產生一個碼字,而解碼器也很容易地識別碼字的前綴,UVLC在發生比特錯誤時能快速獲得重同步。
幀內預測
在先前的H.26x系列和MPEG-x系列標準中,都是採用的幀間預測的方式。在H.264中,當編碼Intra圖像時可用幀內預測。對於每個4×4塊(除了邊緣塊特別處置以外),每個像素都可用17個最接近的先前已編碼的像素的不同加權和(有的權值可為0)來預測,即此像素所在塊的左上角的17個像素。顯然,這種幀內預測不是在時間上,而是在空間域上進行的預測編碼算法,可以除去相鄰塊之間的空間冗餘度,取得更為有效的壓縮。
如圖4所示,4×4方塊中a、b、…、p為16 個待預測的像素點,而A、B、…、P是已編碼的像素。如m點的值可以由(J+2K+L+2)/ 4 式來預測,也可以由(A+B+C+D+I+J+K+L)/ 8 式來預測,等等。按照所選取的預測參考的點不同,亮度共有9類不同的模式,但色度的幀內預測只有1類模式。
面向IP和無線環境
H.264 草案中包含了用於差錯消除的工具,便於壓縮視頻在誤碼、丟包多發環境中傳輸,如移動信道或IP信道中傳輸的健壯性。為了抵禦傳輸差錯,H.264視頻流中的時間同步可以通過採用幀內圖像刷新來完成,空間同步由條結構編碼(slice structured coding)來支持。同時為了便於誤碼以後的再同步,在一幅圖像的視頻數據中還提供了一定的重同步點。另外,幀內宏塊刷新和多參考宏塊允許編碼器在決定宏塊模式的時候不僅可以考慮編碼效率,還可以考慮傳輸信道的特性。
除了利用量化步長的改變來適應信道碼率外,在H.264中,還常利用數據分割的方法來應對信道碼率的變化。從總體上說,數據分割的概念就是在編碼器中生成具有不同優先權的視頻數據以支持網路中的服務質量QoS。例如採用基於語法的數據分割(syntax-based data partitioning)方法,將每幀數據的按其重要性分為幾部分,這樣允許在緩衝區溢出時丟棄不太重要的信息。還可以採用類似的時間數據分割(temporal data partitioning)方法,通過在P幀和B幀中使用多個參考幀來完成。
在無線通信的套用中,我們可以通過改變每一幀的量化精度或空間/時間解析度來支持無線信道的大比特率變化。可是,在多播的情況下,要求編碼器對變化的各種比特率進行回響是不可能的。因此,不同於MPEG-4中採用的精細分級編碼FGS(Fine Granular Scalability)的方法(效率比較低),H.264採用流切換的SP幀來代替分級編碼。
性能比較
TML-8為H.264的測試。測試結果所提供的PSNR已清楚地表明,相對於MPEG-4(ASP:Advanced Simple Profile)和H.263++(HLP:High Latency Profile)的性能,H.264的結果具有明顯的優越性。
H.264的PSNR比MPEG-4(ASP)和H.263++(HLP)明顯要好,在6種速率的對比測試中,H.264的PSNR比MPEG-4(ASP)平均要高2dB,比H.263(HLP)平均要高3dB。6個測試速率及其相關的條件分別為:32 kbit/s速率、10f/s幀率和QCIF格式;64 kbit/s速率、15f/s幀率和QCIF格式;128kbit/s速率、15f/s幀率和CIF格式;256kbit/s速率、15f/s幀率和QCIF格式;512 kbit/s速率、30f/s幀率和CIF格式;1024 kbit/s速率、30f/s幀率和CIF格式。