天天看點

視訊編解碼學習視訊編解碼學習分享

https://ask.qcloudimg.com/avatar/1069763/eh528wcp5z.jpg)”> MelonTeam

騰訊 · 終端團隊

發表于 MelonTeam專欄訂閱 780

視訊編解碼學習分享

目錄

  1. 視訊為什麼要編解碼
  2. 視訊是否可以壓縮
  3. 編解碼實作原理
  4. 編解碼标準和國際組織
  5. 視訊檔案封裝(容器)
  6. 視訊品質評價體系

1.為什麼視訊要編解碼?

未經過壓縮的視訊資料量非常大,存儲困難,同時也不便于在網絡中傳輸。

以數字電視一秒鐘的資料量為例,觀看一秒鐘數字電視需要等待9秒鐘。

資料量約1113KB,如果按照1M傳輸帶寬計算,比特率是9123840,大約需要9秒鐘

FPS Size Bits/pixel Bit-rate(bps) File Size(KB)
30 176 * 144 12 9,123,840 1113

IPhone6 16G手機,最多隻能存儲50秒視訊。

拍攝10秒鐘視訊,未經壓縮的資料量是2.4G,16G的IPhone6除去系統占用的部分,剩下的存儲空間最多是12G

FPS Size Bits/pixel Bit-rate(Mbps) File Size(MB) Compressed Size(MB) Compress-rate(H.264)
30 1920 * 1080 32 1990 2488 25 100:1

要解決視訊存儲難、傳輸難的問題,綜合考慮軟硬體成本,最有效的辦法應該是壓縮視訊體積!

2.視訊是否可以壓縮?

答案是肯定的,因為原始視訊包含大量的備援資訊,比如:人的視覺系統有一些先天的特性,對某些細節不敏感。是以從理論上分析,基于人的視覺特性去掉視訊備援資訊既可以保證視訊品質又可以壓縮視訊體積。除此之外視訊還有很多其他備援資訊可以去除,接下來我們詳細介紹一下視訊備援資訊。

視訊備援資訊

原始視訊至少存在5個方面的資訊備援:空間備援、時間備援、編碼備援、視覺備援、知識備援,接下來詳細講解一下這5個方面的備援。

空間備援:圖像相鄰像素之間有較強的相關性

由圖可知,在顔色接近的色塊區域,相鄰像素是非常接近的有較強的相關性,這部分資訊其實是備援的,下文将的條、塊編碼就是去除這種空間備援資料。

視訊編解碼學習視訊編解碼學習分享
時間備援:視訊序列的相鄰圖像之間内容相似

視訊一般由時間軸區間内一組連續畫面組成,其中的相鄰幀往往包含相同的背景和移動物體,隻不過移動物體所在的空間位置略有不同,是以後一幀的資料與前一幀的資料有許多共同的地方,這就稱為時間備援。 如下圖所示,或許隻有人的嘴巴和手在動,其他大部分的像素都是沒有變化的。

視訊編解碼學習視訊編解碼學習分享
編碼備援:不同像素值出現的機率不同

先介紹一下等長編碼和變長編碼的概念

等長碼:在一組碼字集合C中的所有碼字cm (m = 1,2, …,M),其碼長都相同,則稱這組碼C為等長碼。

變長碼:若碼字集合C中的所有碼字cm (m = 1,2, …,M),其碼長不都相同,稱碼C為變長碼。

【例】設待壓縮的資料檔案共有100個字元,這些字元均取自字元集C={a,b,c,d,e,f},分别使用等長、變長編碼方案對比優劣。

等長編碼方案

等長編碼需要三位二進制數字來表示六個字元,是以,整個檔案的編碼長度為300bits。

變長編碼方案

變長編碼方案将采用Huffman編碼,通過碼字出現的頻率高低構造一個Huffman樹,頻度高的字元編碼設定短,将頻度低的字元編碼設定較長。

字元 a b c d e f
頻率(次) 45 13 12 16 9 5
機率 0.45 0.13 0.12 0.16 0.09 0.05
變長碼字 101 100 111 1101 1100
定長碼字 000 001 010 011 100 101

根據計算公式:451+133+123+163+9*4+584=224 整個檔案被編碼為224bits,比定長編碼方式節約了約25%的存儲空間。

