天天看點

視音頻基礎知識——I,P,B,PTS,DTS

一:I幀,P幀和B幀

I frame :幀内編碼幀 又稱intra picture,I 幀通常是每個 GOP(MPEG 所使用的一種視訊壓縮技術)的第一個幀,經過适度地壓縮,做為随機通路的參考點,可以當成圖象。I幀可以看成是一個圖像經過壓縮後的産物。自身可以通過視訊解壓算法解壓成一張單獨的完整的圖檔。

P frame: 前向預測編碼幀 又稱predictive-frame,通過充分将低于圖像序列中前面已編碼幀的時間備援資訊來壓縮傳輸資料量的編碼圖像,也叫預測幀;需要參考其前面的一個I frame 或者B frame來生成一張完整的圖檔。

B frame: 雙向預測内插編碼幀 又稱bi-directional interpolated prediction frame,既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列後面已編碼幀之間的時間備援資訊來壓縮傳輸資料量的編碼圖像,也叫雙向預測幀;則要參考其前一個I或者P幀及其後面的一個P幀來生成一張完整的圖檔。

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

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

在沒有B幀存在的情況下DTS的順序和PTS的順序應該是一樣的。兩個I frame之間形成一個GOP,在x264中同時可以通過參數來設定bf的大小,即:I 和p或者兩個P之間B的數量。

簡言之:視訊編碼目的是為了縮小資料量,為了達到這個目的,設定了P幀。P幀不存儲原圖像資料,存儲的是與前一幀的差別,這樣就可以大大減小存儲空間。為了進一步減小存儲空間,設定了B幀,B幀存儲的是和前幀與後幀(I幀或P幀)的差別。

二:PTS 和 DTS

不含B幀:對于不含B幀的圖像序列,例如 :

    圖像序列:IPPIPP...

    顯示時候一般按正常順序顯示:IPPIPP...    ——  即 PTS。

    解碼時候,由于P幀需要依賴前幀,是以解碼順序也為:IPPIPP...  —— 即DTS。

是以說對于不含B幀的序列,PTS 和 DTS 順序應該是一樣的。

包含B幀:對于包含B幀的序列,由于B幀需要依賴後幀,是以當解碼B幀時需要先将B幀緩存起來,當B幀的後幀(非B幀)解碼之後再解碼之前緩存的B幀。一般而言,圖像序列順序即顯示順序(PTS),而包含B幀的序列解碼時候導緻序列發生了變化(DTS),是以一般PTS與DTS不同。舉例說明:

GOP = 15.

視音頻基礎知識——I,P,B,PTS,DTS

三:視訊時間戳 和 音頻時間戳

視訊 PTS:

當視訊幀率為 N (fps) 時候,時間基為:1000 / N  (ms)  。則第 M 幀開始的時間為 :(M-1)*(1000/N)   (ms) ,即PTS。

音頻 PTS:

當音頻采樣率為 N (Hz)時候,時間基為1000/N  (ms) ,設每幀有K個采樣點,則第M幀開始的時間為:(M-1)*(K*1000/N) (ms),即PTS。(此處有疑問?)