什麼是I幀,P幀,B幀

轉自CSDN  http://blog.csdn.net/abcjennifer/article/details/6577934

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

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


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


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


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


從上面的解釋看,我們知道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 下的率失真性能對比。




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