MPEG2編碼的概述
一個簡單的MPEG-2 Non-scalable視訊編解碼器(Codec),MPEG-2視訊編碼器(Encoder)包含Inter Frame/Field離散餘弦變換(Discrete cosine Transform,DCT)編碼器、Frame/Field動態估計及補償器(Motion Estimator and Compensator)、以及可變長度編碼器(Variable Length Encoder,VLE)。離散餘弦變換編碼器主要是利用空間上的冗餘(Spatial Redundancies),而動態估計及補償器則是利用時間上的冗餘(Temporal Redundancies)來壓縮資料;最後資料經過可變長度編碼器編碼後送至MPEG-2的系統多工器(System Multiplexer,SysMux),再由Transport或Program Stream將資料送出。
所謂的壓縮,就是找出冗餘內容,再從資料流中除去的技術。如之前所提,MPEG-2的視訊主要是就是利用空間上及時間上冗餘資訊的消除來達到壓縮的效果。圖4及圖5為典型的MPEG-2編解碼器,以下我們將針對其中重要的壓縮技巧做解說。
MPEG2編碼的壓縮技巧
1. 空間上的冗餘去除
視訊資料的一個特性是空間冗餘。一般來說,在同一張畫面上必有一些共通特性,也許是色彩上的,也許是幾何上的,或是其它特徵值得到的。所謂的空間冗餘去除,就是要識別出畫面中重要的元素,並移除重複且較無影響的元素的動作。
a. 色彩取樣
跟據實驗,人眼對於亮度變化較敏感而對於色度的變化相對的較不易查覺。依此實驗,MPEG-2採用亮度色度的色彩表示格式,Y表示亮度值(Luminance),Cr及Cb表示色度值(Chrominance),並且從降低色度取樣來減少訊號量。MPEG-2中定義了4:2:0、4:2:2及4:4:4採樣格式。4:2:0表示四個Y取一個Cr一個Cb;4:2:2表示四個Y取兩個Cr兩個Cb;而4:4:4表示四個Y取四個Cr四個Cb,即不做任何的采度取樣減少。減少色度採樣可以在儘量降低對視覺的影響下達到較大的資料縮減效果。
b.離散餘弦變換
離散餘弦變換是一個無損的,可逆的數學計算。在用於視訊壓縮時,它把空間亮度採樣和相應的色度採樣強度資料轉化為空間頻率資料。在MPEG-2的視訊壓縮中,找出存在於視訊中的每張畫面里的空間冗餘,就是以將圖切成8x8的區塊(Block)後做離散餘弦變換來完成的。區塊的色彩值轉換後的離散餘弦變換係數依然是一個8x8的矩陣,左上角的係數稱為DC係數,其餘稱為AC係數。DC係數往下代表著逐漸增高的垂直空間頻率係數,往右代表看逐漸增高的水平空間頻率係數,其他係數則代表垂直水平空間頻率的不同組合。由於圖像的自然屬性,一個畫面中通常不會有很密集且大的波動,因此離散餘弦變換經常使代表較高空間頻率的離散餘弦變換係數的值很小,甚至為零。基本上,離散餘弦變換並不能減少數據量,但是卻可以將資料轉成較易找尋冗餘的表達型式。
c. 量化
除了在4:2:2或4:2:0的色彩採樣過程中丟失了有限數量的資訊以外,MPEG-2的壓縮能力來自對離散餘弦變換係數靈活的量化過程。簡單地講,量化(Quantization)就是減少描述各係數的位元數的過程,亦即將各係數以較粗糙的度量單位描述之。量化的動作主要有兩個功能:一是讓原已很接近零的值儘量變成零,另外則是使得原來非零的係數分布範圍變小,有助於壓縮。量化是一種破壞性壓縮技巧,量化後的資料再還原時與原來的資料不會全然相同,因此視訊壓縮後失真的程度,主要便取決於量化位階(Quantization Scale)的選取。由於人視覺上的特性,高空間頻率的訊號往往不易察覺其變化,因此用較大的位階表示甚至忽略之,對人眼來說亦不會造成多大的差異。
2. 時間上的冗餘去除
視訊資料的另一個特性是時間上的冗餘。一般播放的視訊,其實只是一連串連續的圖像序列,然而因為人類視覺的視覺暫留現象,所以會有連貫影像的錯覺。而此種視訊因為畫面間時間間隔甚小,因此相臨的畫面幾無差異,大多只是圖像內容的位置變化。因為有此現象產生,所以我們可以利用除去在時間軸上畫面與畫面的相似性造成的冗餘來進行壓縮。
a.動態補償
動態補償(Motion Compensation,MC)便是基於上述概念所發展出來的一種視訊壓縮技巧。在做動態補償之前,首先將畫面分為16x16的大區塊(Macro-block,MB),然後找尋其在參考畫面(Reference Picture)中近似的大區塊所在位置,並將由目標大區塊到參考大區塊間位置的座標差記錄成動態向量(Motion Vector)。參考畫面在該畫面之前,稱為向前預測(Forward Prediction);參考畫面在該畫面之後,稱為向後預測(Backward Prediction);而參考畫面在該畫面前後都有,稱為雙向預測(Bi-directionally Prediction)。而整個找尋動態向量的過程稱為動態估計(Motion Estimation),常見的有區塊匹配法(Block Match Method)及遞迴法(Recursive Method)。
另外,因為預測可能不是最佳匹配且目標大區塊與參考大區塊間不一定完全一致,因此還要計算目標大區塊與參考大區塊間畫面訊號的差值,稱為預測誤差(Prediction Error),用以在解碼時做補償之用。最後預測誤差再以空間的冗餘去除的壓縮法處理之。
b. 畫面壓縮
要探討如何壓縮MPEG-2的視訊之前,首先來看看MPEG-2的視訊資料結構,由下而上依序為:
1. 區塊(Block):包含量化後的畫面資料,由8x8的像素所組成,是離散餘弦轉換的最小單位。
2. 大區塊(Macroblock):為一個16 x 16的大區塊,是色彩取樣、動態估計及動態補償的基本單位。
3. 片段(Slice):由數個大區塊(Macro-block)所組成,主要將每張畫面作水平且固定單位的切割。片 段以上的各種結構都有訊號同步及錯誤控制能力。
4. 畫面(Picture):由數個片段(Slice)所組成,為最主要的編碼單位,主要有三種影像編碼的型態 I、P、B,稍後會有詳細敘述。
5. 畫面群組(Group of Pictures,GOP):由一張 I 畫面及數張 P 及 B 畫面所組成。在MPEG-2中,畫面群組的總長及P畫面張數是可以動態調整的。
6. 視訊序列(Video Sequence):由數個畫面或畫面群組所組成,然而一部影片可以只由一個視訊序列組成,也可以由數個視訊序列所組成。
MPEG-2定義了三種畫面壓縮模式,I畫面、P畫面、B畫面:
I畫面(Intra Coded Pictures):
當大區塊僅使用本身的畫面資料進行空間的冗餘去除,並沒有參考其他畫面的資料,我們稱為Intra模式大區塊(Intra Mode Macro-block)。在I畫面中,所有的大區塊皆為Intra模式大區塊。I畫面可以做為視訊資料流中的索引點,也是提供隨機存取能力的主要來源。I畫面通常在視訊序列或畫面群組的第一張,解碼時I畫面可獨立解碼,並做為P及B畫面的參考影像的來源。由於不須參考其他畫面,因此無法得到消除時間上冗餘的好處,因此壓縮率較差。
P畫面(Predictive Coded Pictures):
在編碼及解碼時,會使用參考畫面(Reference Picture),這些參考畫面可為該畫面前面最近的I畫面或P畫面。編碼時,在P畫面中的大區塊,若能在參考畫面上找到相對應的大區塊,則用動態補償方式做預測編碼(Predictive Coding);若找不到,則以Intra模式做編碼。由於加入消除時間上冗餘的技術,因此其編碼效率較高。
B畫面(Bi-directionally Predicted Pictures):
在解碼及編碼時,會使用到前面及後面兩個方向參考畫面的資料。如同 P 畫面一樣,編碼時,在B畫面中的大區塊,若能在參考畫面上找到相對應的大區塊,則用動態補償方式做雙向預測編碼(Bi-directionally Predictive Coding);若找不到,則以Intra模式做編碼。B畫面擁有最高的編碼效率,然畫質最差,故本身不再做為其他預測編碼用。
3.以資料本身冗餘為基礎的壓縮
MPEG-2在以視訊的特性做了空間及時間上的冗餘壓縮後,還會再以資料本身的冗餘再做壓縮。在量化完成後,MPEG-2捨棄了MPEG-1所採用的Zigzag Scan而改採Alternate Scan來將量化後二維的離散餘弦係數串接成一維的數列,以鋸齒狀路線處理8x8的塊中的64個係數,儘量形成最大長度的連續零值,以提高壓縮效率。接著將串接起來的資料以遊程編碼(Run Length Coding,RLC)及可變長度編碼(Variable Length Coding,VLC)處理。
遊程編碼的概念就是,如果有一連串相同的值,則我們可以以標示該值及其持續長度來表示。例如有十個"A"構成一個字串,則我們可以將"AAAAAAAAAA"之描述成"A" x 10,這樣就可以減少許多相同的資料存放空間。
可變長度編碼基本概念則是:越常出現的樣版,就以越短的位元數來表示之。因此可變長度編碼是這樣一個過程,找出資料中所有的資料樣版及其出現頻率,接著以較少的位元來描述較常出現的樣版,用較多的位元描述不常出現的樣版。Huffman Coding就是其中一種基本的演算法。基本上遊程編碼及可變長度編碼都是非破壞性壓縮。
4.可變位元率
最後要提到MPEG-2不同於MPEG-1的其中一樣很大的差異,就是MPEG-2除了固定位元率(Constant BIT RATE,CBR)之外,另外提供了可變位元率(Variable Bit Rate)來調節資料速率。位元率的控制往往決定了離散餘弦係數量化的的結果。視訊的資料經過壓縮後並非皆有相同的資料流量。一般說來,畫面變動越大,壓縮比越小,資料流頻寬需求越大;反之,畫面變動越小,壓縮比越大,資料流頻寬需求就越小。各畫面間壓縮後的值並不是固定的,固定的資料速率只是個理想,實際狀況下一昧的要求固定位元率不是犧牲了影像品質(以較低流量畫面為基準,較大流量的畫面強制做過多的壓縮)就是犧牲了容量(以較大流量畫面為基準,較低流量的畫面強制做過低的壓縮)。一般說來,可變位元率對於提供穩定的影像品質是個更好的選擇,因為其能夠根據動態畫面的複雜程度,適時改變數據傳輸率獲得最適且一致的編碼效果。