3. 數位影像壓縮系統
3.2. 視訊壓縮標準&H.264
3.2.2. H.264
在 1998 年,VCEG 提出了企劃書的邀請(Call for Proposal)想要訂定一個名為 H.26L 新的視訊標準,隔年完成了初步的版本。2001 年時,MPEG 完成了 MPEG-4 Part2[13]
的專案,也想要在訂定一各擁有更好的壓縮率的視訊壓縮標準,所以他們也向各界提 出計畫書的邀請。VCEG 決定把他們的 H.26L 初步版本提到 MPEG 這個邀請中,並希 望能一起合作訂定這一個新的標準。MPEG 比較過各個計畫書之後,決定選擇 H.26L 做為基礎,並與 VCEG 合組一個團隊(Joint Video Term,JVT)共同開發下一世代新的影 像壓縮標準。這個團隊在 2001 年 12 月成立並計畫在 2003 年完成標準的制定,這個標 準的正式名稱在 VCEG 稱為 H.264[15],在 MPEG 中稱為 MPEG-4 Part 10 Advanced Video Coding (AVC)[15]。
這個標準根據不同的應用環境設計出不同的 Profile. Baseline Profile 的設計包括具 有較低的複雜度(low complexity)和較高的抗錯性(high robustness),適合應用於網路視 訊的環境;Main Profile 的設計強調擁有很高的壓縮率(high coding efficiency);Extended Profile 則是將 Baseline Profile 的高抗錯性和 Main Profile 的高壓縮特性做一個結合。這 個標準在 2004 八、九月時,又根據新的應用在做一次延伸(fidelity range extensions, FRExt),增加了四個新的 Profile[16]。
Baseline FMO
ASO
I & P Slice
¼ Pel MC multiple ref. frames
Diff. Block Sizes CAVLC
In-Loop Filter Intra Prediction
B Slice
W eighted Prediction
Field Coding
MB-AFF
CABAC
Data Partitioning
Main SI/SP Slice
Extended
Baseline FMO
ASO
I & P Slice
¼ Pel MC multiple ref. frames
Diff. Block Sizes CAVLC
In-Loop Filter Intra Prediction
B Slice
W eighted Prediction
Field Coding
MB-AFF
CABAC
Data Partitioning
Main SI/SP Slice
Extended
19
Fig. 17 H.264/AVC profiles and corresponding tools[17]
H.264 的在位元流(bitstream)的設計上,主要分為兩個部分:NAL(Network Abstraction Layer)和 VCL(Video Coding Layer),VLC 是儲存視訊畫面壓縮完後的資料,NAL 是用 來包裝 VCL 和一些解壓縮的重要參數。一個 NAL 可以視為在網路傳輸上的一個封包 (Packet),除了包裝 VCL 外,他也包括了 SPS(Sequence Parameter Sets)和 PPS(Picture Parameter Sets)這兩個解壓縮所需要的重要資訊。SPS 中包含視訊的應用範圍(Profile 和 Level)、畫面長寬等資訊。PPS 會指出熵編碼的格式(CABAC 或 CAVLC)、QP 的大 小,及一需 VCL 內壓縮工具的設定(in-loop filtering、weighted prediction 等)。這些資 訊(SPS 和 PPS)是重要的而且變動性是很小的,讓這些資料獨立出來不但可以增高壓縮 率,在網路傳輸方面也可以利用可靠的機制(如:reliable channel)來保護這些重要資 訊,增加系統的強韌性(robustness)。
H.264 和 MPEG 或 ITU-T 之前所設計的視訊標準一樣,都是採用一種稱為混合型的 區塊視訊壓縮法(block-based hybrid video coding approach)[14],主要的壓縮架構如下圖 17 所示。在 VCL 的設計上,還是仿照舊有的視訊標準的設計,每張畫面切格成固定 大小的巨區塊(macroblock),這些巨區塊的大小在明度上(luminance,”luma”)是 16x16,
在色度方面(chrominance, “chroma”)是 8x8 的大小(以 YCbCr420 為例,本論文皆是以此 格式為討論範圍)。多個巨區塊會集合成 slice,一張畫面(picture)會切割成一個以上的 slice,slice 的大小由應用的環境所決定,在網路封包傳輸上,通常一個封包(Packet) 即是一個 NAL unit,這個 NAL 封包會包含一個 slice 的資料,所以 slice 的大小大約等 於一個封包的大小再減掉 VCL 前的一些標頭(header)資訊。但是如果是在儲存應用 上,則一張畫面劃分為同一個 slice,會擁有較好的壓縮效率。
Transform Quantization
Intra Prediction and Compensation
Inter Motion Compensation
Frame Store
Motion Estimation
Debloking filter Coding Control
Bit Stream Out
Video Source +
-+
Quantized Transform Coefficients
Motion Vectors + Macroblock Type + Reference Frame Index + CBP
Intra Prediction Mode + Macroblock Type + CBP
Intra Inter
Predicted Macroblock
Transform Quantization
Entropy
Intra Prediction and Compensation
Inter Motion Compensation
Frame Store
Motion Estimation
Debloking filter Coding Control
Bit Stream Out
Video Source +
-+
Quantized Transform Coefficients
Motion Vectors + Macroblock Type + Reference Frame Index + CBP
Intra Prediction Mode + Macroblock Type + CBP
Intra Inter
Predicted Macroblock
Fig. 18 Block diagram of the H.264 encoder [18]
H.264 這個新一代的影像視訊壓縮標準在 VCL 的設計上有下列的特點和壓縮的模 組,包括:
ASO
因為每個 slice 都是可以獨立解壓縮的,所以 H.264 設計出同一張畫面的 slice 可 以不依照一定的順序解壓縮,稱為 ASO(Arbitrary Slice Order),以適應可能會造成封包 亂序(out of order)的現今網路協定(如 UDP)[19]。ASO 可以增加封包遺失的強韌性(lose robustness)和減少因為網路傳輸造成的延遲(reduction delay)。
FMO
傳統的壓縮標準(MPEG-4 Simple Profile)每次丟失一個封包(或 slice),所造成的是 畫面上連續區塊的失真,會影響錯誤回復(error resilience)的能力。所以 H.264 支援 FMO(Flexible Macroblock Ordering),在 slice 中的巨區塊不一定是連續的,是可以均勻 分布在畫面中的區塊,如果真的發生封包遺失的話,可以把失真分散開來[20]。
21
Fig. 19 FMO checker board and interleaving mode
Slice Types
H.264 內的 slice 分為五種型態,除了與先前標準相似的 I Slice、P Slice 和 B Slice,
更增加了 SP 和 SI 的特殊型態。SP 和 SI 的型態在網路傳輸時非常有用,可以在同樣 視訊序列但是不同壓縮率的位元流做快速切換,以適應頻寬會隨時變動的真實網路狀 況。它還有另一項功用,可以當隨機撥放的撥放點使用。關於 SP 與 SI Slice 的原理與 應用環境可以參考[21]。
Intra Prediction
H.264 為了減少空間上的多餘性(spatial redundancy),所以採用 Intra Prediction 來 減少 intra 巨區塊的資料量。在明度區塊上,巨區塊可以以 16x16 或 4x4 的大小去做 預測,16x16 支援四種預測的模式:Vertical、Horizontal、DC 和 Plane;在 4x4 方面支 援 9 種模式,如圖 20 所示,除了包括八種方向外還有 DC mode。在色度 8x8 區塊中,
支援類似明度 16x16 區塊的四種預測模式(Vertical、Horizontal、DC 和 Plane)。明度區 塊和色度區塊中預測模式的選擇是獨立的,不會互相影響限制。
與先前標準不同的是,MPEG-4(Simple Profile)的 Intra Prediction 是在經過轉換處 理(Transform)後,在頻率域上(frequency domain)運作(AC/DC Prediction);H.264 是在 轉換處理前做 Intra Prediction,即是在時間域上(time domain)處理。
X A B C D E F G H
Fig. 20 4x4 Intra Prediction mode: 8 directions + DC
Inter Prediction
H.264 採用的是以區塊為基礎的位移補償法(block-based motion compensation)來去 除時間上的資料多餘性(temporal redundancy),與先前的視訊標準不同的是它的區塊最 小可以是 4x4(MPEG-4 Simple Profile 最小是 8x8),區塊越小理論上可以在先前的畫面 (reference frame)找到約相似的區塊來增加壓縮率,但是要考慮的是區塊越小所增加的 標頭(header)資訊越多,所以必須壓縮時必須仔細考慮區塊大小及標頭資訊來取得比較
16x16 16x8 8x16 8x8
8x8 8x4 4x8 4x4
16x16 16x8 8x16 8x8
8x8 8x4 4x8 4x4
Sub-macroblock
Fig. 21 Variable block-size motion compensation with small block size
另一個不同的是:H.264 可以在前幾張已經解壓縮完的畫面尋找目前要所要壓縮 的區塊的最符合的區塊,而不是只能在最近的一張找(MPEG-4 Simple Profile),因為參 考的畫面增加,可以增加壓縮率,但是要比對的區塊變多也會使複雜度大增。
23
還有一個不同的是,一般視訊壓縮標準的位移向量(motion vector)的精準度 (Accuracy)是到 1/2 像素(half-pixel),如 MPEG-4 Simple Profile,而 H.264 和 MPEG-4 ASP(Advanced Simple Profile)都是採用精準到 1/4 像素(quarter-pixel)來提高壓縮率,但 是 H.264 採用的是 6-Tap 濾波器來產生 1/4 像素,比 MPEG-4 ASP 的 8-Tap 濾波器複 雜度低。
Weighted Prediction
H.264 針對一些影片種常見的特殊效果,如淡出或抹去等,可以在做完位移補償 完後,在做加權的預測,針對這些效果的到更好的壓縮率。
Transformation and Quantization
以往的視訊壓縮轉換處理大都採用的是 8x8 的浮點數轉換矩陣(MPEG-4 SP &
H.263),H.264 採用的是整數的轉換矩陣(integer transform),並使用 3 個轉換矩陣。
⎥⎥
Fig. 22 H.264 Transform Matrices
第一個矩陣(H1)是針對巨區塊內的每個 4x4 區塊做處理,包括明度區塊和色度區 塊,稱為”Core Transform”。如果預測模式是採用INTRA_16x16 的話,則會將明度區 塊中 4x4 經過Core Transform後的DC值集合成一個 4x4 的區塊,在利用矩陣H2再做一 次轉換,稱為Hadamard Transform. 第三個矩陣(H3)是利用來針對色度區塊的DC值再做 一次轉換[23]。
H.264 支援了 0 到 51 的 QP 值,壓縮器會根據指定的 QP 值算出相對應的量化單 位(quantization step size)來作量化處理。當 QP 每增加一各單位,量化單位大約會增加 6%;QP 每增加 6 單位,量化單位會加倍。
224
Fig. 23 Quantization Parameter and Quantize Step Size
Entropy Coding
H.264 支 援 的 熵 編 碼 模 式 有 兩 種 : CABAC(context-adaptive binary arithmetic coding)[24]和 CAVLC(context-adaptive variable length coding)。使用 CAVLC 時,雖然 它跟之前的標準一樣都是經過查表(VLC Table)來決定最後的壓縮碼(codeword),但是 不同的是它擁有許多 VLC 表,可以根據周圍的資訊找出最適當的表來進行轉換以增加 壓縮率。CABAC 採用的是 arithmetic coding,可以避免類似霍夫曼編碼(Huffman coding) 中每個符號都需要整數值的壓縮碼中不可避免的位元浪費,理論上 Arithmetic Coding 可以用非整數的壓縮碼來代表一個符號(Symbol)。所以 CABAC 擁有比較好的壓縮率,
根據統計大約比 CAVLC 節省 10%~15%的位元數[14]。
In-Loop Deblocking Filter
通常這種混合型的區塊補償視訊壓縮法(block-based hybrid video coding)在經過區 塊轉換和量化處理後,很容易看到畫面會有明顯區塊狀的失真(blocking artifact)。
Deblocking Filter 主要的功能便偵測這些非真正邊界(boundary)的地方,然後做一些”平 滑”的動作,藉以消除區塊狀的失真。之前的視訊壓縮標準,這個工具並不是必要的,
通常在撥放前的後處理(post processing)會包括做這個動作(Out-Loop Filter)。但是 H.264
25
將這個工具模組放進標準的壓縮迴圈中,所以又稱 In-Loop Deblocking Filter。