FFMPEG 中I幀、B幀、P幀、PTS、DTS

https://my.oschina.net/ShengTcai/blog/850020

關(guān)于FFMPEG 中I幀、B幀、P幀、PTS、DTS
1 基本概念
1.1 名詞解釋
媒體:是表示,傳輸,存儲信息的載體,常人們見到的文字、聲音、圖像、圖形等都是表示信息的媒體。
多媒體: 是聲音、動畫、文字、圖像和錄像等各種媒體的組合,以圖文并茂,生動活潑的動態(tài)形式表現(xiàn)出來,給人以很強(qiáng)的視覺沖擊力,留下深刻印象
多媒體技術(shù):是將文字、聲音、圖形、靜態(tài)圖像、動態(tài)圖像與計算集成在一起的技術(shù)。它要解決的問題是計算機(jī)進(jìn)一步幫助人類按最自然的和最習(xí)慣的方式接受和處理信息。
流媒體 :流媒體是指采用流式傳輸?shù)姆绞皆贗nternet播放的連續(xù)時基媒體格式,實際指的是一種新的媒體傳送方式,而不是一種新的媒體格式(在網(wǎng)絡(luò)上傳輸音/視頻等多媒體信息現(xiàn)在主要有下載和流式傳輸兩種方式)。流式傳輸分兩種方法:實時流式傳輸方式(Realtime streaming)和順序流式傳輸方式(progressive streaming)。
多媒體文件:是既包括視頻又包括音頻,甚至還帶有腳本的一個集合,也可以叫
容器

