home > theory > CG-CV-IP >

視頻采樣,量化,編碼,壓縮,解碼相關技術原理學習筆記

author:zhoulujun    hits:

視頻采樣,量化,編碼,壓縮,解碼相關技術背后資料是海量的,而且晦澀難懂,本文是對其學習過程中的一些關鍵點與解釋的出彩之處的筆記。用于日后復習,理清其脈絡。這是一個非常有前途的技術領域,值得深入進行研

首先推薦閱讀之的水貨文章:《水煮RGB與CMYK色彩模型—色彩與光學相關物理理論淺敘》、《色彩空間HSL/HSV/HSB理論,RGB與YUV如何轉換》、《三色視者與四色視者身后的理論基礎:色彩原理》。本文主要以《即時通訊音視頻開發》/《從JPG到AVI,這篇視頻編碼的最強入門科普,你值得擁有!》為基礎的學習筆記。目前行文比較亂,還未細致整理。

圖片、視頻為何需要壓縮?

無論視頻還是音頻,未經壓縮,存儲體量巨大。傳輸也困難。

比如音頻采樣44.1kHz/16bit采樣(頻率:294 x 50 x 3||44,056=245 x 59.94 x 3,振幅:0-96分貝),具體可以查看《頻率史—從電源頻率到音頻采樣頻率》。碼率為:16bit×44.1KHz=705.6Kbit/s。

視頻方面,簡單演算下1920×1080(px)尺寸, R、G、B各8位采樣(這個顏色范圍已經超過了人眼可見的全部色彩,所以又叫真彩色。再高的話,對于我們人眼來說,已經沒有意義了,完全識別不出來)幀率30fps 

3×8(bit)×1920×1080×30(s)÷8(byte)=6220800byte×30(s)≈186.6MB/s

1分鐘大約是11GB,一部90分鐘的電影,約是1000GB。一般硬盤也就1TB,讀寫速度平均50-90MB/s

注:8 bit(位)=1 byte(字節)

人類視覺系統HVS構成與特點:

即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹_6.png

  • 對高頻信息不敏感

  • 對高對比度更敏感

  • 對亮度信息比色度信息更敏感

  • 對運動的信息更敏感

即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹_7.png 

針對HVS的特點,數字視頻系統的設計應該考慮哪些因素?

  • 丟棄高頻信息,只編碼低頻信息

  • 提高邊緣信息的主觀質量

  • 降低色度的解析度

  • 對感興趣區域(Region of Interesting,ROI)進行特殊處理

即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹_8.png

衡量視頻,又是用的什么指標參數呢?最主要的一個,就是幀率(Frame Rate)。

在視頻中,一個幀(Frame)就是指一幅靜止的畫面。幀率,就是指視頻每秒鐘包括的畫面數量(FPS,Frame per second)。

幀率越高,視頻就越逼真、越流暢


視頻編解碼之數字視頻介紹

通常來說,視頻里面的冗余信息包括:

編解碼中的關鍵技術

視頻編碼技術優先消除目標,就是空間冗余和時間冗余

所謂編碼算法,就是尋找規律,構建模型。誰能找到更精準的規律,建立更高效的模型,誰就是厲害的算法。


即時通訊音視頻開發(一):視頻編解碼之理論概述_3.png 即時通訊音視頻開發(一):視頻編解碼之理論概述_4.png

編碼層次的組成

  • 序列(Sequence)指一段連續編碼的并具有相同參數的視頻圖像。

    • 序列起始碼是指專有的一段比特串,標識一個序列的壓縮數據的開始。如MPEG-2的序列起始碼為十六進制數000001(B3)。

    • 序列頭是指記錄序列信息,包含檔次(Profile),級別(Level),寬度,高度,是否是逐行序列,幀率等內容。

    • 序列結束碼是指專有的一段比特串,標識該序列的壓縮數據的結束。如MPEG-2的序列結束碼為十六進制數000001(B7)。

  • 圖像組(Group of Pictures,GOP)

  • 圖像(Picture)

  • 條帶(Slice)多個宏塊的組合。

    • 條帶起始碼:專有的一段比特串,標識一個條帶的壓縮數據的開始。如MPEG-2的條帶起始碼為十六進制數000001(0~AF)。

    • 條帶頭:記錄當前圖像的相關信息。含條帶位置,條帶量化參數,宏塊編碼技術標識等。

  • 宏塊(Macroblock,MB)16x16的像素塊(對亮度而言)

    • 宏塊內容:宏塊編碼類型,編碼模式,參考幀索引,運動矢量信息,宏塊編碼系數等。

  • 塊(Block) 8x8或4x4塊的變換量化系數的熵編碼數據。

    • CBP (Coded Block Patten):用來指示塊的變換量化系數是否全為零。

    • 對于YUV(4:2:0)編碼,CBP通常6比特長,每個比特對應一個塊,當某一塊的變換量化系數全為零時,其對應比特位值為0,否則為1。

    • 每個塊的變換量化系數的最后用一個EOB (End of Block)符號來標識。

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_2.png 

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_5.png 即時通訊音視頻開發(三):視頻編解碼之編碼基礎_7.png

