天天看點

【視訊】編碼基礎知識之I幀、P幀、B幀

在視訊壓縮編碼中,會将每一幀編碼成I幀、P幀或者B幀.

I幀

I幀又稱幀内編碼幀,是一種自帶全部資訊的獨立幀,無需參考其他圖像便可獨立進行解碼,即全部為幀内編碼。可以簡單了解為一張靜态畫面。視訊序列中的第一個幀始終都是I幀,因為它是關鍵幀。如果傳輸過程中I真丢失,畫面最直接的影響就是會卡頓,因為後面的幀都無法正确解碼,隻能等待下一個GOP。

IDR幀

即時解碼重新整理,其實就是I幀,不過他是第一個I幀,或者是強制I幀,它的作用就是立即重新整理,使錯誤不至于傳播,從IDR開始,重新算一個新的序列開始編碼。IDR會導緻DPB(參考序清單)清空,而I幀不會,IDR幀一定是I幀,但是I幀不一定。一個圖像序列中可以有很多I幀,一個I幀後的圖像可以引用I幀之間的圖像做運動參考,但是對于IDR幀來說,IDR幀後的圖像不能引用IDR之前的幀内容,因為從IDR幀相當于重新開始。

P幀

P幀又稱幀間預測編碼幀,需要參考前面的I幀才能進行編碼。表示的是目前幀畫面與前一幀(前一幀可能是I幀也可能是P幀)的差别。解碼時需要用之前緩存的畫面疊加上本幀定義的差别(采用了預測編碼),生成最終畫面。與I幀相比,P幀通常占用更少的資料位,但不足是,由于P幀對前面的P和I參考幀有着複雜的依耐性,是以對傳輸錯誤非常敏感,是以如果P幀丢失,畫面會出現馬賽克現象,因為前向參考幀錯誤,補齊的并不是真正運動變化後的資料。

B幀

B幀又稱雙向預測編碼幀,也就是B幀記錄的是本幀與前後幀的差别。也就是說要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面,通過前後畫面的與本幀資料的疊加取得最終的畫面。B幀壓縮率高,但是對解碼性能要求較高。如果圖像中沒有B幀,解碼順序和顯示順序相同;如果視訊中含有B幀,解碼順序和現實序列不同,解碼輸出顯示前需要進行圖像重排列。目前接觸到一般都是 I + P。

PTS:Presentation Time Stamp。PTS主要用于度量解碼後的視訊幀什麼時候被顯示出來

DTS:Decode Time Stamp。DTS主要是辨別讀入記憶體中的bit流在什麼時候開始送入解碼器中進行解碼

例如:

編碼器輸入為:

1 2 3 4 5 6 7 

I B B P B B P

解碼順序(DTS也是這個順序):

1I 4P 2B 3B 7P 5B 6B

顯示順序(PTS也是這個順序):

1I 2B 3B 4P 5B 6B 7P