由此可知,在圖像編碼中,不同的像素值出現的機率不同,采用定長編碼相對變長編碼需要更多的存儲空間,這一部分備援就稱之為編碼備援。

了解更多Huffman編碼

視覺備援:人的視覺系統對某些細節不敏感

在介紹視覺備援之前先來介紹一下人類視覺系統(Human Visual System,簡稱HVS)的幾個特性:

  1. 對亮度的變化敏感,對色度的變化相對不敏感。
  2. 對靜止圖像敏感,對運動圖像相對不敏感。
  3. 對圖像的水準線條和豎直線條敏感,對斜線相對不敏感。
  4. 對整體結構敏感,對内部細節相對不敏感。
  5. 對低頻信号敏感,對高頻信号相對不敏感(如:對邊沿或者突變附近的細節不敏感)。

由于人類視覺系統的先天特性,原始圖像中有一些資料是人眼感覺不到的,在圖像壓縮過程中可以去掉,在圖像恢複後不會影響圖像的主觀品質,這部分資料就是視覺備援。例如,人類視覺的一般分辨能力為2的6次方(64)灰階等級,而一般的圖像的量化采用的是2的8次方(256)灰階等級,即存在視覺備援。

了解更多人類視覺系統

知識備援:規律性的結構可由先驗知識和背景知識得到

有許多圖像的了解與某些基礎知識有相當大的相關性。 例如:人臉的圖像有固定的結構,嘴的上方有鼻子。鼻子的上方有眼睛,鼻子位于正臉圖像的中線上等等。這類規律 性的結構可由先驗知識相背景知識得到,我們稱此類備援為知識備援。

3.編解碼實作原理

PBI幀

視訊中每幀代表一幅靜止的圖像,而在實際壓縮時,會采取各種算法減少資料的容量,其中IPB就是最常見的。簡單地說,I幀是關鍵幀,屬于幀内壓縮。就是和AVI的壓縮是一樣的。 P是向前搜尋的意思。B是雙向搜尋。他們都是基于I幀來壓縮資料。

I幀

I幀表示關鍵幀,你可以了解為這一幀畫面的完整保留;解碼時隻需要本幀資料就可以完成,因為包含完整畫面。

P幀

P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差别,解碼時需要用之前緩存的畫面疊加上本幀定義的差别,生成最終畫面。也就是差别幀,P幀沒有完整畫面資料,隻有與前一幀的畫面差别的資料。

B幀

B幀是雙向差别幀,也就是B幀記錄的是本幀與前後幀的差别,換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面,通過前後畫面的與本幀資料的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累。

視訊編解碼學習視訊編解碼學習分享

碼流層次結構

視訊的二進制碼流有一個固定的組織結構,從上到下層依次是:序列層、圖像組層、圖像層、條帶層、宏塊層、塊層。

視訊編解碼學習視訊編解碼學習分享

序列編碼

視訊編解碼學習視訊編解碼學習分享

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

圖像組編碼

視訊編解碼學習視訊編解碼學習分享

圖像編碼

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

圖像分塊編碼

視訊編解碼學習視訊編解碼學習分享

條帶編碼

視訊編解碼學習視訊編解碼學習分享

宏塊編碼

視訊編解碼學習視訊編解碼學習分享
  • 宏塊:16x16的像素塊(對亮度而言)。
  • 宏塊内容:宏塊編碼類型,編碼模式,參考幀索引,運動矢量資訊,宏塊編碼系數等。

塊編碼

  • 8x8或4x4塊的變換量化系數的熵編碼資料。
  • CBP (Coded Block Patten):用來訓示塊的變換量化系數是否全為零。
  • 對于YUV(4:2:0)編碼,CBP通常6比特長,每個比特對應一個塊,當某一塊的變換量化系數全為零時,其對應比特位值為0,否則為1。
  • 每個塊的變換量化系數的最後用一個EOB (End of Block)符号來辨別。

視訊編解碼主要流程和關鍵技術