媒體編碼:是文件當(dāng)中的視頻和音頻所采用的壓縮算法。也就是說一個avi的文件,當(dāng)中的視頻編碼有可能是A,也可能是B,而其音頻編碼有可能是1,也有可能是2。
轉(zhuǎn)碼 :指將一段多媒體包括音頻、視頻或者其他的內(nèi)容從一種編碼格式轉(zhuǎn)換成為另外一種編碼格式
視頻:連續(xù)的圖象變化每秒超過24幀(Frame)畫面以上時,根據(jù)視覺暫留原理,人眼無法辨別單幅的靜態(tài)畫面,看上去是平滑連續(xù)的視覺效果,這樣連續(xù)的畫面叫做視頻
**音頻 :人類能聽到的聲音都成為音頻,但是一般我們所說到的音頻時存儲在計算機(jī)里的聲音
碼率:碼率就是數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps(即,千位每秒)。 通俗一點的理解就是采樣率,單位時間內(nèi)采樣率越大精度就越高,處理出來的文件就越接近原始文件,但是文件體積與采樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達(dá)到最少的失真。但是因為編碼算法不一樣,所以也不能用碼率來統(tǒng)一衡量音質(zhì)或者畫質(zhì)。
幀:幀就是一段數(shù)據(jù)的組合,它是數(shù)據(jù)傳輸?shù)幕締挝?。就是影像動畫中最小單位的單幅影像畫面,相?dāng)于電影膠片上的每一格鏡頭。 一幀就是一副靜止的畫面,連續(xù)的幀就形成動畫,如電視圖像等。
幀率:幀率即每秒顯示幀數(shù),幀率表示圖形處理器處理場時每秒鐘能夠更新的次數(shù)。高的幀率可以得到更流暢、更逼真的動畫。一般來說30fps就是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了。如果幀率超過屏幕刷新率只會浪費圖形處理的能力,因為監(jiān)視器不能以這么快的速度更新,這樣超過新率的幀率就浪費掉了。
關(guān)鍵幀:相當(dāng)于二維動畫中的原畫,指角色或者物體運動或變化中的關(guān)鍵動作所處的那一幀,它包含了圖像的所有信息,后來幀僅包含了改變了的信息。如果你沒有足夠的關(guān)鍵幀,你的影片品質(zhì)可能比較差,因為所有的幀從別的幀處產(chǎn)生。對于一般的用途,一個比較好的原則是每5秒設(shè)一個關(guān)鍵鍵。但如果時那種實時傳輸?shù)牧魑募?,那么要考慮傳輸網(wǎng)絡(luò)的可靠度,所以要1到2秒增加一個關(guān)鍵幀。
1.2 I、P、B幀概念簡述
視頻壓縮中,每幀代表一幅靜止的圖像。而在實際壓縮時,會采取各種算法減少數(shù)據(jù)的容量,其中IPB就是最常見的。簡單地說,I幀是關(guān)鍵幀,屬于幀內(nèi)壓縮,解碼時單獨的該幀便可完成解碼;P幀為向前預(yù)測編碼幀,即P幀解碼時需要參考前面相關(guān)幀的信息才能解碼;B幀為雙向預(yù)測編碼幀,解碼時既需要參考前面已有的幀又需要參考后面待解碼的幀;他們都是基于I幀來壓縮數(shù)據(jù)。
I幀表示關(guān)鍵幀,又稱intra picture,I幀畫面完整保留,解碼時只需要本幀數(shù)據(jù)就可以完成(因為包含完整畫面)。
P幀前向預(yù)測編碼幀 又稱predictive-
frame,
表示的是這一幀跟之前的一個關(guān)鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))
B幀雙向預(yù)測內(nèi)插編碼幀 又稱bi-directional interpolated prediction frame,是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別,換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累。
因此,I幀和P幀的解碼算法比較簡單,資源占用也比較少,I幀只要自己完成就行了,至于P幀,也只需要解碼器把前一個畫面緩存一下,遇到P幀時就使用之前緩存的畫面就行。如果視頻流只有I和P,解碼器可以不管后面的數(shù)據(jù),邊讀邊解碼,線性前進(jìn)。如果視頻流還有B幀,則需要緩存前面和當(dāng)前的視頻幀,待后面視頻幀獲得后,再解碼。
1.3 I、P、B幀特點分析
I幀特點:
1).它是一個全幀壓縮編碼幀。它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸;
2).解碼時僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像;
3).I幀描述了圖像背景和運動主體的詳情;
4).I幀不需要參考其他畫面而生成;
5).I幀是P幀和B幀的參考幀(其質(zhì)量直接影響到同組中以后各幀的質(zhì)量);
6).I幀是幀組GOP的基礎(chǔ)幀(第一幀),在一組中只有一個I幀;
7).I幀不需要考慮運動矢量;
8).I幀所占數(shù)據(jù)的信息量比較大。
**P幀特點: **
1).P幀是I幀后面相隔1~2幀的編碼幀;
2).P幀采用運動補(bǔ)償?shù)姆椒▊魉退c前面的I或P幀的差值及運動矢量(預(yù)測誤差);
3).解碼時必須將I幀中的預(yù)測值與預(yù)測誤差求和后才能重構(gòu)完整的P幀圖像;
4).P幀屬于前向預(yù)測的幀間編碼。它只參考前面最靠近它的I幀或P幀;
5).P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀;
6).由于P幀是參考幀,它可能造成解碼錯誤的擴(kuò)散;
7).由于是差值傳送,P幀的壓縮比較高。
B幀特點
1).B幀是由前面的I或P幀和后面的P幀來進(jìn)行預(yù)測的;
2).B幀傳送的是它與前面的I或P幀和后面的P幀之間的預(yù)測誤差及運動矢量;
3).B幀是雙向預(yù)測編碼幀;
4).B幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,預(yù)測比較準(zhǔn)確;
5).B幀不是參考幀,不會造成解碼錯誤的擴(kuò)散。
2 PTS, DTS
2.1 概念
PTS:Presentation Time Stamp。PTS主要用于度量解碼后的視頻幀什么時候被顯示出來,DTS主要用于視頻的解碼,在解碼階段使用。
DTS:Decode Time Stamp。DTS主要是標(biāo)識讀入內(nèi)存中的bit流在什么時候開始送入解碼器中進(jìn)行解碼,PTS主要用于視頻的同步和輸出,在display的時候使用。在沒有B frame的情況下,DTS和PTS的輸出順序是一樣的.
GOP:兩個I frame之間形成一個GOP,在x264中同時可以通過參數(shù)來設(shè)定bf的大小,即:I 和p或者兩個P之間B的數(shù)量。
如果有B frame 存在的情況下一個GOP的最后一個frame一定是P.
下面給出一個GOP為15的例子,其解碼的參照frame及其解碼的順序都在里面:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容