天天看點

H264系列--壓縮編碼必要性和備援視訊編碼必要性為何能進行壓縮

Android FFmpeg專題結構

視訊編碼必要性

視訊是由一幀幀的圖檔組成. 以一個時長 1小時,幀率為30fps, 分辨率為1080P的視訊舉例, 一幀未壓縮的圖檔(yuv420)大小為

1920 ∗ 1080 + 1920 ∗ 1080 / 4 + 1920 ∗ 1080 / 4 = 3110400 b y t e 1920 * 1080 + 1920 * 1080 / 4 + 1920 * 1080 / 4 =3110400 byte 1920∗1080+1920∗1080/4+1920∗1080/4=3110400byte

視訊總大小為

3110400 ∗ 30 ∗ 3600 = 335923200000 b y t e ≈ 313 G 3110400 * 30 * 3600 = 335923200000 byte \approx 313G 3110400∗30∗3600=335923200000byte≈313G

可見未壓縮編碼的視訊是非常大的

為何能進行壓縮

H264系列--壓縮編碼必要性和備援視訊編碼必要性為何能進行壓縮
H264系列--壓縮編碼必要性和備援視訊編碼必要性為何能進行壓縮

視訊是連續的圖像序列,由連續的幀構成,一幀即為一幅圖像。由于人眼的視覺暫留效應,當幀序列以一定的速率播放時,我們看到的就是動作連續的視訊。可見視訊壓縮編碼可以分成幀間壓縮和幀内壓縮.

  • 幀内預測壓縮,解決的是空域資料備援問題。
  • 幀間預測壓縮(運動估計與補償),解決的是時域資料冗徐問題。

視訊之所能被壓縮,也是因為有備援資訊. 備援資訊具體分為:

  • 空間備援:圖像相鄰像素之間有較強的相關性
  • 時間備援:視訊序列的相鄰圖像之間内容相似
  • 編碼備援:不同像素值出現的機率不同
  • 視覺備援:人的視覺系統對某些細節不敏感
  • 知識備援:規律性的結構可由先驗知識和背景知識得到

備援

(具體原理比這個下面介紹的複雜多, 這裡隻是簡單介紹,幫助了解概念)

  • 空間備援

    我們常見到的jpeg圖檔, 就是一種對靜态資料的壓縮,可以了解為視訊的幀内壓縮. 一幅圖像相鄰像素間往往存在着空間連貫性.如下圖

H264系列--壓縮編碼必要性和備援視訊編碼必要性為何能進行壓縮

對于圖檔背景,相鄰像素有很多是相同的.

  • 時間備援

視訊一般由時間軸區間内一組連續畫面組成,其中的相鄰幀往往包含相同的背景和移動物體,隻不過移動物體所在的空間位置略有不同,是以後一幀的資料與前一幀的資料有許多共同的地方,這就稱為時間備援

如下圖,背景部分有很多的相同像素,有些像素隻是坐标發生了變化,可以通過運動矢量,隻記錄兩幀間的差異。

H264系列--壓縮編碼必要性和備援視訊編碼必要性為何能進行壓縮
  • 編碼備援

    首先介紹一下等長編碼和變長編碼:可以簡單地了解為不同像素占用的空間都是一樣的為等長編碼,不同像素占用的空間不一樣的為變成編碼。可能聽到比較多的變長編碼就是哈夫曼編碼

    一幅圖像中不同像素出現的機率是不同的。對出現次數比較多的像素,用少的位數來編碼。對出現次數比較少的像素,用多的位數來編碼,能夠減少編碼的大小。

  • 視覺備援

    利用人的視覺系統對某些細節不敏感。壓縮視覺備援度就是去掉那些相對人眼而言是看不到的或可有可無的圖象資料

  • 知識備援

    有許多圖像的了解與某些基礎知識有相當大的相關性。例如,人臉的圖像有固定的結構,嘴的上方有鼻子,鼻子的上方有眼睛,鼻子位于正面圖像的中線上等等。這類規律性的結構可由先驗知識和背景知識得到,我們稱此類備援為知識備援。根據已有知識,對某些圖像中所包含的物體,可以構造其基本模型,并建立對應各種特征的圖像庫,進而圖像的存儲隻需要儲存一些特征參數,進而可以大大減少資料量。

參考:

https://zhuanlan.zhihu.com/p/214376735

https://blog.csdn.net/xiechan2834/article/details/96328249

繼續閱讀