音視頻編解碼學習之編解碼框架

1. 壓縮碼流

  • 語法:碼流中各個元素的位置關係01001001…圖像編碼類型(01),宏塊類型(00),編碼係數1001等
  • 語義:每個語法元素所表達的意義。例如:圖像編碼類型

音視頻編解碼學習之編解碼框架

 

2. 編碼層次

  • 序列(Sequence)
  • 圖像組(Group of Pictures,GOP)
  • 圖像(Picture)
  • 條帶(Slice)
  • 宏塊(Macroblock,MB)
  • 塊(Block)

3. 碼流結構

音視頻編解碼學習之編解碼框架

 

4. PB幀編碼

音視頻編解碼學習之編解碼框架

 

5. 序列編碼對象

(1)IBBP序列

音視頻編解碼學習之編解碼框架

 

  • 序列:一段連續編碼的並具有相同參數的視頻圖像。
  • 序列起始碼:專有的一段比特串,標識一個序列的壓縮數據的開始MPEG-2的序列起始碼爲十六進制數000001(B3)。
  • 序列頭:記錄序列信息檔次(Profile),級別(Level),寬度,高度,是否是逐行序列,幀率等。
  • 序列結束碼:專有的一段比特串,標識該序列的壓縮數據的結束MPEG-2的序列結束碼爲十六進制數000001(B7)。

(2)圖像組編碼對象

音視頻編解碼學習之編解碼框架

 

6. 圖像編碼結構

  • 圖像:
  • 圖像起始碼:專有的一段比特串,標識一個圖像的壓縮數據的開始MPEG-2的圖像起始碼爲十六進制數000001(00)。
  • 圖像頭:記錄圖像信息圖像編碼類型,圖像距離,圖像編碼結構,圖像是否爲逐行掃描。

7. 圖像分塊編碼

音視頻編解碼學習之編解碼框架

 

8. 條帶編碼結構

  • 條帶:多個宏塊的組合。
  • 條帶起始碼:專有的一段比特串,標識一個條帶的壓縮數據的開始MPEG-2的條帶起始碼爲十六進制數000001(0~AF)。
  • 條帶頭:記錄當前圖像的相關信息條帶位置,條帶量化參數,宏塊編碼技術標識等。

9. 條帶編碼對象

音視頻編解碼學習之編解碼框架

 

10. 宏塊編碼結構

  • 宏塊:16x16的像素塊(對亮度而言)。
  • 宏塊內容:宏塊編碼類型,編碼模式,參考幀索引,運動矢量信息,宏塊編碼係數等。

11. 宏塊編碼對象
音視頻編解碼學習之編解碼框架

 

12. 塊編碼結構

  • 8x8或4x4塊的變換量化係數的熵編碼數據。
  • CBP (Coded Block Patten):用來指示塊的變換量化係數是否全爲零。對於YUV(4:2:0)編碼,CBP通常6比特長,每個比特對應一個塊,當某一塊的變換量化係數全爲零時,其對應比特位值爲0,否則爲1。
  • 每個塊的變換量化係數的最後用一個EOB (End of Block)符號來標識。

13. 視頻編解碼關鍵技術

  • 預測:通過幀內預測和幀間預測降低視頻圖像的空間冗餘和時間冗餘。
  • 變換:通過從時域到頻域的變換,去除相鄰數據之間的相關性,即去除空間冗餘。
  • 量化:通過用更粗糙的數據表示精細的數據來降低編碼的數據量,或者通過去除人眼不敏感的信息來降低編碼數據量。
  • 掃描:將二維變換量化數據重新組織成一維的數據序列。
  • 熵編碼:根據待編碼數據的概率特性減少編碼冗餘。

音視頻編解碼學習之編解碼框架

 

14. 預測

  • 空間預測:利用圖像空間相鄰像素的相關性來預測的方法。幀內預測技術:利用當前編碼塊周圍已經重構出來的像素預測當前塊Intra圖像編碼(I幀)
  • 時間預測:利用時間上相鄰圖像的相關性來預測的方法。幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)Inter圖像編碼:前向預測編碼圖像(P幀),雙向預測編碼圖像(B幀)

