視頻編解碼 基本概念:GOP


前言

產品開發要求添加視頻剪輯功能,翻閱有關的文檔,查到了GOP(group of pictures)這個概念。

解析

GOP說白了就是兩個I幀之間的間隔.比較說GOP為120,如果是720p60的話,那就是2s一次I幀.

​ 在視頻編碼序列中,主要有三種編碼幀:I幀、P幀、B幀。

​ ● I幀即Intra-coded picture(幀內編碼圖像幀),不參考其他圖像幀,只利用本幀的信息進行編碼
​ ● P幀即Predictive-codedPicture(預測編碼圖像幀),利用之前的I幀或P幀,采用運動預測的方式進行幀間預測編碼
​ ● B幀即Bidirectionallypredicted picture(雙向預測編碼圖像幀),提供最高的壓縮比,它既需要之前的圖
像幀(I幀或P幀),也需要后來的圖像幀(P幀),采用運動預測的方式進行幀間雙向預測編碼

  在視頻編碼序列中,GOP即Group of picture(圖像組),指兩個I幀之間的距離,Reference(參考周期)指兩個P幀之間的距離(如下圖3.1)。一個I幀所占用的字節數大於一個P幀,一個P幀所占用的字節數大於一個B幀(如下圖3.1所示)。

img

I、P、B幀示意圖

  所以在碼率不變的前提下,GOP值越大,P、B幀的數量會越多,平均每個I、P、B幀所占用的字節數就越多,也就更容易獲取較好的圖像質量;Reference越大,B幀的數量越多,同理也更容易獲得較好的圖像質量。

  需要說明的是,通過提高GOP值來提高圖像質量是有限度的,在遇到場景切換的情況時,H.264編碼器會自動強制插入一個I幀,此時實際的GOP值被縮短了。另一方面,在一個GOP中,P、B幀是由I幀預測得到的,當I幀的圖像質量比較差時,會影響到一個GOP中后續P、B幀的圖像質量,直到下一個GOP開始才有可能得以恢復,所以GOP值也不宜設置過大。

  同時,由於P、B幀的復雜度大於I幀,所以過多的P、B幀會影響編碼效率,使編碼效率降低。另外,過長的GOP還會影響Seek操作的響應速度,由於P、B幀是由前面的I或P幀預測得到的,所以Seek操作需要直接定位,解碼某一個P或B幀時,需要先解碼得到本GOP內的I幀及之前的N個預測幀才可以,GOP值越長,需要解碼的預測幀就越多,seek響應的時間也越長。

H.264中的I幀,B幀和P幀
在H264中的圖像以序列為單位進行組織,一個序列是一段圖像編碼后的數據流,以I幀開始,到下一個I幀結束。
IDR圖像:一個序列的第一個圖像叫做IDR圖像(立即刷新圖像),IDR 圖像都是I幀圖像。H.264引入IDR圖像是為了解碼的重同步,當解碼器解碼到IDR圖像時,立即將參考幀隊列清空,將已解碼的數據全部輸出或拋棄,重新查找參數集,開始一個新的序列。這樣,如果前一個序列出現重大錯誤,在這里獲得重新同步的機會。IDR圖像之后的圖像永遠不會使用IDR之前的圖像數據來解碼。
一個序列就是一段內容差別不是很大的圖像編碼后生成的一串數據流。當運動變化比較少的時候,一個序列可以很長,因為運動變化的少就代表圖像畫面的內容變動很小,所以就可以編一個I幀,然后一直P幀、B幀了。當運動變化多時,可能一個序列就比較短了,比如就包含一個I幀和3、4個P幀。

三種幀的說明
1、I幀
I幀:幀內編碼幀 ,I幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因為包含完整畫面)
I幀特點:

  • 1)它是一個全幀壓縮編碼幀。它將全幀圖像信息進行JPEG壓縮編碼及傳輸;
  • 2)解碼時僅用I幀的數據就可重構完整圖像;
  • 3)I幀描述了圖像背景和運動主體的詳情;
  • 4)I幀不需要參考其他畫面而生成;
  • 5)I幀是P幀和B幀的參考幀(其質量直接影響到同組中以后各幀的質量);
  • 6)I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;
  • 7)I幀不需要考慮運動矢量;
  • 8)I幀所占數據的信息量比較大。

2、P幀
P幀:前向預測編碼幀。P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)
P幀的預測與重構:P幀是以I幀為參考幀,在I幀中找出P幀“某點”的預測值和運動矢量,取預測差值和運動矢量一起傳送。在接收端根據運動矢量從I幀中找出P幀“某點”的預測值並與差值相加以得到P幀“某點”樣值,從而可得到完整的P幀。
P幀特點:

  • 1)P幀是I幀后面相隔1~2幀的編碼幀;
  • 2)P幀采用運動補償的方法傳送它與前面的I或P幀的差值及運動矢量(預測誤差);
  • 3)解碼時必須將I幀中的預測值與預測誤差求和后才能重構完整的P幀圖像;
  • 4)P幀屬於前向預測的幀間編碼。它只參考前面最靠近它的I幀或P幀;
  • 5)P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀;
  • 6)由於P幀是參考幀,它可能造成解碼錯誤的擴散;
  • 7)由於是差值傳送,P幀的壓縮比較高。

3、B幀
B幀:雙向預測內插編碼幀。B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復雜,有4種情況,但我這樣說簡單些),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累。

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

  • 1)B幀是由前面的I或P幀和后面的P幀來進行預測的;
  • 2)B幀傳送的是它與前面的I或P幀和后面的P幀之間的預測誤差及運動矢量;
  • 3)B幀是雙向預測編碼幀;
  • 4)B幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,預測比較准確;
  • 5)B幀不是參考幀,不會造成解碼錯誤的擴散。
    注:I、B、P各幀是根據壓縮算法的需要,是人為定義的,它們都是實實在在的物理幀。一般來說,I幀的壓縮率是7(跟JPG差不多),P幀是20,B幀可以達到50。可見使用B幀能節省大量空間,節省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM