視頻壓縮:I幀、P幀、B幀 關鍵幀

**說明:    

        1.本文通過整理而來,集多個高手的精華,此爲最重點!!!
        2.因爲在海思平臺做多媒體視頻處理,所以瞭解I幀、P幀、B幀等壓縮-編解碼特點是必須的。
        3.海思I幀間隔即GOP取值範圍:[0, 1000],以幀爲單位,爲動態屬性。
        4.歡迎拍磚。

 ***************************************************************************************************************************************************************************************/

    視頻壓縮中,每幀代表一幅靜止的圖像。而在實際壓縮時,會採取各種算法減少數據的容量,其中IPB就是最常見的。

    簡單地說,I幀是關鍵幀,屬於幀內壓縮。就是和AVI的壓縮是一樣的。P是向前搜索的意思。B是雙向搜索。他們都是基於I幀來壓縮數據。

   I幀表示關鍵幀,你可以理解爲這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因爲包含完整畫面)

   P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)

   B幀是雙向差別幀,也就是B幀記錄的是本幀與前後幀的差別(具體比較複雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面,通過前後畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累~。

    採用的壓縮方法: 分組:把幾幀圖像分爲一組(GOP),爲防止運動變化,幀數不宜取多。

        1.定義幀:將每組內各幀圖像定義爲三種類型,即I幀、B幀和P幀;

        2.預測幀:以I幀做爲基礎幀,以I幀預測P幀,再由I幀和P幀預測B幀;

        3.數據傳輸:最後將I幀數據與預測的差值信息進行存儲和傳輸。

 

一、I幀  

    I圖像(幀)是靠儘可能去除圖像空間冗餘信息來壓縮傳輸數據量的幀內編碼圖像。

    I幀又稱爲內部畫面 (intra picture),I 幀通常是每個 GOP(MPEG 所使用的一種視頻壓縮技術)的第一個幀,經過適度地壓縮(做爲隨機訪問的參考點)可以當成圖象。在MPEG編碼的過程中部分視頻幀序列壓縮成爲I幀,部分壓縮成P幀,還有部分壓縮成B幀。I幀法是幀內壓縮法(P、B爲幀間),也稱爲“關鍵幀”壓縮法。I幀法是基於離散餘弦變換DCT(Discrete Cosine Transform)的壓縮技術,這種算法與JPEG壓縮算法類似。採用I幀壓縮可達到1/6的壓縮比而無明顯的壓縮痕跡。

    I幀特點

        1.它是一個全幀壓縮編碼幀。它將全幀圖像信息進行JPEG壓縮編碼及傳輸;

        2.解碼時僅用I幀的數據就可重構完整圖像;

        3.I幀描述了圖像背景和運動主體的詳情;

        4.I幀不需要參考其他畫面而生成;

        5.I幀是P幀和B幀的參考幀(其質量直接影響到同組中以後各幀的質量);

        6.I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;

        7.I幀不需要考慮運動矢量;

       8.I幀所佔數據的信息量比較大。

    I幀編碼流程:

        (1)進行幀內預測,決定所採用的幀內預測模式。

        (2)像素值減去預測值,得到殘差。

        (3)對殘差進行變換和量化。

        (4)變長編碼和算術編碼。

        (5)重構圖像並濾波,得到的圖像作爲其它幀的參考幀。

 

二、P幀

     P圖像(幀)是通過充分降低於圖像序列中前面已編碼幀的時間冗餘信息來壓縮傳輸數據量的編碼圖像,也叫預測幀

    在針對連續動態圖像編碼時,將連續若干幅圖像分成P,B,I三種類型,P幀由在它前面的P幀或者I幀預測而來,它比較與它前面的P幀或者I幀之間的相同信息或數據,也即考慮運動的特性進行幀間壓縮。P幀法是根據本幀與相鄰的前一幀(I幀或P幀)的不同點來壓縮本幀數據。採取P幀和I幀聯合壓縮的方法可達到更高的壓縮且無明顯的壓縮痕跡。

    P幀的預測與重構:

        P幀是以I幀爲參考幀,在I幀中找出P幀“某點”的預測值和運動矢量,取預測差值和運動矢量一起傳送。在接收端根據運動矢量從I幀中找出P幀“某點”的預測值並與差值相加以得到P幀“某點”樣值,從而可得到完整的P幀。

    P幀特點:

        ①P幀是I幀後面相隔1-2幀的編碼幀。  

        ②P幀採用運動補償的方法傳送它與前面的I或P幀的差值及運動矢量(預測誤差)。  

        ③解碼時必須將I幀中的預測值與預測誤差求和後才能重構完整的P幀圖像。  

        ④P幀屬於前向預測的幀間編碼。它只參考前面最靠近它的I幀或P幀。  

        ⑤P幀可以是其後面P幀的參考幀,也可以是其前後的B幀的參考幀。

        ⑥由於P幀是參考幀,它可能造成解碼錯誤的擴散。 

        ⑦由於是差值傳送,P幀的壓縮比較高。

 

三、B幀

    B圖像(幀)是既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列後面已編碼幀之間的時間冗餘信息來壓縮傳輸數據量的編碼圖像,也叫雙向預測幀。   

    B幀法是雙向預測的幀間壓縮算法。當把一幀壓縮成B幀時,它根據相鄰的前一幀、本幀以及後一幀數據的不同點來壓縮本幀,也即僅記錄本幀與前後幀的差值。只有採用B幀壓縮才能達到200:1的高壓縮。一般地,I幀壓縮效率最低,P幀較高,B幀最高。

    B幀的預測與重構:

        B幀以前面的I或P幀和後面的P幀爲參考幀,“找出”B幀“某點”的預測值和兩個運動矢量,並取預測差值和運動矢量傳送。接收端根據運動矢量在兩個參考幀中“找出(算出)”預測值並與差值求和,得到B幀“某點”樣值,從而可得到完整的B幀。

    B幀特點:

        1.B幀是由前面的I或P幀和後面的P幀來進行預測的;

        2.B幀傳送的是它與前面的I或P幀和後面的P幀之間的預測誤差及運動矢量;

        3.B幀是雙向預測編碼幀;

        4.B幀壓縮比最高,因爲它只反映2參考幀間運動主體的變化情況,預測比較準確;

        5.B幀不是參考幀,不會造成解碼錯誤的擴散。 

    P 幀和 B 幀編碼的基本流程爲:

        (1)進行運動估計,計算採用幀間編碼模式的率失真函數(節)值。P 幀 只參考前面的幀,B 幀可參考後面的幀。

        (2)進行幀內預測,選取率失真函數值最小的幀內模式與幀間模式比較,確定採用哪種編碼模式。

        (3)計算實際值和預測值的差值。

        (4)對殘差進行變換和量化。

        (5)若編碼,如果是幀間編碼模式,編碼運動矢量。

    注:I、B、P各幀是根據壓縮算法的需要,是人爲定義的,它們都是實實在在的物理幀,至於圖像中的哪一幀是I幀,是隨機的,一但確定了I幀,以後的各幀就嚴格按規定順序排列。 

 

四、實際應用

    從上面的解釋看,我們知道I和P的解碼算法比較簡單,資源佔用也比較少,I只要自己完成就行了,P呢,也只需要解碼器把前一個畫面緩存一下,遇到P時就使用之前緩存的畫面就好了,如果視頻流只有I和P,解碼器可以不管後面的數據,邊讀邊解碼,線性前進,大家很舒服。

    但網絡上的電影很多都採用了B幀,因爲B幀記錄的是前後幀的差別,比P幀能節約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,因爲在解碼時,不僅要用之前緩存的畫面,還要知道下一個I或者P的畫面(也就是說要預讀預解碼),而且,B幀不能簡單地丟掉,因爲B幀其實也包含了畫面信息,如果簡單丟掉,並用之前的畫面簡單重複,就會造成畫面卡(其實就是丟幀了),並且由於網絡上的電影爲了節約空間,往往使用相當多的B幀,B幀用的多,對不支持B幀的播放器就造成更大的困擾,畫面也就越卡。

    一般平均來說,I的壓縮率是7(跟JPG差不多),P是20,B可以達到50,可見使用B幀能節省大量空間,節省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。

   在如上圖中,GOP (Group of Pictures)長度爲13,S0~S7 表示 8個視點,T0~T12 爲 GOP的 13個時刻。每個 GOP包含幀數爲視點數 GOP 長度的乘積。在該圖中一個 GOP 中,包含94 個 B幀。B 幀佔一個 GOP 總幀數的 90.38%。GOP 越長,B 幀所佔比例更高,編碼的率失真性能越高。下圖測試序列 Race1 在不同 GOP 下的率失真性能對比。

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