視頻編解碼關鍵技術 

  • 預測:通過幀內預測和幀間預測降低視頻圖像的空間冗余和時間冗余。

  • 變換:通過從時域到頻域的變換,去除相鄰數據之間的相關性,即去除空間冗余。

  • 量化:通過用更粗糙的數據表示精細的數據來降低編碼的數據量,或者通過去除人眼不敏感的信息來降低編碼數據量。

  • 掃描:將二維變換量化數據重新組織成一維的數據序列。

  • 熵編碼:根據待編碼數據的概率特性減少編碼冗余。

預測

如果一段1分鐘的視頻,有十幾秒畫面是不動的,或者,有80%的圖像面積,整個過程都是不變(不動)的。那么,是不是這塊存儲開銷,就可以節約掉了?我們需要準確預測其冗余信息并對其消除。

空間預測

利用圖像空間相鄰像素的相關性來預測的方法,圖像空間相鄰像素具有很強的相關性,幀內預測技術去除空間冗余。

  • 幀內預測技術:利用當前編碼塊周圍已經重構出來的像素預測當前塊

  • Intra圖像編碼(I幀)

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_1.png 

亮度預測模式

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_2.png 

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_3.png 即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_4.png 


色度預測模式

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_5.png即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_6.png

時間預測

視頻圖像在時間上有較強的相關性,即存在時間冗余。去除時間冗余的編碼技術有:運動估計(Motion Estimation,ME)、運動補償(Motion Compensation,MC)。

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

  • Inter圖像編碼前向預測編碼圖像(P幀),雙向預測編碼圖像(B幀)

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_7.png即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_21.png 

運動模型

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_8.png 

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_9.png即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_10.png

 匹配準則

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_11.png

運動估計

目的是去除視頻圖像的時間冗余。運動估計在搜索范圍內為當前塊尋找匹配最好的預測塊,全搜索方式的運動估計計算復雜度高。

 即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_12.png

全局運動估計

基于全局仿射運動模型。預測精度不如基于塊的運動估計。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)

搜索算法復雜度比較

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_13.png 

分像素運動估計與運動補償

時域運動位置更可能在整象素之間,即分像素上。利用相鄰的整象素可以估計出分象素的值:常用線性或雙線性插值得到分象素的值。分象素運動估計有更高的預測精度,但復雜度也更高:1/2分象素運動估計,圖像存儲空間增加4倍,運動矢量需要放大2倍,1/4分象素運動估計,圖像存儲空間增加16倍,運動矢量需要放大4倍,計算復雜度也成倍增加。

分像素運動估計與運動補償

分像素插值

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_15.png 

圖像分塊編碼

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_18.png即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_19.png

視頻內容的運動非常復雜,圖像分塊編碼可以更好的提高運動預測精度,提高壓縮效率。要在編碼塊大小和附信息(MV,Mode)編碼比特數之間權衡,小的編碼塊大小會有更好的預測但有更多的附信息比特數。

即時通訊音視頻開發(四):視頻編解碼之預測技術介紹_20.png即時通訊音視頻開發(三):視頻編解碼之編碼基礎_6.png

幀內預測

  • I幀圖像的每個宏塊都采用幀內(Intra)預測編碼模式。

  • 宏塊分成8x8或者4x4塊,對每個塊采用幀內預測編碼,稱作Intra8x8或者Intra4x4。

  • 幀內預測有多個預測方向:水平,垂直,左下,右上。

  • 幀內預測還有直流(DC)預測。

  • 色度塊預測還有平面預測。

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_10.png 


量化

將含有大量的數據集合映射到含有少量的數據集合中。

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_11.png 

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_12.png即時通訊音視頻開發(三):視頻編解碼之編碼基礎_13.png 

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_14.png 即時通訊音視頻開發(三):視頻編解碼之編碼基礎_15.png 

一般情況下量化后高頻部分包含大量的零系數

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_16.png

量化對主觀質量的影響 

即時通訊音視頻開發(三):視頻編解碼之編碼基礎_17.png

如何理解壓縮碼流? 

  1. 語法:碼流中各個元素的位置關系。

    如:01001001…,表示圖像編碼類型(01),宏塊類型(00),編碼系數1001等。

  2. 語義:每個語法元素所表達的意義。

    例如:圖像編碼類型。I幀(00),P幀(01),B幀(10)

I幀,是自帶全部信息的獨立幀,是最完整的畫面(占用的空間最大),無需參考其它圖像便可獨立進行解碼。視頻序列中的第一個幀,始終都是I幀。