視訊編解碼學習視訊編解碼學習分享
  • 預測:通過幀内預測和幀間預測降低視訊圖像的空間備援和時間備援。
  • 變換:通過從時域到頻域的變換,去除相鄰資料之間的相關性,即去除空間備援。
  • 量化:通過用更粗糙的資料表示精細的資料來降低編碼的資料量,或者通過去除人眼不敏感的資訊來降低編碼資料量。
  • 掃描:将二維變換量化資料重新組織成一維的資料序列。
  • 熵編碼:根據待編碼資料的機率特性減少編碼備援。

預測

通過時間預測、空間預測技術,去除視訊中存在的時間備援和空間備援,達到壓縮的目的。

空間預測

利用圖像空間相鄰像素的相關性來預測的方法,關鍵技術是幀内預測技術和Intra圖像編碼(I幀)

幀内預測:利用目前編碼塊周圍已經重構出來的像素預測目前塊

時間預測

利用時間上相鄰圖像的相關性來預測的方法,關鍵技術是幀間預測和Inter圖像編碼。

幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)

運動估計:

  • 為待預測塊在參考幀上找到最佳的預測塊,并記錄預測塊在參考幀上的相對位置。
  • 記錄運動矢量(Motion Vector,MV),參考幀上的預測塊與目前幀上的的待預測塊的相對位置
  • 記錄預測殘差,待預測塊的原始圖像塊減去預測的圖像塊所得結果。
視訊編解碼學習視訊編解碼學習分享

搜尋算法:

  • 三步搜尋(Three Step Search,TSS)
  • 二維Log搜尋(2D Logarithmic Search,2DLOG)
  • 正交搜尋(Orthogonal Search Algorithm,OSA)
  • 十字搜尋(Cross Search Algorithm,CSA)
  • 新三步搜尋(New Three Step Search,NTSS)
  • 四步搜尋(Four Step Search,FSS)
  • 共轭方向搜尋(Conjugate Direction Search,CDS)
  • 梯度下降搜尋(Gradient Descent Search,GDS)
  • 層次塊搜尋(Hierarchical Block Matching Algorithm,HBMA)

運動補償:

  • 根據運動矢量擷取預測塊
  • 根據預測殘差計算重構塊

Inter圖像編碼:

前向預測編碼圖像(P幀)

雙向預測編碼圖像(B幀)

視訊編解碼學習視訊編解碼學習分享

變換

變換編碼的目的

  • 去除空間信号的相關性
  • 将空間信号的能力集中到頻域的一小部分低頻系數上
  • 能量小的系數可通過量化去除,而不會嚴重影響重構圖像的品質

視訊編碼中常見的變換類型有:K-L變換、傅裡葉變換、餘弦變換、小波變換。

變換原理

我們以傅立葉變換為例子來講述一下變換的實作原理。關于傅立葉變換,可以用果汁牛奶打一個比方:

  • 什麼是傅立葉變換:對于一杯果汁牛奶,能分析出其食譜(recipe)
  • 如何進行傅立* 葉變換:運作果汁牛奶的過濾器(filters),将各類成分(ingredient)分離(extract)出來
  • 為什麼要進行傅立葉變換:食譜要比果汁牛奶要容易分析、比較、修改得多
  • 如何再變換回去:根據食譜将成分再混合到一起,就又得到果汁牛奶了
視訊編解碼學習視訊編解碼學習分享

所謂“變換”,就是換個領域看問題(A Change Of Perspective),将某種情況下不易分析處理的領域換成易分析處理的領域。

接下來用一張gif圖來展示一下傅立葉變換的過程

視訊編解碼學習視訊編解碼學習分享

從上圖可以看出:

  • 任何連續周期信号都可以由一組适當的正弦曲線組合而成(這些正弦曲線通過疊加逼近,直至誤差可以忽略),其實非周期信号也能通過傅裡葉級數展開用正弦曲線疊加組合來無限逼近。
  • 連續周期信号的表象是時域(time domain)波形,從時域上,我們很難進行分析、處理,而傅立葉變換就是将信号從時域(Observations In The Time Domain)轉換到頻域(Ingredients In The Frequency Domain)。頻率隻是信号的一個特征,它可以用來識别信号,在頻域可以得到信号的成分(ingredients),就像果汁牛奶一樣,Recipe比Object本身更容易分析、比較、修改。

