I frame :幀內編碼幀 又稱intra picture,I 幀通常是每個 GOP(MPEG 所使用的一種視頻壓縮技術)的第一個幀,經過適度地壓縮,做為隨機訪問的參考點,可以當成圖象。I幀可以看成是一個圖像經過壓縮后的產物。
P frame: 前向預測編碼幀 又稱predictive-frame,通過充分將低于圖像序列中前面已編碼幀的時間冗余信息來壓縮傳輸數據量的編碼圖像,也叫預測幀;
B frame: 雙向預測內插編碼幀 又稱bi-directional interpolated prediction frame,既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列后面已編碼幀之間的時間冗余信息來壓縮傳輸數據量的編碼圖像,也叫雙向預測幀;
DTS Decode Time Stamp(解碼時間戳)DTS主要是標識讀入內存中的bit流在什么時候開始送入解碼器中進行解碼。
PTS Presentation Time Stamp(顯示時間戳)PTS主要用于度量解碼后的視頻幀什么時候被顯示出來
DTS和PTS分別是解碼器進行解碼和顯示幀時相對于SCR(系統參考)的時間戳。SCR可以理解為解碼器應該開始從磁盤讀取數據時的時間。
mpeg文件中的每一個包都有一個SCR時間戳并且這個時間戳就是讀取這個數據包時的系統時間。通常情況下,解碼器會在它開始讀取mpeg流時啟動系統時鐘(系統時鐘的初始值是第一個數據包的SCR值,通常為0但也可以不從0開始)。
DTS 時間戳決定了解碼器在SCR時間等于DTS時間時進行解碼,PTS時間戳也是類似的。通常,DTS/PTS時間戳指示的是晚于音視頻包中的SCR的一個時 間。例如,如果一個視頻數據包的SCR是100ms(意味著此包是播放100ms以后從磁盤中讀取的),那么DTS/PTS值就差不多是200 /280ms,表明當SCR到200ms時這個視頻數據應該被解碼并在80ms以后被顯示出來(視頻數據在一個buffer中一直保存到開始解碼)
下溢通常發生在設置的視頻數據流相關mux率太高。如果mux率是1000000bits/sec(意味著解碼器要以1000000bits/sec的速率 讀取文件),可是視頻速率是2000000bits/sec(意味著需要以2000000bits/sec的速率顯示視頻數據),從磁盤中讀取視頻數據時 速度不夠快以至于1秒鐘內不能夠讀取足夠的視頻數據。這種情況下DTS/PTS時間戳就會指示視頻在從硬盤中讀出來之前進行解碼或顯示(DTS/PTS時間戳就要比包含它們的數據包中的SCR時間要早了)。
如今依靠解碼器,著基本已經不是什么問題了(盡管MPEG文件因為應該沒有下溢而并不完全符合MPEG標準)。一些解碼器(很多著名的基于PC的播放器)盡可能快的讀取文件以便顯示視頻,可以的話直接忽略SCR。
注意在你提供的列表中,平均的視頻流速率為~3Mbps(3000000bits/sec)但是它的峰值達到了14Mbps(相當大,DVD限制在 9.8Mbps內)。這意味著mux率需要調整足夠大以處理14Mbps的部分, bbMPEG計算出來的mux率有時候太低而導致下溢。
你計劃讓視頻流速率這么高么?這已經超過了DVD的說明了,而且很可能在大多數獨立播放其中都不能播放。如果你不是這么計劃,我會從1增加mquant的值并且在視頻設置中將最大碼流設置為9Mbps以保持一個小一點的碼流。
如果你確實想讓視頻碼率那么高,你需要增大mux率。從提供的列表可以得出bbMPEG使用14706800bits/sec或者1838350bytes /sec的mux率(總數據速率為:1838350bytes/sec(14706800bits/sec)行)。你在強制mux率字段設置的值應該是以 bytes/sec為單位并被50整除。所以我會從36767(1838350/50)開始,一直增加直到不會再出現下溢錯誤為止.
在沒有B幀存在的情況下DTS的順序和PTS的順序應該是一樣的。
I P B幀的不同:
I frame:自身可以通過視頻解壓算法解壓成一張單獨的完整的圖片。
P frame:需要參考其前面的一個I frame 或者B frame來生成一張完整的圖片。
B frame:則要參考其前一個I或者P幀及其后面的一個P幀來生成一張完整的圖片。
兩個I frame之間形成一個GOP,在x264中同時可以通過參數來設定bf的大小,即:I 和p或者兩個P之間B的數量。
通過上述基本可以說明如果有B frame 存在的情況下一個GOP的最后一個frame一定是P.
DTS和PTS的不同:
DTS主要用于視頻的解碼,在解碼階段使用.PTS主要用于視頻的同步和輸出.在display的時候使用.在沒有B frame的情況下.DTS和PTS的輸出順序是一樣的.
例子:
下面給出一個GOP為15的例子,其解碼的參照frame及其解碼的順序都在里面:

如上圖:I frame 的解碼不依賴于任何的其它的幀.而p frame的解碼則依賴于其前面的I frame或者P frame.B frame的解碼則依賴于其前的最近的一個I frame或者P frame 及其后的最近的一個P frame.
sample_rate 采樣率