P幀,“幀間預測編碼幀”,需要參考前面的I幀和/或P幀的不同部分,才能進行編碼。P幀對前面的P和I參考幀有依賴性。但是,P幀壓縮率比較高,占用的空間較小。

B幀,“雙向預測編碼幀”,以前幀和后作為參考幀。不僅參考前面,還參考后面的幀,所以,它的壓縮率最高,可以達到200:1。不過,因為依賴后面的幀,所以不適合實時傳輸(例如視頻會議)。

通過對幀的分類處理,可以大幅壓縮視頻的大小。畢竟,要處理的對象,大幅減少了(從整個圖像,變成圖像中的一個區域)。

我們來通過一個例子看一下,這有兩個幀:

人在動,背景是沒有在動的。第一幀是I幀,第二幀是P幀。兩個幀之間的差值。也就是說,圖中的部分像素,進行了移動,移動軌跡如下:


當然了,如果總是按照像素來算,數據量會比較大,所以,一般都是把圖像切割為不同的“塊(Block)”或“宏塊(MacroBlock)”,對它們進行計算。一個宏塊一般為16像素×16像素。

  • 對I幀的處理,是采用幀內編碼方式,只利用本幀圖像內的空間相關性。

  • 對P幀的處理,采用幀間編碼(前向運動估計),同時利用空間和時間上的相關性。簡單來說,采用運動補償(motion compensation)算法來去掉冗余信息。


需要特別注意,I幀(幀內編碼),雖然只有空間相關性,但整個編碼過程也不簡單。

如何理解幀和場圖像?

一幀圖像包括兩場——頂場,底場:

即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹_y3.png 即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹_y4.png

逐行與隔行圖像

逐行圖像是指:一幀圖像的兩場在同一時間得到,ttop=tbot。

隔行圖像是指:一幀圖像的兩場在不同時間得到, ttop≠tbot。

音頻碼率控制

語音編碼器

語音編碼器分為三種類形:(a)波形編器 、(b)聲碼器 、(c)混合編碼器 。

波形編碼器以構造出背景噪單在內的模擬波形為目標。作用于所有輸入信號,因此會產生高質量的樣值并且耗費較高的比特率。 而聲碼器 (vocoder)不會再生原始波形。這組編碼器 會提取一組參數 ,這組參數被送到接收端,用來導出語音產生模形。聲碼器語音質量不夠好。混合編碼器,它融入了波形編碼器和聲器的長處。

波形編碼器的設計常獨立于信號。所以適應于各種信號的編碼而不限于語音。

時域編碼:

  1. PCM:pulse code modulation,是最簡單的編碼方式。僅僅是對信號的離散和量化,常采用對數量化。

  2. DPCM:differential pulse code modulation,差分脈沖編碼,只對樣本之間的差異進行編碼。前一個或多個樣本用來預測當前樣本值。用來做預測的樣本越多,預測值越精確。真實值和預測值之間的差值叫殘差,是編碼的對象。

    即時通訊音視頻開發(七):音頻基礎及編碼原理入門_5.gif

  3. ADPCM:adaptive differential pulse code modulation,自適應差分脈沖編碼。即在DPCM的基礎上,根據信號的變化,適當調整量化器和預測器,使預測值更接近真實信號,殘差更小,壓縮效率更高。

頻域編碼:

頻域編碼是把信號分解成一系列不同頻率的元素,并進行獨立編碼。

  1. sub-band coding:子帶編碼是最簡單的頻域編碼技術。是將原始信號由時間域轉變為頻率域,然后將其分割為若干個子頻帶,并對其分別進行數字編碼的技術。它是利用帶通濾波器(BPF)組把原始信號分割為若干(例如m個)子頻帶(簡稱子帶)。將各子帶通過等效于單邊帶調幅的調制特性,將各子帶搬移到零頻率附近,分別經過BPF(共m個)之后,再以規定的速率(奈奎斯特速率)對各子帶輸出信號進行取樣,并對取樣數值進行通常的數字編碼,其設置m路數字編碼器。將各路數字編碼信號送到多路復用器,最后輸出子帶編碼數據流。對不同的子帶可以根據人耳感知模型,采用不同量化方式以及對子帶分配不同的比特數。

  2. transform coding:DCT編碼。

聲碼器

  • channel vocoder: 利用人耳對相位的不敏感。

  • homomorphic vocoder:能有效地處理合成信號。

  • formant vocoder: 以用語音信號的絕大部分信息都位于共振峰的位置與帶寬上。

  • linear predictive vocoder:最常用的聲碼器。

混合編碼器

波形編碼器試圖保留被編碼信號的波形,能以中等比特率(32kbps)提供高品質語音,但無法應用在低比特率場合。聲碼器試圖產生在聽覺上與被編碼信號相似的信號,能以低比特率提供可以理解的語音,但是所形成的語音聽起來不自然。

