在1995年ITU-T完成了用于視頻電話的H.263標準之后,該組織ITU-T視頻編碼專家組VCEG著手在兩方面開始進一步的研究:一是短期研究,努力在H.263中增加許多額外的特征,這就形成H.263的第二版本H.263+和第三版本H.263++;二是長期研究,著手制定低比特率的視頻通信新標準,這就是H
新的視頻編碼標準H.264與H.261/H.263和MPEG-X的視頻編碼標準有很大改進,它不僅含有一個規定視頻編碼算法的視頻編碼層(VCL,Video Coding Layer),還包括一個規定網絡傳輸規范的網絡提取層(NAL,Network Abstraction Layer)。H.264的視頻編碼層采取的編碼框架仍然是傳統的混合編碼框架,H.264編碼效率的提高也不只是其中某一項新的編碼技術所產生的決定性的結果,而是多種新技術所產生的細微的效果積累而致。這些新技術包括:多種新的幀內預測方法、可變尺寸塊的運動補償技術、多參考幀的運動補償技術、4×4整數變換技術、新的環路濾波技術等。與先前的標準相比較,H.264的應用前景更為廣泛。例如它允許在Internet中以1Mbit/s的速率傳送電視質量的視頻信號,它可以使8 MHz的模擬帶寬中容納兩倍于MPEG-2編碼的數字電視頻道,它使無線視頻通信成為可能,它對傳統的數字媒體存儲技術也將產生巨大的影響。可以肯定,H.264標準的制定標志著有限失真數字視頻編碼技術開始走向成熟。H.264的主要功能目標如下:
●高壓縮率,在所有的速率上,比H.263節省約50%的比特率,在高比特率時有優秀的圖像質量;
●采用簡潔的設計方式,簡單的語法描述,避免過多的選項和配置,盡量利用現有的編碼模塊;
●低時延,對不同的業務靈活地采用相應的時延限制;
●加強對誤碼和丟包的處理,增強解碼器的差錯恢復能力;
●在編解碼器中采用復雜度可分級設計,即在圖像質量和編碼處理之間可分級處理,以適應高或低復雜性的具體應用;
●提高網絡適應性,采用“網絡友好(Network friendliness)”的結構和語法,以適應IP網絡、移動網絡的應用;
●基本檔次(Baseline profile)的使用無需版權。
H.264建議的特點可以歸納為三個方面:一是注重實用,采用成熟的技術,追求更高的編碼效率,簡潔的表現形式;二是注重對移動和IP網絡的適應,采用分層技術,從形式上將編碼和信道隔離開來,實質上是在源編碼器算法中更多地考慮到信道的特點;三是在混合編碼器的基本框架下,對其主要關鍵部件都做了重大改進,如多模式運動估計、幀內預測、多幀預測、統一VLC、4×4二維整數變換等。
最后,必須說明的是,H.264優越性能的獲得不是沒有代價的,其代價是計算復雜度的大大增加,據估計,編碼的計算復雜度大約相當于H.263的3倍,解碼復雜度大約相當于H.263的2倍。H.264的主要特征表現為:
1、H.264的分層處理
與早期的標準(如H.261 /H.263、MPEG-1/MPEG-2)一樣,H.264標準并沒有明確定義編解碼器算法,而是定義了編碼視頻碼流的結構和這個視頻碼流的解碼方法。H.264編解碼結構功能框圖如圖1所示。H.264算法在概念上可以分為兩層:視頻編碼層(VCL)負責高效的視頻內容表示;網絡提取層(NAL)負責按照網絡所要求的適當方式對數據進行打包和傳送,H.264編碼器分層結構圖中的H. 324/M表示用于移動的H.324系統。
1)H.264的視頻編碼層
由H.264所定義的編碼方案表面上類似于已獲得成功應用的視頻編碼標準(如H.263和MPEG-2)。也包括了基于塊的運動補償,基于DCT變換的殘差編碼,因比特率控制而引入的可變量化步長,Zig-Zag掃描和系數的VLC編碼等。然而,H.264草案的VCL層除了通用的基于塊運動補償的混合編碼之外,還具有一些其它視頻編碼建議所沒有的新特性。為了增加標準應用的靈活性,H.264建議與以前的建議一樣,沒有考慮視頻的前處理和后處理功能。
在VCL中,運動補償的過程不同于先前標準,一個16×16的宏塊可以具有7種不同形狀和尺寸的塊運動預測,最小的塊尺寸可以是4×4,因此每個宏塊可以有1、2、4、8或16個運動矢量,缺省的運動矢量精度通常為1/4像素,最初草案中H.264選項也支持運動矢量1/8像素精度(后來不考慮1/8像素精度)。支持小數取樣內插濾波、支持多參考幀圖像,除了I幀、P幀和B幀外還支持兩種類型的S幀,即SP幀和SI幀。SP幀類似于P幀,是一種充分利用運動預測編碼來去除時間相關性的方法,它與P幀區別在于即使采用幾個不同參考幀預測時,也可以允許有相同的重建幀。這種S幀的引入,對于在比特流中進行幀切換、拼接、隨機存取、快進、快退等功能的實現更為方便。在編碼器預測環路采用了去方塊效應濾波。
2)H.264的網絡提取層
網絡提取層(NAL)負責使用下層網絡的分段格式來封裝數據,包括組幀、邏輯信道的信令、定時信息的利用或發序列結束信號等。例如,NAL支持視頻在電路交換信道上的傳輸格式,支持視頻在Internet上利用RTP/UDP/IP傳輸的格式、NAL包括網絡提取層的頭信息、段結構信息和實際載荷信息,即上層的VCL數據(如果采用數據分割技術,數據可能由幾個部分組成)。NAL提供適當的映射方法將頭部信息和數據映射到傳輸協議層上,可以減少在分組交換傳輸中組幀和重同步所需要的資源開銷。
為了提高在不同特性的網絡上定制VCL數據格式的能力,H.264的網絡提取層在VCL和NAL之間定義了基于分組的接口規范、打包方式等(即上述NAL對VCL數據的承載過程),也包括了相應的信令內容。這樣,高效率編碼任務和網絡友好性任務就由VCL和NAL分別來完成。
2、H.264的檔次和級別
H.264標準規定了三個檔次,它們是基本檔次(Baseline Profile)、主檔次(Main Profile)和擴展檔次(Extended Profile),分別對應于不同場合的應用。后來又增加了一個新的擴展檔次,即專業擴展檔次(Extended Professional Profile),其主要應用為超高質量的視頻圖像、數字影院等。屬于某個檔次的H.264解碼器必須支持這個檔次所包括的所有內容,而編碼器則不需要支持這個檔次的所有內容,但是要符合標準規定的碼流結構。H.264三個主要檔次所規定的內容如下:
1)基本檔次:基本檔次包含除了下述兩部分之外的所有H.264標準所規定的內容。這兩部分是:
●B幀、加權預測(Weighted Prediction)、自適應算術編碼(CABAC,Context-based Adaptive Binary Arithmetic Coding)、場編碼(Field Coding)及其視頻圖像宏塊自適應切換場和幀編碼(MB-AFF,Macroblock Adaptive Field/Frame Coding)。
●SP/SI片(slice)和片的數據分割(Data Partitioning)。
2)主檔次:首先主檔次包含了基本檔次中不包括的上述第一個部分,同時主檔次不包含基本檔次中所包括的靈活宏塊順序(FMO,Flexible Macroblock Ordering)、任意片順序(ASO,Arbitrary Slice Ordering)和可冗余的圖片數據(Redundant Pictures Features)這些內容。
3)擴展檔次:擴展檔次包含了除自適應算術編碼之外的所有H.264標準所規定的內容。H.264三個主要檔次所采用的技術分類如圖2所示。
3、多種幀內預測模式
在以往的視頻編碼標準中,幀內圖像編碼是直接對宏塊進行DCT變換、量化和熵編碼生成輸出比特流的,幀內編碼的數據量往往要比幀間編碼圖像大很多,在強制刷新、碼流控制以及增加抗誤碼性能時引入的幀內編碼往往造成碼率的不平穩現象。H.264在幀內編碼作了進一步改進,類似于幀間編碼引入了幀內預測方法,即對編碼宏塊進行不同模式的幀內預測,然后對預測誤差信號進行DCT變換,避免了以往幀內編碼的缺陷。幀內4×4亮度塊共有9種可選幀內預測模式,幀內16×16亮度塊共有4種可選幀內預測模式。而幀內8×8色度塊有4種預測模式。
4、多模式高精度幀間預測
在視頻編碼標準中,幀間預測是一種充分利用時間相關性去除時間冗余數據的有效編碼方法。宏塊通常是進行預測的基本單元,一個宏塊對應一個運動矢量。在高級預測模式下,一個宏塊的四個8×8亮度塊各自對應一個運動矢量。然而在H.264編碼器中,塊的劃分要復雜得多,它支持范圍從16×16到4×4大小的運動補償亮度塊尺寸,也就是說每個宏塊可以劃分成16×16、16×8、8×16或8×8四種子塊模式。如果選擇8×8模式,則每個8×8塊可以進一步劃分成以下四種子塊模式:8×8、8×4、4×8、4×4。由此可見,H.264幀間編碼是一種多模式幀間預測編碼。對于宏塊中的每一個塊或子塊都有一個獨立的運動矢量,每個運動矢量必須進行編碼并通過碼流來發送。
在一個宏塊中殘差數據以圖3順序進行編碼發送。如果一個宏塊以16×16的幀內模式編碼,則首先發送標志為“-1”的塊,它是由每個4×4亮度塊的DC系數組成,接著發送編號為0~15的16個4×4亮度殘差編碼塊(在16×16幀內宏塊模式下,標號為0~15的這些4×4亮度殘差塊DC系數設為0),再接著發送標號為16和17的2個2×2色度塊,它分別由4×4的Cb和Cr系數的DC系數組成,最后發送標號為18~25的8個4×4色度殘差編碼塊。另外,對于H.264標準,缺省的運動補償是1/4像素精度,比MPEG-1、MPEG-2、MPEG-4以及H.261、H.263的整像素或半像素相比具有更高的精度。從而使得塊的匹配更加精確,運動補償后要進行變換編碼的殘差數據更少。
5、多參考幀預測
在H.264中,允許編碼器使用多于一幀的先前幀進行運動估計,這就是所謂的多幀參考技術。例如選用2幀或3幀剛剛編碼好的參考幀,編碼器將選擇對每個目標宏塊能給出更好的預測幀,并為每一個宏塊指示是哪一幀被用于預測的。
6、4×4塊的整數變換
與以往的視頻編碼標準相似,H.264對殘差采用基于塊的變換編碼,而且這種變換是整數操作而不是實數運算,其過程和DCT基本相似。這種方法的優點在于:在編碼器和解碼器中可以得到精度相同的正變換和反變換,便于使用簡單的定點運算方式。也就是說,這種變換不會出現“反變換誤差”,從而消除因變換精度所引起的圖像失真。變換的最小單位是4×4塊,而不是以往常用的8×8塊。由于用于變換塊的尺寸的縮小,運動物體的劃分更精確,這樣,不但變換計算量比較小,而且在運動物體邊緣處的銜接誤差也大為減小。為了使小尺寸塊的變換方式對圖像中較大面積的平滑區域不產生塊之間的灰度差異,可對幀內宏塊亮度數據的16個4×4塊的DC系數(每個小塊一個DC系數,共
7、統一的熵編碼
H.264建議中熵編碼有兩種方法:一種是對所有的語法單元采用統一的UVLC(Universal Variable-Length Coding),另一種是采用內容自適應的二進制算術編碼器(CABAC)。CABAC是可選項,其編碼性能比UVLC要好,主要體現在三個方面。首先,基于內容的編碼利用了編碼符號的條件概率特性;其次,算術編碼允許分配給每個符號非整數個比特;第三,自適應算法允許熵編碼器自適應非穩定概率分布的符號特性。但計算復雜度要比UVLC高。UVLC使用一個長度無限的碼字集,采用規則的碼表,很容易產生一個碼字,解碼器也很容易識別碼字的前綴,當發生比特錯誤時ULVC能快速獲得重同步,它是H.264的基本編碼方法。