技術
H.264和以前的标準一樣,也是DPCM加變換編碼的混合編碼模式。但它采用“回歸基本”的簡潔設計,不用衆多的選項,獲得比H.263++好得多的壓縮性能;加強了對各種信道的适應能力,采用“網絡友好”的結構和語法,有利于對誤碼和丢包的處理;應用目标範圍較寬,以滿足不同速率、不同解析度以及不同傳輸(存儲)場合的需求。
技術上,它集中了以往标準的優點,并吸收了标準制定中積累的經驗。與H.263 v2(H.263+)或MPEG-4簡單類(Simple Profile)相比,H.264在使用與上述編碼方法類似的最佳編碼器時,在大多數碼率下最多可節省50%的碼率。H.264在所有碼率下都能持續提供較高的視頻質量。H.264能工作在低延時模式以适應實時通信的應用(如視頻會議),同時又能很好地工作在沒有延時限制的應用,如視頻存儲和以服務器為基礎的視頻流式應用。H.264提供包傳輸網中處理包丢失所需的工具,以及在易誤碼的無線網中處理比特誤碼的工具。
在系統層面上,H.264提出了一個新的概念,在視頻編碼層(Video Coding Layer,VCL)和網絡提取層(Network Abstraction Layer,NAL)之間進行概念性分割,前者是視頻内容的核心壓縮内容之表述,後者是通過特定類型網絡進行遞送的表述,這樣的結構便于信息的封裝和對信息進行更好的優先級控制。
編碼
1.幀内預測編碼
幀内編碼用來縮減圖像的空間冗餘。為了提高H.264幀内編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關性,相鄰的宏塊通常含有相似的屬性。因此,在對一給定宏塊編碼時,首先可以根據周圍的宏塊預測(典型的是根據左上角宏塊、左邊宏塊和上面宏塊,因為此宏塊已經被編碼處理),然後對預測值與實際值的差值進行編碼,這樣,相對于直接對該幀編碼而言,可以大大減小碼率。
H.264提供9種模式進行4×4像素宏塊預測,包括1種直流預測和8種方向預測。在圖中,相鄰塊的A到I共9個像素均已經被編碼,可以被用以預測,如果我們選擇模式4,那麼,a、b、c、d4個像素被預測為與E相等的值,e、f、g、h4個像素被預測為與F相等的值,對于圖像中含有很少空間信息的平坦區,H.264也支持16×16的幀内編碼。
2.幀間預測編碼
幀間預測編碼利用連續幀中的時間冗餘來進行運動估計和補償。H.264的運動補償支持以往的視頻編碼标準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀——SP幀,如圖3所示。碼流中包含SP幀後,能在有類似内容但有不同碼率的碼流之間快速切換,同時支持随機接入和快速回放模式。
(1)不同大小和形狀的宏塊分割
對每一個16×16像素宏塊的運動補償可以采用不同的大小和形狀,H.264支持7種模式,如圖4所示。小塊模式的運動補償為運動詳細信息的處理提高了性能,減少了方塊效應,提高了圖像的質量。
(2)高精度的亞像素運動補償
在H.263中采用的是半像素精度的運動估計,而在H.264中可以采用1/4或者1/8像素精度的運動估值。在要求相同精度的情況下,H.264使用1/4或者1/8像素精度的運動估計後的殘差要比H.263采用半像素精度運動估計後的殘差來得小。這樣在相同精度下,H.264在幀間編碼中所需的碼率更小。
(3)多幀預測
H.264提供可選的多幀預測功能,在幀間編碼時,可選5個不同的參考幀,提供了更好的糾錯性能,這樣更可以改善視頻圖像質量。這一特性主要應用于以下場合:周期性的運動、平移運動、在兩個不同的場景之間來回變換攝像機的鏡頭。
(4)去塊濾波器
H.264定義了自适應去除塊效應的濾波器,這可以處理預測環路中的水平和垂直塊邊緣,大大減少了方塊效應。
3.整數變換
在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換因為取舍而存在誤差的問題,變換矩陣如圖5所示。與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換後的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響并不大。此外,整數DCT變換還具有減少運算量和複雜度,有利于向定點DSP移植的優點。
4.量化
H.264中可選52種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的複合率遞進的,而不是一個固定常數。
在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描,如圖6所示。大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊内,有助于提高編碼效率。
5.熵編碼
視頻編碼處理的最後一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自适應二進制算術編碼(CABAC)。
在H.263等标準中,根據要編碼的數據類型如變換系數、運動矢量等,采用不同的VLC碼表。H.264中的UVLC碼表提供了一個簡單的方法,不管符号表述什麼類型的數據,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符号間的相關性,在中高碼率時效果不是很好。
因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型。為了提高算術編碼的效率,通過内容建模的過程,使基本概率模型能适應随視頻幀而改變的統計特性。内容建模提供了編碼符号的條件概率估計,利用合适的内容模型,存在于符号間的相關性可以通過選擇要編碼符号鄰近的已編碼符号的相應概率模型來去除,不同的句法元素通常保持不同的模型
H.264的目标應用涵蓋了大部分的視頻服務,如有線電視遠程監控、交互媒體、數字電視、視頻會議、視頻點播、流媒體服務等。
H.264為解決不同應用中的網絡傳輸的差異。定義了兩層:視頻編碼層(VCL:Video Coding Layer)負責高效的視頻内容表示,網絡提取層(NAL:Network AbstractionLayer)負責以網絡所要求的恰當的方式對數據進行打包和傳送(如圖所示: 标準的整體框架)。
基本層次(Baseline Profile):該層次使用了H.264的除了B-Slices,CABAC以及交織編碼模式外所有的特性。該層次主要使用于低時延的實時應用場合。
主要層次(Main Profile):包含Baseline profile的所有特性,并包括了B-slices,CABAC以及交織編碼模式。它主要針對對時延要求不高,當壓縮率和質量要求較高的場合。
擴展層次(Profile X):支持所有Baseline profile的特性,但不支持CABAC以及基于宏塊的自适應幀場編碼。該層次主要針對的時各種網絡視頻流傳輸方面的應用。
1.分層設計H.264的算法在概念上可以分為兩層:視頻編碼層負責高效的視頻内容表示,網絡提取層(NAL:Network Abstraction Layer)負責以網絡所要求的恰當的方式對數據進行打包和傳送。在VCL和NAL之間定義了一個基于分組方式的接口,打包和相應的信令屬于NAL的一部分。這樣,高編碼效率和網絡友好性的任務分别由VCL和NAL來完成。
VCL層包括基于塊的運動補償混合編碼和一些新特性。與前面的視頻編碼标準一樣,H.264沒有把前處理和後處理等功能包括在草案中,這樣可以增加标準的靈活性。
NAL負責使用下層網絡的分段格式來封裝數據,包括組幀、邏輯信道的信令、定時信息的利用或序列結束信号等。例如,NAL支持視頻在電路交換信道上的傳輸格式,支持視頻在Internet上利用RTP/UDP/IP傳輸的格式。NAL包括自己的頭部信息、段結構信息和實際載荷信息,即上層的VCL數據。(如果采用數據分割技術,數據可能由幾個部分組成)。
2.高精度、多模式運動估計
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幀剛剛編碼好的參考幀,編碼器将選擇對每個目标宏塊能給出更好的預測幀,并為每一宏塊指示是哪一幀被用于預測。
3.4×4塊的整數變換
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%左右,而不是以不變的增幅變化。變換系數幅度的歸一化被放在反量化過程中處理以減少計算的複雜性。為了強調彩色的逼真性,對色度系數采用了較小量化步長。
4.統一的VLC
H.264中熵編碼有兩種方法,一種是對所有的待編碼的符号采用統一的VLC(UVLC :Universal VLC),另一種是采用内容自适應的二進制算術編碼(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可選項,其編碼性能比UVLC稍好,但計算複雜度也高。UVLC使用一個長度無限的碼字集,設計結構非常有規則,用相同的碼表可以對不同的對象進行編碼。這種方法很容易産生一個碼字,而解碼器也很容易地識别碼字的前綴,UVLC在發生比特錯誤時能快速獲得重同步。
5.幀内預測
在先前的H.26x系列和MPEG-x系列标準中,都是采用的幀間預測的方式。在H.264中,當編碼Intra圖像時可用幀内預測。對于每個4×4塊(除了邊緣塊特别處置以外),每個像素都可用17個最接近的先前已編碼的像素的不同加權和(有的權值可為0)來預測,即此像素所在塊的左上角的17個像素。顯然,這種幀内預測不是在時間上,而是在空間域上進行的預測編碼算法,可以除去相鄰塊之間的空間冗餘度,取得更為有效的壓縮。
按照所選取的預測參考的點不同,亮度共有9類不同的模式,但色度的幀内預測隻有1類模式。
6.面向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幀來代替分級編碼。
由于藍光格式的統一,使得市面上絕大多數的高清視頻均是采用H.264的格式編碼,它又分為四個最主要步驟,分别是流處理,逆變換,動态補償,去方塊濾波,這四步也是資源消耗的主要四個部分。
H.264解碼的四個步驟中的第一步“CAVLC/CABAC解碼”是最為消耗運算資源,這方面遠高于其他三步(簡單的說,CAVLC/CABAC是H.264編碼規範中兩種不同的算法,都是為了提高壓縮比,其中CABAC比CAVLC壓縮率更高,但解碼時自然也要求更高)。
如果所有四個步驟全采用處理器純軟件解碼運算,當碰上HDDVD版本的高碼率H.264視頻,處理器的負載會非常巨大,即使能流暢播放高清視頻,也會因為處理器壓力過重而影響其他同時開啟的應用程序的執行效率。
如果讓處理器解碼“CAVLC/CABAC解碼”和“反向轉換(Inverse Transformation)”兩部分,由顯示核心承擔“運動補償”和“解碼去塊”功能,則可以在一定程度上降低處理器的壓力。不過對于使用單核處理器或低端雙核處理器的用戶來說,這依然無法很好的應付這類視頻;其次,碰上編碼率更高的視頻,依然會給處理器造成很大的處理難度,導緻視頻播放的不确定性,可能消費者會遇到某些視頻可以流暢播放,但是有些視頻卻丢幀的情況。
冗餘處理
H.264與以前的國際标準如H.263和MPEG-4相比,為達到高效的壓縮,充分利用了各種冗餘,統計冗餘和視覺生理冗餘。
1.統計冗餘:頻譜冗餘(指色彩分量之間的相關性),空間冗餘,還有時間冗餘。這是視頻壓縮區别于靜止圖像的根本點,視頻壓縮主要利用時間冗餘來實現大的壓縮比。
2.視覺生理冗餘
視覺生理冗餘是由于人類的視覺系統(HVS)特性造成的,比如人眼對色彩分量的高頻分量沒有對亮度分量的高頻分量敏感,對圖像高頻(即細節)處的噪聲不敏感等。
針對這些冗餘,視頻壓縮算法采用了不同的方法加以利用,但主要的考慮是集中在空間冗餘和時間冗餘上。H.264也采用混合(hybrid)結構,即對空間冗餘和時間冗餘分别進行處理。對空間冗餘,标準通過變換及量化達到消除的目的,這樣編碼的幀叫I幀;而時間冗餘則是通過幀間預測,即運動估計和補償來去除,這樣編碼的幀叫P幀或B幀。與以前标準不同的是,H.264在編碼I幀時,采用了幀内預測,然後對預測誤差進行編碼。
這樣就充分利用了空間相關性,提高了編碼效率。H.264幀内預測以16x16的宏塊為基本單位。首先,編碼器将與當前宏塊同一幀的鄰近像素作為參考,産生對當前宏塊的預測值,然後對預測殘差進行變換與量化,再對變換與量化後的結果做熵編碼。熵編碼的結果就可以形成碼流了。由于在解碼器端能夠得到的參考數據都是經過反變換與反量化後的重建圖像,因此為了使編解碼一緻,編碼器端用于預測的參考數據就和解碼器端一樣,也是經過反變換與反量化後的重建圖像。
優勢
1.低碼率(Low Bit Rate):和MPEG2和MPEG4、ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮後的數據量隻有MPEG2的1/8,MPEG4的1/3。
2.高質量的圖象:H.264能提供連續、流暢的高質量圖象(DVD質量)。
3.容錯能力強:H.264提供了解決在不穩定網絡環境下容易發生的丢包等錯誤的必要工具。
4.網絡适應性強:H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。
H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮标準壓縮後變成3.5GB,壓縮比為25∶1,而采用H.264壓縮标準壓縮後變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術将大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。
版本
AVC标準的版本包括以下完成修改、更正和修正(日期是最後批準日期在國際電信聯盟-T,雖然最後"國際标準"批準日期在ISO/IEC是有些不同的稍晚在大多數情況下)。每個版本代表的集成到文本的下一個較低版本的更改。加粗面臨版本是版本,其中包括相對較重大技術改進。
版本1:(2003年5月30日)第一次批準的包含基準,主要是和擴展配置文件的H.264/AVC版本。
版本2:(2004年5月7日)包含各種次要更正更正。
版本3:(3月1,2005年)H.264/AVC包含提供包含高,高10、(FRExt)的保真度範圍擴展的第一修正案增添主要高4:2:2,和高4:4:4配置文件。
版本4:(2005年9月13日)更正包含各種次要更正和添加三個縱橫比的指标。
版本5:(2006年6月13日)組成的事先去除的修訂高4:4:4(作為在ISO/IEC的更正處理)的配置文件。
版本6:(2006年6月13日)修訂組成的次要擴展喜歡擴展色域的顔色空間支持(與上述縱橫比指标在ISO/IEC捆綁)。
版本7:(2007年4月6日)修訂包含另外的高4:4:4預測和四個内唯一配置文件(高10内,高4:2:2内,高4:4:4内,和CAVLC4:4:4内)。
版本8:(11月22,2007年)H.264/AVC包含的可伸縮視頻編碼(SVC)修正案,包含可擴展的基線、可擴展性高,和可擴展的高幀内的配置文件項重大補充。
版本9:(2009年1月13日)包含一些小的修改更正。
版本10:(2009年3月16日)修訂包含新的配置文件(約束的基線配置文件)與隻有共同以前支持的各種功能的子集定義指定的配置文件。
版本11:(3月16,2009年)H.264/AVC含有多視圖視頻編碼(MVC)的擴展,包括多視圖高配置文件修訂重大補充。
12版:(2010年3月9日)修訂包含新MVC的配置文件(立體聲高配置文件)定義的兩個視圖視頻編碼與交錯編碼工具和指定額外的SEI消息(幀包裝安排SEI消息)的支持。
13版:(2010年3月9日)包含一些小的修改更正。
第14版:(2011年6月29日)指定一個新的水平(水平5.2)支持更高處理速率在每秒和一個新的配置文件(逐步高配置文件)支持隻編碼工具以前指定的高配置文件的幀最大宏塊的修訂。
版本15:(2011年6月29日)包含一些小的修改更正。
版本16:(2012年1月13日)包含的三個新的配置文件主要用于實時通信的應用程序定義的修訂:約束高、可擴展約束的基線,和可擴展約束高配置文件。
版本17:(2013年4月13日)與其他SEI消息指标修訂。
版本18:(2013年4月13日)修訂以指定的深度映射數據的3D立體視頻,包括一個多視圖深度高配置文件的編碼。
版本19:(2013年4月13日)更正更正為多視圖視頻子碼流提取過程中的錯誤。
20版:(2013年4月13日)指定額外的顔色空間标識符(包括支持ITU-R建議BT.2020UHDTV)和其他的修正模型中的色調映射信息SEI消息的類型。
編碼和解碼
因為H.264編碼和解碼要求大量的計算能力在特定類型的算術運算,在通用Cpu運行的軟件實現高效率通常較少力量。不過,最新的四核通用x86Cpu有足夠的計算能力來執行實時标清及高清編碼。壓縮效率取決于視頻的算法實現,不在是否使用硬件或軟件來實現。因此,硬件和軟件基于的執行更是電源效率、靈活性和成本之間的差異。為提高電源效率和減少硬件形式因素,可能雇用專用硬件,為完整的編碼或解碼過程中,或在CPU控制的環境内加速援助。
基于CPU的解決辦法是已知是靈活得多,尤其是編碼必須進行時同時多格式、多比特率和各項決議(多屏幕視頻)和可能用上的容器格式支持的附加功能,先進綜合的廣告功能等。基于CPU的軟件解決方案通常使得更容易在相同的CPU内的多個并發編碼會話進行負載平衡。
介紹了在2011年1月CES(消費電子展)的第2代英特爾"桑迪橋"酷睿i3/i5/i7處理器提供稱為英特爾快速同步視頻上芯片硬件全面高清H.264編碼器。
硬件H.264編碼器可以是ASIC或FPGA。FPGA是一個一般的可編程芯片。要使用FPGA作為硬件編碼器,H.264編碼器設計需要自定義應用程序的芯片。完整的高清H.264編碼器可以在一個單一的低成本FPGA芯片上運行2009年(高配置文件、水平4.1,1080p,30幀/秒)。
ASIC編碼器與H.264編碼器功能,可從許多不同的半導體公司,但在ASIC中使用的核心設計通常由芯片及媒體,On2(原Hantro,由谷歌收購),想象力的技術,NGCodec等幾個公司的一個授權。一些公司已提供的FPGA和ASIC産品。
德州儀器生産一線的ARM+執行DSPH264BP的DSP内核編碼1080p30幀每秒。這允許(其中,作為高度優化的DSP代碼實現)的編解碼器的靈活性時正在比通用CPU上的軟件效率更高。



