15. 幀內預測

  • I幀圖像的每個宏塊都採用幀內(Intra)預測編碼模式。
  • 宏塊分成8x8或者4x4塊,對每個塊採用幀內預測編碼,稱作Intra8x8或者Intra4x4。
  • 幀內預測有多個預測方向:水平,垂直,左下,右上。
  • 幀內預測還有直流(DC)預測。
  • 色度塊預測還有平面預測。
  •  

音視頻編解碼學習之編解碼框架

 

16. 幀間預測

  • 塊基運動估計:爲待預測塊在參考幀上找到最佳的預測塊,並記錄預測塊在參考幀上的相對位置。
  • 運動矢量(MV):參考幀上的預測塊與當前幀上的的待預測塊的相對位置。MV有兩個分量:(x,y)
  • 分像素運動估計最佳的預測塊不在整像素位置,而在分像素位置;1/2,1/4,1/8像素插值得到分像素值。
  • 幀間預測流程:
  • 運動補償:給定MV和參考幀,爲待解碼塊從參考幀上獲取預測塊。
  • 運動矢量編碼MV預測:用當前塊的周圍可得到鄰塊的運動矢量來預測當前塊的運動矢量運動矢量差(MV difference,MVD):實際運動矢量與預測運動矢量的差,即:運動矢量差採用變長編碼。

17. 預測殘差

音視頻編解碼學習之編解碼框架

 

18. 變換編碼

  • 變換編碼:通過變換將空域信號轉換爲頻域信號來去除空間信號的冗餘信息,減少編碼數據。
  • 二維離散餘弦變換4x4變換,8x8變換

音視頻編解碼學習之編解碼框架

 

  • 二維離散餘弦變換

例:

音視頻編解碼學習之編解碼框架

 

  • 變換系數:直流(DC)係數,交流(AC)係數

音視頻編解碼學習之編解碼框架

 

19. 量化

  • 量化原理:將含有大量的數據集合映射到含有少量的數據集合中。

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

  • 一般情況下量化後高頻部分包含大量的零係數

音視頻編解碼學習之編解碼框架

 

  • 量化對主觀質量的影響

音視頻編解碼學習之編解碼框架

 

20. 掃描

  • 掃描:將二維數據轉換爲一維的數據序列。

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

21. 熵編碼

  • 熵編碼:根據符號出現的概率,對經常出現的符號分配較短的碼字,對不常出現的符號分配較長的碼字。
  • Level-Run編碼:用數據中非零值和其前面非零值之間出現零值的個數重新描述量化係數序列爲(Level,Run)二元組序列

音視頻編解碼學習之編解碼框架

 

  • 變長編碼將Level-Run編碼後的(level,run)變長編碼成最終的比特串。

音視頻編解碼學習之編解碼框架

 

22. 碼率控制

  • 受到緩衝區,帶寬的限制,編碼碼率不能無限制的增長,因此需要通過碼率控制來將編碼碼流控制在目標碼率範圍內。
  • 一般通過調整量化參數的手段控制碼率幀級控制條帶級控制宏塊級控制
  • 碼率控制考慮的問題防止碼流有較大的波動,導致緩衝區發生溢出,同時保持緩衝區儘可能的充滿,讓圖像質量儘可能的好而且穩定
  • CBR(Constant Bit Rate)比特率穩定,但圖像質量變化大
  • VBR(Variable Bit Rate)比特率波動大,但圖像質量穩定
  • 碼率控制算法碼率分配碼率控制
  • 碼率控制屬於非標準技術編碼端有,解碼端沒有

第5章 預測

1. 預測技術

  • 目的:去除空間冗餘和時間冗餘。
  • 視頻存在大量的空間冗餘和時間冗餘空間冗餘:用幀內預測編碼去除基於塊的幀內預測時間冗餘:用幀間預測編碼去除基於塊匹配(Block Matching)的幀間預測
  • 預測後得到去除大部分空間或時間冗餘的殘差

2. 空間冗餘

  • 圖像空間相鄰像素具有很強的相關性。
  • 幀內預測技術去除空間冗餘

音視頻編解碼學習之編解碼框架

 

另外關於c++ Linux後臺服務器開發的一些知識點分享:Linux,Nginx,MySQL,Redis,P2P,K8S,Docker,TCP/IP,協程,DPDK,webrtc,音視頻等等視頻。

可以加入到羣裏一起探討技術交流

音視頻編解碼學習之編解碼框架

 

音視頻編解碼學習之編解碼框架

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章