傅立葉變換隻是分離信号方法中的一種(靠頻率分離),由此可以想到傅立葉變換的一些應用有:

  • 濾波:将不需要的頻率對應的信号過濾掉,隻留下需要的信号
  • 調頻:基于濾波,隻專注于特定頻率的信号進行接受
  • 去噪:通過分離,把噪聲對應頻率的信号處理掉,增強核心的信号
  • 壓縮:将那些不太重要的部分忽略掉,保留主要部分(有損壓縮)。例如,JPEG對.bmp壓縮,MP3對.wav壓縮都是這種方式

了解更多傅裡葉變換

DCT變換

DCT(Discrete Cosine Transform),又叫離散餘弦變換,是與傅裡葉變換相關的一種變換,類似于離散傅裡葉變換,但是隻使用實數,經常用于信号和圖像資料的壓縮。經過DCT變換後的資料能量非常集中,一般隻有左上角的數值是非零的,也就是能量都集中在離散餘弦變換後的直流和低頻部分。能量集中是DCT最顯著的特征,如下圖:

視訊編解碼學習視訊編解碼學習分享

接下來我們看一組用MATLAB進行DCT變換的實驗資料

視訊編解碼學習視訊編解碼學習分享

将圖像整分成8*8的塊進行DCT變換,其中一個小分塊變換後的系數分布。

視訊編解碼學習視訊編解碼學習分享
視訊編解碼學習視訊編解碼學習分享

整個圖像的DCT系數

視訊編解碼學習視訊編解碼學習分享

保留左上三個機關系數,還原圖像。

mask1=

[1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0];%保留3個

視訊編解碼學習視訊編解碼學習分享
視訊編解碼學習視訊編解碼學習分享
視訊編解碼學習視訊編解碼學習分享
視訊編解碼學習視訊編解碼學習分享

量化

量化的基本思想:

  • 映射一個輸入間隔到一個整數
  • 将含有大量的資料集合映射到含有少量的資料集合中,減少信源編碼的bit
  • 一般情況重構值與輸入值不同
視訊編解碼學習視訊編解碼學習分享

量化的政策和模型直接影響圖像還原後的品質,舉例說明:

采用兩個量化區間用1bit表示

視訊編解碼學習視訊編解碼學習分享

采用四個量化區間用2bit表示

視訊編解碼學習視訊編解碼學習分享

掃描

将二維資料轉換為一維的資料序列

視訊編解碼學習視訊編解碼學習分享
視訊編解碼學習視訊編解碼學習分享

編碼 用一句話概括就是,把信源用二進制表示。 在視訊編解碼領域用到比較多的有:Huffman編碼、行程編碼、遊程編碼、二值算術編碼、字典編碼、等等…..

以大名鼎鼎的Huffman編碼為例:

視訊編解碼學習視訊編解碼學習分享

4.編解碼标準和國際組織

國際标準組織

  1. ITU (International Telecommunications Union):國際電信聯盟
  2. ISO (International Standardization Organization):國際标準化組織
  3. IEC (International Electrotechnical Commission):國際電工委員會

視訊編碼專家組(Video Coding Experts Group—VCEG)

VCEG (Video Coding Experts Group):視訊編碼專家組,屬于ITU-T (Telecommunication)即電信标準化部門的Study Group 16/Question 6 (ITU-T SG16/Q.6)

VCEG制訂标準:

  1. H.261:第一個視訊編碼标準,用于ISDN(px64Kbps)傳輸的視訊會議,主要采用了基于整象素的運動補償
  2. H.262 (MPE-2):與MPEG合作制定的标準
  3. H.263 (H.263+, H.263++):用于低碼率的視訊編碼,主要用于PSDN低于54Kbps的視訊會議和視訊電話,采用了1/2象素運動補償,考慮了資料損失和錯誤魯棒性的需要
  4. H.26L: H.264的前身标準
  5. H.264 (MPEG-4 AVC):目前編碼效率最高的标準

動态圖像專家組(Moving Picture Experts Group—MPEG)

MPEG(Moving Picture Experts Group,動态圖像專家組)是ISO(International Standardization Organization,國際标準化組織)與IEC(International Electrotechnical Commission,國際電工委員會)于1988年成立的專門針對運動圖像和語音壓縮制定國際标準的組織。

