close

工研院網站, 對我這個新手來說, 寫得蠻容易懂的, 而且蠻清楚:

http://www.tvro.com.tw/main5/maimtxt/H.264%E5%A0%B1%E5%B0%8E%EF%BC%8D%E5%B7%A5%E7%A0%94%E9%99%A2.htm

PTT找到的, 也很不錯:

http://www.ptt.cc/bbs/C_and_CPP/M.1332759347.A.4D0.html

視訊壓縮圖像類型(維基百科):

http://zh.wikipedia.org/wiki/%E8%A6%96%E8%A8%8A%E5%A3%93%E7%B8%AE%E5%9C%96%E5%83%8F%E9%A1%9E%E5%9E%8B

 

============== 以下內容取自於 H.264先進視訊編解碼標準 ==============

 

H.264先進視訊編解碼標準

(本文取自數位視訊月刊,原文刊載在:http://www.dvo.org.tw/publication/20050403.html)

郭其昌/工研院電通所

1. 前言

在2001年12月,ITU-T VCEG與ISO MPEG共同組成聯合視訊小組(Joint Video Term,JVT)來研訂新的視訊壓縮格式,此新格式在ITU-T組織中稱為H.264,在ISO組織中則納入MPEG-4 Part-10 (ISO/IEC 14496-10)並命名為Advanced Video Coding (AVC),通常合併稱為H.264/AVC [1],其國際標準的第一版於2003年公佈,而增修的第二版也於2005年3月定案。相關研究顯示H.264/AVC與MPEG-2及MPEG-4相較之下,無論是壓縮率或視訊品質皆有大幅的提升[2],而且H.264/AVC也首次將視訊編碼層(Video Coding Layer,VCL)與網路提取層(Network Abstraction Layer,NAL)的概念涵蓋進來,以往視訊標準著重的是壓縮效能部分,而H.264/AVC包含一個內建的NAL網路協定適應層,藉由NAL來提供網路的狀態,可以讓VCL有更好的編解碼彈性與糾錯能力,使得H.264/AVC非常適用於多媒體串流(multimedia streaming)及行動電視(mobile TV)的相關應用。在第一版的標準規範中,H.264/AVC根據使用的編碼工具種類來提供三種編碼規模(Profile),如表1所示分別為Baseline Profile、Main Profile、Extension Profile,而相對應的影片尺寸與位元率等級由Level 1至Level 5.1,涵蓋小畫面與高解析度畫面的應用範圍。Baseline Profile主要是著眼於低位元率的應用(例如:影像通訊),而且其運算複雜度低,所以也適合應用於個人隨身的多媒體撥放機;Main Profile因為有支援交錯式影片(interlaced content)的編碼,所以適合應用於HDTV數位電視廣播,而且非常容易整合在傳統的MPEG-2 Transport/Program Stream上來傳送H.264/AVC位元流;對於IP-TV或是MOD (Multimedia On Demand)等應用,使用包含高抗錯性編碼工具(error resilient tools)的Extension Profile即可以滿足這些需求。然而,微軟公司在2003年將其視訊壓縮技術向美國的電影電視工程師協會(Society of Motion Picture and Television Engineers,SMPTE)提出公開標準化的申請,並以VC-1 (Video Codec 1)為此新標準的命名[3],由於VC-1在高解析度影片上的表現出色,導致H.264/AVC在DVD Forum與Blu-ray Disc Association的高解析度DVD影片測試中敗陣下來,其主要原因是H.264/AVC使用較小尺寸的轉換公式與無法調整的量化矩陣,造成不能完整保留影像的高頻細節資訊,因此H.264/AVC於2004年展開標準增修的討論,來納入稱之為Fidelity Range Extensions (FRExt) [4]的新編碼工具,並以先前Main Profile為基礎來擴充增加4個新的等級(Table 1),期望能夠在高解析度影片的應用上扳回劣勢,目前增修的H.264/AVC第二版標準已於2005年3月發表。本文後段將探討網路提取層的相關特性,接著來說明視訊編碼層的原理,最後並討論H.264/AVC的應用現況。

2. 網路提取層 (Network Abstraction Layer,NAL)

H.264/AVC標準的特色是將網路提取層的概念涵蓋進來,亦即以NAL封包為單位的方式來做為VCL編解碼的運算單位,這樣傳輸層拿到NAL封包之後不需要再進行切割,只需附加該傳輸協定的檔頭資訊(adding header only)就可以交由底層傳送出去,如圖1所示,可以將NAL當成是一個專作封裝(packaging)的模組,用來將VCL壓縮過的bitstream封裝成適當大小的封包單位(NAL-unit),並在NAL-unit Header中的NAL-unit Type欄位記載此封包的型式,每種型式分別對應到VCL中不同的編解碼工具。NAL另外一個重要的功能為當網路發生壅塞而導致封包錯誤或接收次序錯亂(out-of-order)的狀況時,傳輸層協定會在Reference Flag作設定的動作,接收端的VCL在收到這種NAL封包時,就知道要進行所謂的糾錯運算(error concealment),在解壓縮的同時也會嘗試將錯誤修正回來。如圖2所示,一個完整的H.264/AVC bitstream是由多個NAL-units所組成的,所以此bitstream也稱之為NAL unit stream,一個NAL unit stream內可以包含多個壓縮視訊序列(coded video sequence),一個單獨的壓縮視訊序列代表一部視訊影片,而壓縮視訊序列又是由多個access units所組成,當接收端收到一個access unit後,可以完整地解碼成單張的畫面,而每個壓縮視訊序列的第一個access unit必須為Instantaneous Decoding Refresh (IDR) access unit,IDR access unit的內容全是採用intra-prediction編碼,所以自己本身即可完全解碼,不用參考其他access unit的資料。access unit亦是由多個NAL-units所組成,標準中總共規範12種的NAL-unit型式,這些可以進一步分類成VCL NAL-unit及non-VCL NAL-unit,所謂的VCL NAL-unit純粹是壓縮影像的內容,而所謂的non-VCL NAL-unit則有兩種:Parameter Sets與Supplemental Enhancement Information (SEI),SEI可以存放影片簡介、版權宣告、使用者自行定義的資料…等;Parameter Sets主要是描述整個壓縮視訊序列的參數,例如:長寬比例、影像顯現的時間點(timestamp)、相關解碼所需的參數…等,這些資訊非常重要,萬一在傳送的過程中發生錯誤,會導致整段影片無法解碼,以往像MPEG-2/-4都把這些資訊放在一般的packet header,所以很容易隨著packet loss而消失,現在H.264/AVC將這些資訊獨立出來成為特殊的parameter set,可以採用所謂的out-of-band的方式來傳送,以便將out-of-band channel用最高層級的通道編碼(channel coding)保護機制,來保證傳輸的正確性。

(上圖找自網路 http://vaplab.ee.ncu.edu.tw/chinese/pcchang/course2006b/comsp/network/2.htm , 較清晰)

3. 視訊編碼層 (Video Coding Layer,VCL)

視訊壓縮的原理是利用影像在時間與空間上存有相似性,這些相似的資料經過壓縮演算法處理之後,可以將人眼無法感知的部分抽離出來,這些稱為視覺冗餘(visual redundancy)的部分在去除之後,就可以達到視訊壓縮的目的。如圖1所示,H.264/AVC的視訊編碼機制是以圖塊(block-based)為基礎單元,也就是說先將整張影像分割成許多矩形的小區域,稱之為巨圖塊(macroblock,MB),再將這些巨圖塊進行編碼,先使用畫面內預測(intra-prediction)與畫面間預測(inter-prediction)技術,以去除影像之間的相似性來得到所謂的差餘影像(residual),再將差餘影像施以空間轉換(transform)與量化(quantize)來去除視覺冗餘,最後視訊編碼層會輸出編碼過的位元流(bitstream),之後再包裝成網路提取層的單元封包(NAL-unit),經由網路傳送到遠端或儲存在儲存媒體中。H.264/AVC允許視訊影片以frame或是以filed的方式來進行編碼,兩者可以共存,而frame可以是progress(逐行)或是interlace(格行)形式,對同一段影片來說也可使用兩者來混合編碼,這個特性與MPEG-2相同。而在影像色彩格式的支援上,H.264/AVC第一版的標準只支援YCrCb 4:2:0取樣的方式,而在增修的第二版標準中增加4:2:2與4:4:4取樣格式,通常這些格式會被數位電影或HDTV影片所採用。

畫格(frame)或區域(field)。畫格是某一瞬間所截取下的影像,而區域是影像每一行線的集合。

 

3.1 H.264/AVC影像格式階層架構
H.264/AVC的階層架構由小到大依序是sub-block、block、macroblock、slice、slice group、frame/field-picture、sequence。對一個採用4:2:0取樣的MB而言,它是由16x16點的Luma與相對應的2個8x8點Chroma來組成,而在H.264/AVC的規範中,MB可再分割成多個16x8、8x16、8x8、8x4、4x8、4x4格式的sub-blocks。所謂的slice是許多MB的集合,而一張影像是由許多slice所組成(圖3),slice為H.264/AVC格式中的最小可解碼單位(self-decodable unit),也就是說一個slice單靠本身的壓縮資料就能解碼,而不必依靠其他slice,這樣的好處是當傳送到遠端時,每接收完一筆slice的壓縮資料就能馬上解碼,不用等待整張的資料接收完後才能開始,而且萬一傳送的過程中發生資料遺失或錯誤,也只是影響該筆slice,不會對其他slice有所影響,但跟MPEG-2的slice不同處在於它允許slice的範圍可以超過一行MB,也就是說H.264/AVC允許整張影像只由單一個slice組成。H.264/AVC的slice架構還有一項特性稱為Flexible Macroblock Ordering (FMO),也就是說組成slice的MB可以不必侷限於循序掃描(raster scan)的排列方式,例如:圖3最右側的排法就非常適用於多個前景(foreground) slice groups與一個獨自的背景(background) slice group,好處是對不同的slice group可以用不同品質的壓縮參數,例如:對於前景物件通常是人眼較感興趣的區域,可以用較小的壓縮率來維持較好的品質。

3.2 Slice的編碼模式
H.264/AVC的slice依照編碼的類型可以分成下列種類:(1) I-slice: slice的全部MB都採用intra-prediction(使用同一張影格之中相鄰像素的信做預測)的方式來編碼;(2) P-slice: slice中的MB使用intra-prediction和inter-prediction(使用先前影格的信號做預測)的方式來編碼,但每一個inter-prediction block最多只能使用一個移動向量;(3) B-slice: 與P-slice類似,但每一個inter-prediction block可以使用二個移動向量。比較特別的是B-slice的‘B’是指Bi-predictive,與MPEG-2/-4 B-frame的Bi-directional概念有很大的不同,MPEG-2/-4 B-frame被限定只能由前一張和後一張的I(或P)-frame來做inter- prediction,但是H.264/AVC B-slice除了可由前一張和後一張影像的I(或P、B)-slice外,也能從前二張不同影像的I(或P、B)-slice來做inter- prediction,而H.264/AVC另外增加兩種特殊slice類型:(1) SP-slice: 即所謂的Switching P slice,為P-slice的一種特殊類型,用來串接兩個不同bitrate的bitstream;(2) SI-slice: 即所謂的Switching I slice,為I-slice的一種特殊類型,除了用來串接兩個不同content的bitstream外,也可用來執行隨機存取(random access)來達到網路VCR的功能。這兩種特殊的slice主要是考量當進行Video-On-Demand streaming的應用時,對同一個視訊內容的影片來說,server會預先存放不同bitrate的壓縮影片,而當頻寬改變時,server就會送出適合當時頻寬位元率的影片,傳統的做法是需要等到適當的時間點來傳送新的I-slice (容量較P-slice大上許多),但因為頻寬變小導致需要較多的時間來傳送I-slice,如此會讓client端的影像有所延遲,為了讓相同content但不同bitrate的bitstream可以較平順地串接,使用SP-slice會很容易來達成(圖4),不僅可以直接送出新的bitstream,也因為傳送的P-slice的容量較小,所以不會有時間延遲的情形出現。當client端的使用者要切換到新的接收頻道(channel)時,因為與目前傳送的bitstream不但內容不同連位元率也不同,傳統的做法需讓client重新緩衝(buffering)一段新頻道的內容(圖5),此時是為了要接收新頻道bitstream的I-slice,然後再開始傳送新頻道bitstream後續的P-slice,如此client也會發生延遲接收的現象,而且當client要進行所謂的快轉、倒轉、隨機存取(random access)的動作時,傳統的做法無法達到即時的反應,H.264/AVC利用SI-slice就可以輕易地達到目的。


3.3畫面內預測技術(Intra-frame Prediction)
以往的壓縮標準在進行intra-prediction時,多半只是將轉換係數做差值編碼,而H.264/AVC在空間領域(spatial domain)來進行像點之間的預測,而不是用轉換過的係數,它提供兩種intra-prediction的型式:intra_4x4及intra_16x16,所謂的intra_4x4是以Luma 4x4 sub-block為單位,找出它的參考對象(predictor)後,再將其與參考對象相減後所產生的差餘影像(residual)送入轉換演算法,而尋找參考對象的模式共有9種預測的方向(圖6),以mode 0 (vertical)為例,{a,e,i,m}、{b,f,j,n}、{c,g,k,o}、{d,h,l,p}的參考對象分別為A、B、C、D;Luma intra_16x16與Chroma的模式跟Luma intra_4x4類似,詳細的運算公式可以參考[1]。

3.4畫面間預測技術(Inter-frame Prediction)
至於橫跨每張畫面之間的預測技術,H.264/AVC提供了更豐富的編碼模式,計有下述幾種區塊分割(partition)的方法:16x16、16x8、8x16、8x8、8x4、4x8、4x4,多樣的分割方式可以讓移動向量的預測更準確,如圖7所示,畫面中有些移動的區域並不是正方形,使用長方形或較小的4x4分割來做預測的區域,可以大幅降低差餘影像的數值來增加了壓縮比,但也因此P-slice中的MB最多可有16個移動向量(motion vector),而B-slice中的MB最多可擁有32個移動向量,雖然這些會增加移動向量檔頭(header)的容量,但整體來說對壓縮比仍有正面的益處。再者,以往的壓縮標準所使用的動態估測(motion estimation),只有使用前一張圖像來作為預測的對象,H.264/AVC提供了多重參考圖像(multiple reference frames)的概念,使得移動向量不再只限於前後相鄰的影像,而是可以跨過多張影像,如圖8所示,在時間點t的圖塊,可以使用t-1到t-2圖像中的圖塊來作為預測的對象,當影片有週期重複性的內容時,例如:背景影像週期性的出現或被遮蓋、物件有來回跳動的行為、形狀忽大忽小,或是攝影機在拍攝時,因為有多處的取景點,並且攝影畫面在取景點之間來回移動,這種情形在球類比賽轉播時常出現,這些狀況都能得到較好的動態預測結果,因而提高了壓縮的效能。


3.5 轉換、量化與熵編碼演算法 (Transform, Quantization, and Entropy Coding)
H.264/AVC的轉換演算法採用所謂的4x4與8x8整數轉換,跟MPEG-2/-4的8x8 DCT (Discrete Cosine Transform)有很大的不同,因為是整數運算的緣故,不像小數運算的DCT有係數還原後無法匹配的問題,而且以4x4的區塊大小來進行轉換也可減低區塊效應的程度。在量化技術方面,H.264/AVC只使用加法與乘法而沒有除法運算,有利於積體電路的實現。跟以往MPEG-2/-4的熵編碼技術(entropy coding)不同的是,H.264/AVC針對量化過的轉換係數與非轉換係數資料(檔頭資料、移動向量…等),分別使用二個不同的編碼法則。非轉換係數資料使用單一個的編碼表,好處是可以節省編碼表所佔用的記憶體空間;針對量化過的轉換係數資料來說,不像MPEG-2/-4對每種影像都使用固定的編碼表,H.264/AVC使用所謂的內容適應性編碼技術(context-adaptive),也就是會根據編碼的內容來統計某些代碼(code-word)的出現機率,而產生一個最適合於目前影像的編碼表,好處是能夠提高壓縮比,但要使用額外的頻寬來傳送這些編碼表。H.264/AVC內容適應性編碼技術有兩種:Context Adaptive Variable Length Coding (CAVLC)以及Context Adaptive Arithmetic Binary Coding (CABAC),CAVLC的基本原理跟MPEG-2/-4的VLC相同,而CABAC的複雜度比CAVLC高,但卻可以提供較高的壓縮比,尤其是用在壓縮交錯式的數位電視影片。

3.6 內嵌式去區塊效應濾波器(In-Loop De-blocking Filter)
先前有提到H.264/AVC也是一種block-based的壓縮方法,所以會有區塊效應(blocking-effect)的現象,雖然它採用4x4轉換可以稍減區塊效應的程度,但是在影像較平滑的區域,仍需依靠去區塊效應濾波器來做影像品質的修補。通常去區塊效應濾波器分成兩種:post filter及in-loop filter,所謂post filter就是在解碼的流程之後再進行的,而不在解壓縮標準的規範中,好處是廠商可以依應用的複雜度,有彈性地決定濾波器的實現方式,而所謂的in-loop filter就是直接規範在編解碼的流程中,雖然會增加複雜度,但由於經過濾波器處理後的影像品質較好,若以此作為畫面間預測的參考圖像,其預測精確度會大幅的提升,因而增加了壓縮比。

4. 結論 
由於H.264/AVC在視訊編碼演算法上的改進,其壓縮比及視訊品質與MPEG-2/-4相較下有大幅度的提昇,而其NAL概念有助於在有限頻寬的傳輸通道上來傳送高品質的視訊內容,此外,對於高畫質數位電視或高畫質DVD,以H.264/AVC的編碼技術都可以很輕易地滿足應用需求,但就市場面來看,VC-1標準憑藉著微軟在PC平台的優勢與低價授權的策略,今後將成為H.264/AVC最強大的挑戰者。

# 計畫相關資訊
本文為工研院電通所執行經濟部補助科專計畫「多媒體數位視訊技術發展」成果之一。

# 參考文獻
[1] “Draft ITU-T recommendation and final draft international standard of joint video specification (ITU-T Rec. H.264/ISO/IEC 14 496-10 AVC,” in Joint Video Team (JVT) of ISO/IEC MPEG and ITU-T VCEG, JVTG050, 2003. 
[2] “Special Issue on the H.264/AVC Video Coding Standard,” IEEE Trans. Circuits Syst. Video Tech., vol. 13, July 2003.
[3] “Proposed SMPTE Standard for Television: VC-9 Compressed Video Bitstream Format and Decoding Process,” 2004-03-31.
[4] G.J. Sullivan, P. Topiwala, and A. Luthra, “The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions,” SPIE Conference on Applications of Digital Image Processing, Aug. 2004.

arrow
arrow
    文章標籤
    H.264 linux
    全站熱搜
    創作者介紹
    創作者 lynn770707 的頭像
    lynn770707

    雜記

    lynn770707 發表在 痞客邦 留言(0) 人氣()