I幀
幀內(nèi)編碼幀(intra picture),I幀通常是每個 GOP(MPEG 所使用的一種視頻壓縮技術(shù))的第一個幀,經(jīng)過適度地壓縮,做為隨機(jī)訪問的參考點(diǎn),可以當(dāng)成圖象。I幀可以看成是一個圖像經(jīng)過壓縮后的產(chǎn)物。
P幀
前向預(yù)測編碼幀(predictive-frame),通過充分將低于圖像序列中前面已編碼幀的時間冗余信息來壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫預(yù)測幀。
B幀
雙向預(yù)測內(nèi)插編碼幀(bi-directional interpolatedprediction frame),既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列后面已編碼幀之間的時間冗余信息來壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫雙向預(yù)測幀。
PTS
Presentation Time Stamp主要用于度量解碼后的視頻幀什么時候被顯示出來。
DTS
Decode Time Stamp主要是標(biāo)識讀入內(nèi)存中的bit流在什么時候開始送入解碼器中進(jìn)行解碼。
在沒有B幀存在的情況下DTS的順序和PTS的順序應(yīng)該是一樣的。
IPB幀的不同
- I frame : 自身可以通過視頻解壓算法解壓成一張單獨(dú)的完整的圖片。
- P frame :需要參考其前面的一個I frame 或者Bframe來生成一張完整的圖片。
- B frame : 則要參考其前一個I或者P幀及其后面的一個P幀來生成一張完整的圖片。
兩個I frame之間形成一個GOP,在x264中同時可以通過參數(shù)來設(shè)定bf的大小,即:I 和p或者兩個P之間B的數(shù)量。
通過上述基本可以說明如果有B frame 存在的情況下一個GOP的最后一個frame一定是P。
看x264代碼,感覺GOP就是IDR幀到另一個IDR幀之間就是一個GOP。在視頻編碼序列中,GOP即Group of picture(圖像組),指兩個I幀之間的距離,Reference(參考周期)指兩個P幀之間的距離。一個I幀所占用的字節(jié)數(shù)大于一個P幀,一個P幀所占用的字節(jié)數(shù)大于一個B幀。

所以在碼率不變的前提下,GOP值越大,P、B幀的數(shù)量會越多,平均每個I、P、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量;Reference越大,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量。
需要說明的是,通過提高GOP值來提高圖像質(zhì)量是有限度的,在遇到場景切換的情況時,H.264編碼器會自動強(qiáng)制插入一個I幀,此時實(shí)際的GOP值被縮短了。另一方面,在一個GOP中,P、B幀是由I幀預(yù)測得到的,當(dāng)I幀的圖像質(zhì)量比較差時,會影響到一個GOP中后續(xù)P、B幀的圖像質(zhì)量,直到下一個GOP開始才有可能得以恢復(fù),所以GOP值也不宜設(shè)置過大。
同時,由于P、B幀的復(fù)雜度大于I幀,所以過多的P、B幀會影響編碼效率,使編碼效率降低。另外,過長的GOP還會影響Seek操作的響應(yīng)速度,由于P、B幀是由前面的I或P幀預(yù)測得到的,所以Seek操作需要直接定位,解碼某一個P或B幀時,需要先解碼得到本GOP內(nèi)的I幀及之前的N個預(yù)測幀才可以,GOP值越長,需要解碼的預(yù)測幀就越多,seek響應(yīng)的時間也越長。
DTS和PTS的不同
DTS主要用于視頻的解碼。在解碼階段使用,PTS主要用于視頻的同步和輸出。在display的時候使用,在沒有B frame的情況下,DTS和PTS的輸出順序是一樣的。
下面給出一個GOP為15的例子,其解碼的參照frame及其解碼的順序都在里面:

如上圖:I frame 的解碼不依賴于任何的其它的幀.而p frame的解碼則依賴于其前面的Iframe或者P frame.B frame的解碼則依賴于其前的最近的一個I frame或者P frame 及其后的最近的一個P frame.
Slice-I:指的是I幀,即沒有用到幀間的冗余信息,但是并不表示他不能使用預(yù)測方式,他可以使用同一幀中相鄰宏塊之間的空間關(guān)聯(lián)性,因此,對I幀圖像某一MB進(jìn)行編碼時,我們可以根據(jù)周圍的MB來預(yù)測我們當(dāng)前的MB,通常我們會選擇當(dāng)前MB左側(cè)和上側(cè)的MB,因?yàn)檫@些MB已經(jīng)經(jīng)過編碼了。然后再對實(shí)際的MB與預(yù)測MB之間的差值進(jìn)行編碼。這樣就可以減少bit。但是需要用13種幀內(nèi)預(yù)測模式進(jìn)行預(yù)測比較,復(fù)雜度較以往標(biāo)準(zhǔn)采用的直接DEF變換編碼大大提高了;
只有H.264中I幀才用到了預(yù)測方式,其余的協(xié)議都沒有用到預(yù)測方式,而是直接對一幀中的各MB進(jìn)行變換得到的
slice-P:指的是P幀,在幀間編碼圖像內(nèi)的MB,各種模式的幀內(nèi)預(yù)測相對于參考圖像中的大范圍搜索,復(fù)雜度和存儲量增加的比例就比較小。
當(dāng)數(shù)字視頻信號送入H.264編碼器進(jìn)行編碼時,編碼器讀出頭信息后,以宏塊為單位進(jìn)行編碼. 在對當(dāng)前宏塊進(jìn)行編碼時,首先通過運(yùn)動估計(jì),在上一幀重構(gòu)圖像中選出最佳匹配宏塊. 然后,根據(jù)匹配效果、圖像局部的性質(zhì)、編碼器當(dāng)時的工作狀況,決定對當(dāng)前宏塊是采用幀內(nèi)編碼還是幀間編碼. 若前后兩幀很相似,即相關(guān)性很強(qiáng),則進(jìn)行的是幀間預(yù)測編碼,即對幀間預(yù)測的誤差進(jìn)行4×4整數(shù)變換、量化,得到的數(shù)據(jù)一方面進(jìn)行熵編碼,另一方面通過反量化和4×4反整數(shù)變換重構(gòu),以便下一個宏塊進(jìn)行運(yùn)動估計(jì);若前后兩幀圖像相關(guān)性較弱,則進(jìn)行的是幀內(nèi)編碼。