MPEG-2 數字視頻技術參考指南 (3)—— MPEG-2視頻壓縮

轉載請註明出處: http://blog.csdn.net/zhubin215130/article/details/8931501

        壓縮一個視頻流就好比是冷凍乾燥一碗速溶湯,湯被包裝後,所有的水分都被擠出,攜帶和儲藏也變得更方便。當包裝的湯到了消費者手中後,會重新加入水來恢復湯的本來面目。通過從視頻或音頻流中提取出多餘的信息,MPEG-2能將信號流壓縮至原先大小的180分之一。當信號流到達用戶家中後,機頂盒再把原始內容“大體”恢復出來,將節目呈獻給觀衆。


        壓縮,使得廣播發送方在不增加傳輸帶寬的前提下,將可傳輸節目或服務的數量提升至原先的6至10倍。餘下的帶寬則能夠提供更多的節目、高分辨率電視(HDTV)、網絡服務、或者交互式TV。


        因爲MPEG-2壓縮算法是有損的,信號壓縮比的提高會導致信號質量的降低。從某種程度講,MPEG壓縮技術在引入人眼難以感知的畫質降低的前提下,儘可能的實現了壓縮信號質量的最大化。使用這些技術,在對圖像質量有所妥協的基礎上,能夠將信號顯著壓縮,但是壓縮率越高,越會犧牲節目的信號質量。


        MPEG-2標準在圖像質量和碼率之間提供了一個靈活的權衡,以適應質量需求和帶寬需求的範圍。MPEG-2定義了多種不同的profile和level,允許廣播發送方根據所需質量來決定壓縮率的等級,以適應其應用場景。更多與profile和level的相關內容請看後續介紹。


        視頻內容被數字化後,就可以開始壓縮了。視頻壓縮會在每一個視頻幀以及連續幀之間壓榨出相當多的冗餘,同時還使用了一些人類視覺系統的技術來描述運動。使用視頻壓縮,能夠在不造成令人無法接受的圖像質量損失的前提下,將原始數字信號中98%的部分榨取出來。


        MPEG視頻壓縮的兩個主要的類型爲時間編碼和空間編碼。通過利用人眼對某種畫面質量下降(例如動態圖像區域的噪聲)的不敏感性,空間編碼消除了每個個視頻幀中像素與像素之間的冗餘。時間編碼將視頻序列中每一幀之間的冗餘降低到最小。


  • 空間編碼

        空間編碼依賴於圖像中臨近像素集合的相似性。舉個例子,一幅以藍天爲背景的圖片,通常會包含很多行完全相同的藍色像素點。空間編碼能夠只對這些像素的一個集合進行編碼,然後聲明餘下的都是完全一樣的,因此比特流中的冗餘數據就被消滅掉了。


        空間編碼處理過程包括以下幾個步驟:

        (1)     離散餘弦變換(DCT)

        (2)     量化

        (3)     加權

        (4)     遍歷

        (5)     熵編碼


        離散餘弦變換(DCT)將圖像切分爲8X8像素的塊,再將像素強度轉換爲一個頻域值或係數的序列。由於空間冗餘的存在,很多係數都爲零或者接近零的值,則這些係數值可以從係數序列中丟棄,從而使得視頻幀可以用更少的bit位來表示。這種丟棄是會損失一些細節,但丟棄的細節很小,小到人眼幾乎無法感覺到。


儘管如此,當有時需要用更少的bit位來表示係數組的時候,則需要對數字視頻流的畫面精度作出妥協,產生更明顯的圖像質量下降。


做完離散餘弦變換後,視頻幀會被量化,這意味着係數組會按照視覺重要性重新排序。量化後,加權將會在更細節或更復雜的圖像區域降低質量,引入噪聲,因爲在這些區域人眼的視覺靈敏度會降低,而對於圖像變換小的區域,人眼對噪聲的引入會非常敏感。然後,遍歷離散餘弦變換系數組,首先發送最重要的係數,然後是不太重要的,最後聲明餘下的係數都是零值。


空間編碼的最後一步叫做熵編碼,將根據每個係數出現的次數調整其大小。經常重複出現的係數被用最少數量的bit來表示,從而極大降低了傳輸係數組所需的總帶寬。


  • 時間編碼

        時間編碼消除了視頻流中連續幀之間的冗餘,比如,一部從鳥瞰視角拍攝的足球比賽視頻中,運動員總是活動的,但背景畫面——球場本身是靜止的。時間編碼利用了連續幀的相似性,只對幀之間不同的地方進行編碼。這是通過兩種時間編碼方式實現:幀間預測和運動預測。


        1. 幀間預測

        幀間預測利用連續幀的相似,週期性的插入完整的參考值,並使用該幀來預測前向的和後向的其他幀。參考幀成爲幀內編碼幀,或者I幀。I幀被用作P幀和B幀的參照物。


        預測幀——P幀,參考自前一個I幀或者P幀,這表明在傳輸P幀時,編碼器只需要傳輸該幀係數組與前一個I幀或P幀的不同點即可,而不需要傳輸全部DCT係數組。在解碼器端,通過前一個I幀和P幀作爲參照並添加不同點,即可恢復P幀。雙向預測幀——B幀,以前向和後向相鄰的I幀或P幀爲參考。通常P幀只需要I幀數據量的50%,而B幀僅需要I幀數據量的25%。



        當然,如果只用一個I幀作爲基準來創建視頻流裏所有的其他幀的話,將會使視頻流極易出錯,因爲一個I幀中的錯誤將會蔓延至整個視頻流。因爲這個原因,幀流被分成了若干個GOP(Groupsof Pictures),一般長度是12到15幀。每個GOP從一個I幀開始,當一個I幀出錯時能夠快速恢復。GOP也包含P幀和B幀,下圖爲一個GOP的例子。


        2. 運動預測

        
        雖然屏幕上的物體可能會改變位置,但他們的形態卻通常是不變的。運動預測利用了這個相似性,測量物體的運動並將相應的運動矢量傳給瞭解碼器。解碼器利用該矢量,在下一幀中將指定的圖像從前一幀的位置移到新的位置。因此運動物體只需要編碼一次,再在後續幀中作必要的移動即可。


        一般來說,運動會在多個幀間持續,所以傳輸矢量變化可以獲得更高的壓縮比。舉個例子,如果物體的速度是恆定的,則運動矢量不會變化;只有不等於零的矢量纔會被傳輸。

 

        3. Profile和Level


        爲了向廣播商提供編碼複雜度和圖像尺寸方面的靈活性,MPEG-2標準定義了一些不同的壓縮選擇——profile和level。Profile指定了編碼複雜度,level指定了每幀的像素數目。下圖列出了MPEG-2定義的各種profile和level,以及每種組合的最大碼率。


        在當今的廣播環境中,最廣泛使用的組合是MainProfile at Main Level, 以及MainProfile at High Level。關於Profile和Level的更多信息,請參考MPEG-2specification。


        4. 壓縮視頻流的解碼


        MPEG-2視頻流的解碼過程就是反向的執行編碼過程的步驟。反轉DCT過程會根據編碼器的精度恢復頻域係數。然後解碼器會用I幀和P幀中的宏塊,來代替那些在編碼過程中從P幀和B幀中丟棄的冗餘宏塊。運動矢量定義了這些預測幀中的宏塊的具體位置。

        就像前面所述,幀間預測需要將幀不按存儲順序發送給解碼器,並臨時保存在buffer中。例如,爲了讓解碼器重建B幀,必須首先保證該B幀的前一幀和後一幀對解碼器可用。下圖表示,在最終顯示給用戶之前,需要按照上面的序列順序解碼。

 

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