一、B 幀 - 雙向內(nèi)插幀
1、B 幀簡介
B 幀 全稱 " 雙向內(nèi)插幀 ( Bi-directional Predicted Frames ) " , 采用 雙向預(yù)測編碼方式 , 也就是 B 幀 記錄的是 本幀 B 幀 與 前后 I 幀 或 P 幀 的差別 ;
注意 : B 幀 需要依賴于其前的最近的一個 I 幀 或者 P 幀 及其后的最近的一個 P 幀 進行解碼 , B 幀 不能 依賴與 B 幀 ;
- B 幀 依賴的 前一幀 可以是 I 幀 或者 P 幀 ;
- B 幀 依賴的 后一幀 肯定是 P 幀 , 不可能 是 I 幀 ;
要解碼B幀 , 不僅要取得之前的緩存畫面 , 還要解碼之后的畫面 , 通過 前后畫面幀 與 本幀 共 3 幀的 數(shù)據(jù)疊加 取得最終的畫面 ;
B 幀 壓縮率高 , B 幀 的 壓縮 與 解碼 對計算機的性能要求較高 ;
2、B 幀解碼案例
B 幀解碼時 , 需要參考 前后 兩幀 數(shù)據(jù) ;
下面的 三幀 數(shù)據(jù)進行解碼時 ,
首先 , 解碼 I 幀關(guān)鍵幀 ,
然后 , 解碼 P 幀 , 根據(jù) I 幀 解碼 P 幀 ,
最后 , 解碼 B 幀 , 根據(jù) I 幀 和 P 幀 解碼 B 幀 ;
二、畫面組 Group of Pictures 概念
1、畫面組 Group of Pictures 概念
畫面組 ( Group of Pictures ) 由 I 幀 / P 幀 / B 幀 組成 ;
-
I 幀是 " 內(nèi)部編碼幀 ( Intra Coded Frames ) " , 可以作為隨機訪問的參考點 , 并且可以被視為一個完整的圖像 ;
- 畫面組 的 第一幀 , 必須是 I 幀 ;
- 一個畫面組中 , 只有一個 I 幀 ;
- P 幀是 " 前向預(yù)測幀 ( Predicted Frames ) " , 記錄的是 相對于前一幀 的變化 ;
- B 幀是 " 雙向內(nèi)插幀 ( Bi-directional Predicted Frames ) " , 記錄的是 相對于前后幀 的差別 ;
畫面組 ( GOP , Group of Pictures ) 的 長度 和 P 幀 / B 幀的數(shù)量 等參數(shù) , 對視頻壓縮效率和圖像質(zhì)量有著重要影響。
畫面組 ( GOP , Group of Pictures ) 長度越長 , P 幀 和 B 幀 的數(shù)量越多 ,
- 視頻壓縮效率越高 ;
- 圖像質(zhì)量越差 ;
在實際應(yīng)用中需要 根據(jù)具體需求 和 場景 來選擇合適的 GOP 參數(shù) , 以達到最佳的 壓縮效果 和 圖像質(zhì)量 ;
2、各類型幀解碼錯誤影響
B 幀 不是參考幀 , 解碼錯誤 不會擴散到其它幀 , 只會影響自己所在的一個幀 ;
I 幀 一旦解碼錯誤 , 會影響到整個 畫面組 的 顯示 ;
P 幀 解碼錯誤 , 會影響到 后續(xù) P 幀 , 或者依賴該 P 幀 之前 或 之后 的 B 幀 的 畫面顯示 ;
三、畫面組 Group of Pictures 編解碼順序
1、畫面組相關(guān)的幾個次序說明
畫面組相關(guān)的幾個次序說明 : 在下圖中有幾個相關(guān)的順序 ;
- 解碼順序 : 先解碼 I 幀 關(guān)鍵幀 , 再解碼 P 幀 , 最后解碼 B 幀 ;
- 顯示順序 : 就是幀正常排列的順序 ;
- DTS : Decoding Time Stamp , 解碼時間戳 , 告知播放器該在何時解碼這一幀的數(shù)據(jù) , 該時間戳是 AVPacket 結(jié)構(gòu)體中的一個成員 , 表示這個壓縮包應(yīng)該何時被解碼 ;
- PTS : Presentation Time Stamp , 顯示時間戳 , 告訴播放器該在何時顯示這一幀的數(shù)據(jù) , 該數(shù)據(jù)決定幀在播放過程中實際顯示時間的關(guān)鍵因素 ;
大多數(shù) 編解碼標(biāo)準中 ( 如 : H.264 ) , 編碼順序 和 顯示順序 可能并不一致 , 特別是當(dāng)存在B幀時 ;
此時 DTS 和 PTS 就顯得尤為重要 , 這兩個時間戳 能夠確保音視頻數(shù)據(jù)的正確同步和順序播放 ;
2、畫面組解碼次序詳細解析
每個 GOP 畫面組 都是以 I 幀開始 , 先把 I 幀 解碼出來 ;
I 幀 意味著 重新開始 :
- 丟棄數(shù)據(jù) : 只要 I 幀 解碼出來 , 就可以將前面的 GOP 畫面組 拋開 , 丟棄 ; 之前 上一個 畫面組 GOP 解碼出來的 數(shù)據(jù) , 保存的中間數(shù)據(jù) , 差異數(shù)據(jù) , 關(guān)鍵幀數(shù)據(jù) , 可以全部丟棄了 ;
- 新關(guān)鍵幀 : 之后的 數(shù)據(jù) 都以 這個 I 幀 為基礎(chǔ)進行解碼 ,
- 錯誤終止 : 如果前面的 畫面組 有解碼錯誤 , 那么從這個 I 幀 開始 , 就不會出錯了 ;
畫面組 的 第一幀 I 幀 , 解碼出來之后 , 就可以把 依賴于 該 I 幀的 前向預(yù)測幀 P 幀 , 解碼出來 , 這是 第二個 需要解碼的幀 ;
在 I 幀 和 P 幀 中間的 兩個 B 幀 , 都依賴于 前面的 I 幀 和 后面的 P 幀 ;
- 第二個 B 幀 , 記錄的數(shù)據(jù)是與 第一個 I 幀 和 第四個 P 幀 的 差異數(shù)據(jù) ;
- 第三個 B 幀 , 記錄的數(shù)據(jù)是與 第一個 I 幀 和 第四個 P 幀 的 差異數(shù)據(jù) ;
兩個 B 幀的 前后次序 , 就是 前后次序決定的 ;
如果 解碼次序打亂 , 也可以按照 顯示時間戳 進行 正確的播放 ;
四、常用視頻壓縮算法 ( 僅做參考 )
1、MPEG 陣營算法
MPEG 陣營算法 : Moving Picture Experts Group , 制定音視頻壓縮標(biāo)準的國際組織 ;
- MPEG-1 算法 : 針對 1.5 Mbps 以下數(shù)據(jù)傳輸率的數(shù)字存儲媒體運動圖像及其伴音編碼的國際標(biāo)準 , 應(yīng)用廣泛 , 如 : VCD ;
- MPEG-2 算法 : 提供接近廣播級質(zhì)量的視頻輸出 , 常用于 DVD / 數(shù)字有線電視 領(lǐng)域 ;
- MPEG-4 算法 : 流媒體 高質(zhì)量視頻 算法 , 以對象的壓縮方式 提高了壓縮效率 , 同時提供了更好的交互性和靈活性 ;
- H264 算法 : 又稱為 " AVC 算法 " , 高度壓縮數(shù)字視頻編解碼器標(biāo)準 , 以先進的壓縮技術(shù)使得在同等圖像質(zhì)量的條件下 , 壓縮后的數(shù)據(jù)量比以前的標(biāo)準 ; 廣泛應(yīng)用于 網(wǎng)絡(luò)流媒體 / 視頻通話 / 高清電視廣播等領(lǐng)域 ;
- H265 算法 : 又稱為 " HEVC 算法 " , 提供更高的壓縮效率 , 更高分辨率的視頻 , 如 4K / 8K ; 可以在維持相同視頻質(zhì)量的同時 , 將視頻文件的壓縮效率提高一倍 , 這意味著視頻文件將減少一半 ;
2、中國陣營算法
中國陣營算法 :文章來源:http://www.zghlxwxcb.cn/news/detail-824833.html
- AVS 算法 : 中國具有自主知識產(chǎn)權(quán)的音視頻編碼技術(shù)標(biāo)準 , 制定數(shù)字音視頻的壓縮、解壓縮、處理和表示等共性技術(shù)標(biāo)準 , 為數(shù)字音視頻設(shè)備與系統(tǒng)提供高效經(jīng)濟的編解碼技術(shù) ;
3、Google 陣營算法
Google 陣營算法 :文章來源地址http://www.zghlxwxcb.cn/news/detail-824833.html
- VP8 算法 : Google 開發(fā)的開源視頻壓縮格式 , 是 WebM 項目的一部分 , 提供高質(zhì)量的實時視頻壓縮 , 同時保持較低的解碼復(fù)雜性 ;
- VP9 算法 : 提供了更高的壓縮效率 , 也是 WebM 的一部分 , 用于 網(wǎng)絡(luò)視頻流 和 WebRTC 等應(yīng)用 ;
到了這里,關(guān)于【音視頻原理】視頻幀的 I P B 幀概念 ② ( B 幀 - 雙向內(nèi)插幀 | 畫面組 Group of Pictures 概念 | 各類型幀解碼錯誤影響 | 畫面組編解碼順序 | 常用視頻壓縮算 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!