I幀 B幀 p幀 IDR幀的區別

轉自:http://blog.csdn.net/sphone89/article/details/8086071算法

 

IDR(Instantaneous Decoding Refresh)--即時解碼刷新。 編碼

I幀:幀內編碼幀是一種自帶所有信息的獨立幀,無需參考其它圖像即可獨立進行解碼,視頻序列中的第一個幀始終都是I幀。 spa

   I和IDR幀都是使用幀內預測的。它們都是同一個東西而已,在編碼和解碼中爲了方便,要首個I幀和其餘I幀區別開,因此才把第一個首個I幀叫IDR,這樣就方便控制編碼和解碼流程。 IDR幀的做用是馬上刷新,使錯誤不致傳播,從IDR幀開始,從新算一個新的序列開始編碼。而I幀不具備隨機訪問的能力,這個功能是由IDR承擔。 IDR會致使DPB(DecodedPictureBuffer 參考幀列表——這是關鍵所在)清空,而I不會。IDR圖像必定是I圖像,但I圖像不必定是IDR圖像。一個序列中能夠有不少的I圖像,I圖像以後的圖像能夠引用I圖像之間的圖像作運動參考。一個序列中能夠有不少的I圖像,I圖像以後的圖象能夠引用I圖像之間的圖像作運動參考。 .net

   對於IDR幀來講,在IDR幀以後的全部幀都不能引用任何IDR幀以前的幀的內容,與此相反,對於普通的I-幀來講,位於其以後的B-和P-幀能夠引用位於普通I-幀以前的I-幀。從隨機存取的視頻流中,播放器永遠能夠從一個IDR幀播放,由於在它以後沒有任何幀引用以前的幀。可是,不能在一個沒有IDR幀的視頻中從任意點開始播放,由於後面的幀老是會引用前面的幀 。code

  收到 IDR 幀時,解碼器另外須要作的工做就是:把全部的 PPS 和 SPS 參數進行更新。視頻

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

  多參考幀狀況下,  舉個例子 :有以下幀序列: IPPPP I P PPP ……。按照 3 個參考幀編碼。隊列

     由於「按照 3 個參考幀編碼」,因此參考幀隊列長度爲 3 。重構

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

 

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幀壓縮才能達到200:1的高壓縮。

 B幀是之前面的I或P幀和後面的P幀爲參考幀,找出B幀「某點」的預測值和兩個運動矢量,並取預測差值和運動矢量傳送。接收端根據運動矢量在兩個參考幀中。

相關文章
相關標籤/搜索