【H.264/AVC視頻編解碼技術詳解】三. H.264簡介

《H.264/AVC視頻編解碼技術詳解》視頻教程已經在“CSDN學院”上線,視頻中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看!

“紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文檔以代碼的形式操作一遍,才能對視頻壓縮編碼標準的思想和方法有足夠深刻的理解和體會!

鏈接地址:H.264/AVC視頻編解碼技術詳解

本節視頻免費


一. H.264視頻編碼標準

H.264視頻編碼標準是ITU-T與MPEG合作產生的又一巨大成果,自頒佈之日起就在業界產生了巨大影響。嚴格地講,H.264標準是屬於MPEG-4家族的一部分,即MPEG-4系列文檔ISO-14496的第10部分,因此又稱作MPEG-4/AVC。同MPEG-4重點考慮的靈活性和交互性不同,H.264着重強調更高的編碼壓縮率和傳輸可靠性,在數字電視廣播、實時視頻通信、網絡流媒體等領域具有廣泛的應用。


二. H.264視頻編碼方法簡介

在整體的編碼框架方面,H.264依然採用了與前期標準類似的結構,即塊結構的混合編碼框架。其主要結構圖如下圖所示:
在這裏插入圖片描述

在H.264進行編碼的過程中,每一幀的H圖像被分爲一個或多個條帶(slice)進行編碼。每一個條帶包含多個宏塊(MB,Macroblock)。宏塊是H.264標準中基本的編碼單元,其基本結構包含一個包含16×16個亮度像素塊和兩個8×8色度像素塊,以及其他一些宏塊頭信息。在對一個宏塊進行編碼時,每一個宏塊會分割成多種不同大小的子塊進行預測。幀內預測採用的塊大小可能爲16×16或者4×4,幀間預測/運動補償採用的塊可能有7種不同的形狀:16×16、16×8、8×16、8×8、8×4、4×8和4×4。相比於早期標準只能按照宏塊或者半個宏塊進行運動補償,H.264所採用的這種更加細分的宏塊分割方法提供了更高的預測精度和編碼效率。在變換編碼方面,針對預測殘差數據進行的變換塊大小爲4×4或8×8(僅在FRExt版本支持)。相比於僅支持8×8大小的變換塊的早期版本,H.264避免了變換逆變換中經常出現的失配問題。

H.264標準中採用的熵編碼方法主要有上下文自適應的變長編碼CAVLC和上下文自適應的二進制算數編碼CABAC,根據不同的語法元素類型指定不同的編碼方式。通過這兩種熵編碼方式達到一種編碼效率與運算複雜度之間的平衡。

同前期標準類似,H.264的條帶也具有不同的類型,其中最常用的有I條帶、P條帶和B條帶等。另外,爲了支持碼流切換,在擴展檔次中還定義了SI和SP片。

  • I條帶:幀內編碼條帶,只包含I宏塊;
  • P條帶:單向幀間編碼條帶,可能包含P宏塊和I宏塊;
  • B條帶:雙向幀間編碼條帶,可能包含B宏塊和I宏塊;

視頻編碼中採用的如預測編碼、變化量化、熵編碼等編碼工具主要工作在slice層或以下,這一層通常被稱爲**“視頻編碼層”(Video Coding Layer, VCL)。相對的,在slice以上所進行的數據和算法通常稱之爲“網絡抽象層”(Network Abstraction Layer, NAL)**。設計定義NAL層的主要意義在於提升H.264格式的視頻對網絡傳輸和數據存儲的親和性。

爲了適應不同的應用場景,H.264也定義了三種不同的檔次:

  • 基準檔次(Baseline Profile):主要用於視頻會議、可視電話等低延時實時通信領域;支持I條帶和P條帶,熵編碼支持CAVLC算法。
  • 主要檔次(Main Profile):主要用於數字電視廣播、數字視頻數據存儲等;支持視頻場編碼、B條帶雙向預測和加權預測,熵編碼支持CAVLC和CABAC算法。
  • 擴展檔次(Extended Profile):主要用於網絡視頻直播與點播等;支持基準檔次的所有特性,並支持SI和SP條帶,支持數據分割以改進誤碼性能,支持B條帶和加權預測,但不支持CABAC和場編碼。

三. H.264標準採用的編碼工具

在H.264中使用的編碼技術主要有以下類型:

幀內預測

H.264中採用了基於像素塊的幀內預測技術。主要可分爲以下不同類型:

  • 16×16大小的亮度塊:4種預測模式
  • 4×4大小的亮度塊:9種預測模式
  • 色度塊:4種預測模式,同16×16的亮度塊

16×16亮度塊和色度塊的4種預測模式如下圖:
在這裏插入圖片描述

4×4亮度塊的9種預測模式如下圖表示:
在這裏插入圖片描述

幀間預測

H.264中的幀間預測方法採用了基於塊的運動估計和補償方法,其主要特點有:

  • 多個候選參考幀;
  • B幀作爲參考幀;
  • 任意參考幀排序;
  • 多種運動補償像素塊形狀,包括16×16、16×8、8×16、8×8、8×4、4×8和4×4像素;
  • 1/4像素(亮度)的亞像素插值;
  • 對交錯視頻的基於幀或場的運動估計;

進行幀間預測的宏塊進行子宏塊分割的方式如圖所示:
在這裏插入圖片描述

亞像素插值的表示如下圖。其中紅色點表示圖像中的整像素點的位置,綠色點表示兩個正像素之間的1/2像素插值的位置,紫色點表示1/4像素插值的位置。
在這裏插入圖片描述

交錯視頻編碼

針對隔行掃描的視頻,H.264專門定義了用於處理此類交錯視頻的算法。

  • PicAFF:Picture Adaptive Frame Field——圖像層的幀場自適應;
  • MBAFF:MacroBlock Adaptive Frame Field——宏塊層的幀場自適應;

變換和量化編碼

H.264的變換編碼創新性地採用了類DCT的整數變換,有效降低了運算複雜度。對於基礎版H.264,變換矩陣爲4×4;在FRExt擴展中,還支持8×8的變換矩陣。

H.264的量化算法仍然採用標量量化方法。

無損熵編碼算法

H.264標準針對不同的語法元素指定了不同的熵編碼算法,主要有:

  • UVLC(Universal Variable Length Coding):主要採用指數哥倫布編碼;
  • CAVLC(Context Adaptive Variable Length Coding):上下文自適應的變長編碼;
  • CABAC(Context Adaptive Binary Arithmetic Coding):上下文自適應的二進制算數編碼;

其他技術

除了上述的核心算法之外,H.264還定義了包括去塊環路濾波器、SI/SP幀、碼率控制等多種技術。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章