1. 程式人生 > >視訊編解碼基本概念之 GOP

視訊編解碼基本概念之 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幀之間的距離。一個I幀所佔用的位元組數大於一個P幀,一個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響應的時間也越長。

Wikipedia定義的GOP

In video coding, a group of pictures, or GOP structure, specifies the order in which intra- and inter-frames are arranged. The GOP is a collection of successive pictures within a coded video stream. Each coded video stream consists of successive GOPs, from which the visible frames are generated. Encountering a new GOP in a compressed video stream means that the decoder doesn’t need any previous frames in order to decode the next ones, and allows fast seeking through the video.
在視訊編碼中,GOP的意思是畫面組,指定了intra-和inter-幀的順序。GOP是一個編碼視訊流中的一組連續的畫面。每一個編碼的視訊流都由連續的GOP組成。壓縮的視訊流中GOP相對獨立,解碼器解碼新的GOP時需要之前的幀來解碼後面的幀,GOP的存在也可以實現在視訊中更快地定位。
A GOP can contain the following picture types:

I picture or I frame (intra coded picture) – a picture that is coded independently of all other pictures. Each GOP begins (in decoding order) with this type of picture.
P picture or P frame (predictive coded picture) – contains motion-compensated difference information relative to previously decoded pictures. In older designs such as MPEG-1, H.262/MPEG-2 and H.263, each P picture can only reference one picture, and that picture must precede the P picture in display order as well as in decoding order and must be an I or P picture. These constraints do not apply in the newer standards H.264/MPEG-4 AVC and HEVC.
B picture or B frame (bipredictive coded picture) – contains motion-compensated difference information relative to previously decoded pictures. In older designs such as MPEG-1 and H.262/MPEG-2, each B picture can only reference two pictures, the one which precedes the B picture in display order and the one which follows, and all referenced pictures must be I or P pictures. These constraints do not apply in newer standards H.264/MPEG-4 AVC and HEVC.
D picture or D frame (DC direct coded picture) – serves as a fast-access representation of a picture for loss robustness or fast-forward. D pictures are only used in MPEG-1 video.
一個GOP由以下幾種不同型別的幀組成:
I幀(內部編碼幀):獨立編碼的一幀,每一個GOP以I幀開頭(解碼時的順序)。
P幀(預測編碼幀):包含了與之前解碼的幀相關的運動補償差值資訊。在設計MPEG-1,H.262/MPEG-2和H.263標準時,P幀只參考了一幀,這一幀必須在解碼和顯示順序中都在這個P幀之前,且必須是一個I幀或者P幀。這一約束在H.264/MPEG-4 AVC和HEVC中並不適用。
B幀(雙向編碼幀):包含了與之前編碼的幀相關的運動補償差值資訊。在MPEG-1,H.262/MPEG-2標準中,B幀參考顯示順序中在其之前和之後的一幀(共兩幀),並且必須是I幀或者P幀。這一約束在H.264/MPEG-4 AVC和HEVC中並不適用。
D幀(DC直接編碼幀):只用在MPEG-1中,略。
An I frame indicates the beginning of a GOP. Afterwards several P and B frames follow. In older designs, the allowed ordering and referencing structure is relatively constrained.

The I frames contain the full image and do not require any additional information to reconstruct it. Typically, encoders use GOP structures that cause each I frame to be a “clean random access point,” such that decoding can start cleanly on an I frame and any errors within the GOP structure are corrected after processing a correct I frame.
I幀出現在GOP的開頭,I幀之後是一些P幀和B幀.
I幀包含了一幀完整的畫面,不需要額外的資訊來解碼,編碼器使用GOP結構所以每個I幀都是clean random access point獨立的隨機訪問點,所以解碼器可以獨立地從每個I幀開始,GOP結構的誤差在處理一個正確的I幀之後可以消除。
In the newer designs found in H.264/MPEG-4 AVC and HEVC, encoders have much more flexibility about referencing structures. They can use the same referencing structures as were previously used in older designs, or they can use more pictures as references and they can use more flexible ordering of the coding order relative to the display order. They are also allowed to use B pictures as references when coding other (B or P) pictures. This extra flexibility can improve compression efficiency, but it can cause propagation of errors if some data becomes lost or corrupted. One popular structure for use with the newer designs is the use of a hierarchy of B pictures. Hierarchical B pictures can provide very good compression efficiency and can also limit the propagation of errors, since the hierarchy can ensure that the number of pictures affected by any data corruption problem is strictly limited.
Generally, the more I frames the video stream has, the more editable it is. However, having more I frames substantially increases bit rate needed to code the video.
在新的標準H.264/MPEG-4 AVC 和HEVC中,編碼器對參考結構的彈性更大了。……比如說允許在編碼B幀或P幀的時候參考B幀。這樣的額外彈性可以提高壓縮效率,但是也會帶來一些誤差。分層的B幀可以非常好地提高壓縮效率,並且減小傳輸誤差,因為分層機制會保證被資料出錯問題影響的幀的數量被嚴格限制。
一般來說,視訊流中的I幀越多,視訊流的可編輯性越好。不過I幀越多,編碼視訊所需要的位元速率也會相應提高。

H.264中的I幀,B幀和P幀

摘自http://blog.sina.com.cn/s/blog_4ad7c2540101me90.html
在H264中影象以序列為單位進行組織,一個序列是一段影象編碼後的資料流,以I幀開始,到下一個I幀結束。
一個序列的第一個影象叫做 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幀,這樣在相同位元速率下,可以提供更好的畫質。