1. 程式人生 > >H264:I幀 B幀 p幀 IDR幀的區別

H264:I幀 B幀 p幀 IDR幀的區別

IDR(Instantaneous Decoding Refresh--即時解碼重新整理。 

I幀:幀內編碼幀是一種自帶全部資訊的獨立幀,無需參考其它影象便可獨立進行解碼視訊序列中的第一個幀始終都是I幀。 

I和IDR幀都是使用幀內預測的。它們都是同一個東西而已,在編碼和解碼中為了方便,要首個I幀和其他I區別開,所以才把第一個首個I幀叫IDR,這樣就方便控制編碼和解碼流程。 IDR幀的作用是立刻重新整理,使錯誤不致傳播,IDR幀開始,重新算一個新的序列開始編碼。而I幀不具有隨機訪問的能力,這個功能是由IDR承擔。 IDR會導致DPBDecodedPictureBuffer 參考幀列表——

這是關鍵所在)清空,而I不會IDR影象一定是I影象,但I影象不一定是IDR影象。一個序列中可以有很多的I影象,I影象之後的影象可以引用I影象之間的影象做運動參考。一個序列中可以有很多的I影象,I影象之後的圖象可以引用I影象之間的影象做運動參考。 

對於IDR幀來說,在IDR幀之後的所有幀都不能引用任何IDR幀之前的幀的內容,與此相反,對於普通的I-幀來說,位於其之後的B-P-幀可以引用位於普通I-幀之前的I-幀。從隨機存取的視訊流中,播放器永遠可以從一個IDR幀播放,因為在它之後沒有任何幀引用之前的幀。但是,不能在一個沒有IDR幀的視訊中從任意點開始播放,因為後面的幀總是會引用前面的幀。收到IDR幀時,解碼器另外需要做的工作就是:把所有的PPS和SPS引數進行更新。

  對IDR幀的處理(I幀的處理相同)(1) 進行幀內預測,決定所採用的幀內預測模式。(2) 畫素值減去預測值,得到殘差。(3) 對殘差進行變換和量化。(4) 變長編碼和算術編碼。(5) 重構影象並濾波,得到的影象作為其它幀的參考幀。

  多參考幀情況下,舉個例子有如下幀序列:IPPPPIPPPP……。按照3個參考幀編碼。

  因為“按照 3 個參考幀編碼”,所以參考幀佇列長度為 3 。

    遇到綠色的I時,並不清空參考幀佇列,把這個I幀加入參考幀佇列(當然I編碼時不用參考幀。)。再檢測到紅色的P幀時,用到的就是PPI三幀做參考了。

P幀:前向預測編碼幀

    在針對連續動態影象編碼時,將連續若干幅影象分成P,B,I

三種類型,P幀由在它前面的P幀或者I幀預測而來,它比較與它前面的P幀或者I幀之間的相同資訊或資料,也即考慮運動的特性進行幀間壓縮。P幀法是根據本幀與相鄰的前一幀(I幀或P幀)的不同點來壓縮本幀資料。採取P幀和I幀聯合壓縮的方法可達到更高的壓縮且無明顯的壓縮痕跡。

P幀的預測與重構:P幀是以I幀為參考幀,在I幀中找出P某點預測值和運動向量,取預測差值和運動向量一起傳送。在接收端根據運動向量從I幀中找出P某點的預測值並與差值相加以得到P幀某點樣值,從而可得到完整的P幀。有的視訊序列比較簡單,就沒有B幀,

B幀:雙向預測內插編碼幀

B幀的預測與重構

 B幀法是雙向預測的幀間壓縮演算法。當把一幀壓縮成B幀時,它根據相鄰的前一幀、本幀以及後一幀資料的不同點來壓縮本幀,也即僅記錄本幀與前後幀的差值。只有採用B幀壓縮才能達到2001的高壓縮。

 B幀是以前面的IP幀和後面的P幀為參考幀,找出B某點的預測值和兩個運動向量,並取預測差值和運動向量傳送。接收端根據運動向量在兩個參考幀中。