MPEG制訂标準:

  1. MPEG-1 : H.261+半象素運動補償+雙向預測+條帶結構編碼,用于VCD,LAN視訊(最大1.5Mbps)
  2. MPE-2: MPEG-1+隔行視訊編碼+縮放功能,用于HDTV(18Mbps) 、SDTV (2-5Mbps)數字信号傳輸和DVD(6-8Mbps)存儲,相容MPEG-1标準
  3. MPEG-4 ASP (P-2) :從H.263标準發展而來,基于視訊對象平面編碼,能在解碼端控制視訊對象,合成場景,并有音視訊互動功能
  4. MPEG-4 AVC (P-10)(H.264/AVC):與VCEG合作制定的标準
視訊編解碼學習視訊編解碼學習分享

了解更多MPEG-4 AVC (P-10)

免費下載下傳MPEG-4 AVC

視訊編碼标準發展曆程

視訊編解碼學習視訊編解碼學習分享

視訊編碼标準的應用場景

視訊編解碼學習視訊編解碼學習分享

5.視訊檔案封裝(容器)

封裝格式

所謂封裝格式就是将已經編碼壓縮好的視訊軌和音頻軌按照一定的格式放到一個檔案中,這個檔案也就相當于一個容器。采用不同的方式把視訊編碼和音頻編碼打包成一個完整的多媒體檔案,也就出現了不同的字尾。

常見的封裝格式:

  1. AVI:微軟在90年代初創立的封裝标準,是當時為對抗quicktime格式(mov)而推出的,隻能支援固定CBR恒定比特率編碼的聲音檔案。
  2. ts和ps:PS封裝隻能在HDDVD原版,
  3. mov: MOV是Quicktime封裝
  4. WMV:微軟推出的,作為市場競争
  5. mkv:MKV是Matroska的簡稱,萬能封裝器,有良好的相容和跨平台性、糾錯性,可帶外挂字幕。
  6. flv: 這種封裝方式可以很好的保護原始位址,不容易被下載下傳到,目前一些視訊分享網站都采用這種封裝方式
  7. rmvb/rm:Real Video,由RealNetworks開發的應用于rmvb和rm的不同封裝方式。rm是固定碼率,rmvb是動态碼率(就是靜态畫面采用用低碼率,動态采用高碼率)
  8. MP4:主要應用于mpeg4的封裝,主要在手機上使用。
  9. 3GP:目前主要應用于H.263的封裝,主要在3G手機上使用

常見的音視訊組合方式:

封裝容器 視訊編碼格式 音頻編碼格式

封裝容器 視訊編碼格式 音頻編碼格式
AVI Xvid MP3
AVI Divx MP3
MKV Xvid MP3
MKV Xvid AAC
MKV H264 AAC
MP4 Xvid MP3
MP4 H264 AAC
3GP H.263 AAC

了解更多視訊檔案封裝

6.視訊品質評價體系

客觀評價方法

視訊編解碼學習視訊編解碼學習分享

主觀評價方法

視訊編解碼學習視訊編解碼學習分享

基于視覺的視訊品質客觀評價方法

将人的視覺特性用數學方法描述并用于視訊品質評價的方式,結合了主觀品質評價和客觀品質評價兩方面優點。

常用方法:結構相似度(Structural SIMilarity,SSIM)方法,是一種用以衡量兩張數字影像相似程度的名額。當兩張影像其中一張為無失真影像,另一張為失真後的影像,二者的結構相似性可以看成是失真影像的影像品質衡量名額。

視訊編解碼學習視訊編解碼學習分享

參考文獻

視訊編解碼學習

了解傅裡葉變換

An Intuitive Guide To The Fourier Transform

如何直覺形象、生動有趣地給文科學生介紹傅立葉變換?

傅裡葉變換有哪些具體的應用?

DCT變換在圖像壓縮中的實作

關于離散餘弦變換(DCT)

信号頻域和時域的關系

圖像壓縮中,為什麼要将圖像從空間域轉換到頻率域

霍夫曼編碼

人類視覺系統(Human Visual System,HVS)

MPEG-4 AVC (P-10)

視訊檔案封裝

繼續閱讀