ffmpeg之H264中的時間戳(DTS和PTS

2021-08-17 19:55:51 字數 1041 閱讀 7602

h264裡有兩種時間戳:dts(decoding time stamp)和pts(presentation time stamp)。 顧名思義,前者是解碼的時間,後者是顯示的時間。要仔細理解這兩個概念,需要先了解ffmpeg中的packet和frame的概念。

這就需要深入了解i b p三種幀型別與 dts pts的關係

基本概念:

p frame: 前向**編碼幀 又稱predictive-frame,通過充分將低於影象序列中前面已編碼幀的時間冗餘資訊來壓縮傳輸資料量的編碼影象,也叫**幀;

b frame: 雙向**內插編碼幀 又稱bi-directional interpolated prediction frame,既考慮與源影象序列前面已編碼幀,也顧及源影象序列後面已編碼幀之間的時間冗餘資訊來壓縮傳輸資料量的編碼影象,也叫雙向**幀;

dts:decode time stamp。dts主要是標識讀入記憶體中的bit流在什麼時候開始送入解碼器中進行解碼。

在沒有b幀存在的情況下dts的順序和pts的順序應該是一樣的。

ipb幀的不同:

p frame:需要參考其前面的乙個i frame 或者p frame來生成一張完整的。

b frame:則要參考其前乙個i或者p幀及其後面的乙個p幀來生成一張完整的。

兩個i frame之間形成乙個gop,在x264中同時可以通過引數來設定bf的大小,即:i 和p或者兩個p之間b的數量。

通過上述基本可以說明如果有b frame 存在的情況下乙個gop的最後乙個frame一定是p.

dts和pts的不同:

例子:下面給出乙個gop為15的例子,其解碼的參照frame及其解碼的順序都在裡面:

如上圖:i frame 的解碼不依賴於任何的其它的幀.而p frame的解碼則依賴於其前面的i frame或者p frame。b frame的解碼則依賴於其前的最近的乙個i frame或者p frame 及其後的最近的乙個p frame。

可以簡單地這樣理解:

ffmpeg軟編碼之H 264

寫在前面,下文是基於 ffmpeg從入門到精通 一書,4.1章節的精簡 ffmpeg h encoder libx264若顯示 encoder libx264 libx264 h.264 則成功 preset 編碼器預設引數,字串型別 編碼方式的轉碼速度從大到小排序 ultrafast,supe s...

H 264 中的相關問題

幀內解碼時,在解碼端,首先通過當前巨集塊左邊 上邊已經解碼完成的巨集塊使用當前巨集塊的 模式 模式計算過程請參見我的 h.264 本群原創資料 目錄中 得到當前巨集塊的畫素 值。然後通過對碼流進行解碼得到當前巨集塊的畫素殘差。最後將殘差和 值加在一起就得到重構的畫素值。如果當前巨集塊的左邊或者右邊的...

H 264 中的相關問題

幀內解碼時,在解碼端,首先通過當前巨集塊左邊 上邊已經解碼完成的巨集塊使用當前巨集塊的 模式 模式計算過程請參見我的 h.264 本群原創資料 目錄中 得到當前巨集塊的畫素 值。然後通過對碼流進行解碼得到當前巨集塊的畫素殘差。最後將殘差和 值加在一起就得到重構的畫素值。如果當前巨集塊的左邊或者右邊的...