混合編碼器結合了2者的優點:

  • RELP: 在線性預測的基礎上,對殘差進行編碼。機制為:只傳輸小部分殘差,在接受端重構全部殘差(把基帶的殘差進行拷貝)。

  • MPC: multi-pulse coding,對殘差去除相關性,用于彌補聲碼器將聲音簡單分為voiced和unvoiced,而沒有中間狀態的缺陷。

  • CELP: codebook excited linear prediction,用聲道預測其和基音預測器的級聯,更好逼近原始信號。

  • MBE: multiband excitation,多帶激勵,目的是避免CELP的大量運算,獲得比聲碼器更高的質量。

視頻碼率控制

受到緩沖區,帶寬的限制,編碼碼率不能無限制的增長,因此需要通過碼率控制來將編碼碼流控制在目標碼率范圍內。

一般通過調整量化參數的手段控制碼率:

  • 幀級控制

  • 條帶級控制

  • 宏塊級控制

碼率控制考慮的問題:

防止碼流有較大的波動,導致緩沖區發生溢出,

同時保持緩沖區盡可能的充滿,讓圖像質量盡可能的好而且穩定

CBR(Constant Bit Rate):比特率穩定,但圖像質量變化大。VBR(Variable Bit Rate):比特率波動大,但圖像質量穩定。

碼率控制算法:

  • 碼率分配

  • 碼率控制

碼率控制屬于非標準技術,編碼端有,解碼端沒有。

如何衡量和評價編解碼的效果呢?

一般來說,分為客觀評價和主觀評價。客觀評價,就是拿數字來說話。例如計算“信噪比/峰值信噪比”。

信噪比的計算,我就不介紹了,丟個公式,有空可以自己慢慢研究...

視頻編碼標準

國際電報聯盟(International Telegraph Union ,ITU)

1865年5月17日,為了順利實現國際電報通信,法、德、俄、意、奧等20個歐洲國家的代表在巴黎簽訂了《國際電報公約》,國際電報聯盟(International Telegraph Union ,ITU)也宣告成立。 隨著電話與無線電的應用與發展,ITU的職權不斷擴大。1906年,德、英、法、美、日等27個國家的代表在柏林簽訂了《國際無線電報公約》。1932年,70多個國家的代表在西班牙馬德里召開會議,將《國際電報公約》與《國際無線電報公約》合并, 制定《國際電信公約》,并決定自1934年1月1日起正式改稱為“國際電信聯盟” ,也就是現在的ITU。ITU是聯合國下屬的一個專門機構,其總部在瑞士的日內瓦。ITU下屬有三個部門,分別是ITU-R(前身是國際無線電咨詢委員會CCIR)、ITU-T(前身是國際電報電話咨詢委員會CCITT)、ITU-D。

國際標準化組織ISO/國際電工委員會IEC

ISO大家都知道,就是推出ISO9001質量認證的那個“國際標準化組織”。IEC,是“國際電工委員會”。1988年,ISO和IEC聯合成立了一個專家組,負責開發電視圖像數據和聲音數據的編碼、解碼和它們的同步等標準。這個專家組,就是大名鼎鼎的MPEG,Moving Picture Expert Group(動態圖像專家組)

  • ITU提出了H.261、H.262、H.263、H.263+、H.263++,這些統稱為H.26X系列,主要應用于實時視頻通信領域,如會議電視、可視電話等。

  • ISO/IEC提出了MPEG1、MPEG2、MPEG4、MPEG7、MPEG21,統稱為MPEG系列。

ITU和ISO/IEC一開始是各自搗鼓,后來,兩邊成立了一個聯合小組,名叫JVT(Joint Video Team,視頻聯合工作組

JVT致力于新一代視頻編碼標準的制定,后來推出了包括H.264在內的一系列標準。作為一種的編碼標準,相比H.264有極大的性能提升,目前已經成為最新視頻編碼系統的標配。

大家特別注意一下上圖里面的HEVC,也就是現在風頭正盛的H.265。

視頻封裝

對于任何一部視頻來說,只有圖像,沒有聲音,肯定是不行的。所以,視頻編碼后,加上音頻編碼,要一起進行封裝。封裝,就是封裝格式,簡單來說,就是將已經編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中。再通俗點,視頻軌相當于飯,而音頻軌相當于菜,封裝格式就是一個飯盒,用來盛放飯菜的容器。目前主要的視頻容器有如下:MPG、VOB、MP4、3GP、ASF、RMVB、WMV、MOV、Divx、MKV、FLV、TS/PS等。

轉載本站文章《視頻采樣,量化,編碼,壓縮,解碼相關技術原理學習筆記》, 請注明出處:http://www.qsexmk.tw/html/theory/CG-CV-IP/8147.html