文章目錄
- 前戲
- 編解碼技術流程
- 主流視頻編碼標準
- 視頻傳輸面臨的問題
- 視頻傳輸差錯控制
- 視頻傳輸Qos質量保證參數
- 人類視覺系統HVS 以及相應編碼措施
- 正餐
- 編碼層次與碼流結構
- PB幀編碼
- IBBP序列編碼結構
- 圖像編碼結構
- 條帶編碼結構
- 宏塊編碼結構
- 塊編碼結構
- 預測技術
- 碼率控制
- 實例H264
前戲
編解碼技術流程
1、預測:
去除空間冗余、時間冗余;
分為幀內預測、幀間預測
2、變換:
從時域變換到頻域,去除相鄰數據之間的相關性,去除空間冗余,分為:DCT余弦變換、小波變換
3、量化:
去除視覺冗余,通過降低圖像質量提高壓縮比
4、掃描:
將二位變換量化數據重新組織成一維的數據序列
4、熵編碼:
去除編碼冗余:變長編碼,算術編碼,霍夫曼編碼
霍夫曼編碼可以參考一下:
編解碼流程如下:
主流視頻編碼標準
- MPEG-2
- MPEG-4 Simple Profile
- H.264/AVC
- AVS
- VC-1
視頻傳輸面臨的問題
傳輸系統不可靠:
1、帶寬限制
2、信號衰減
3、噪聲干擾
4、傳輸延遲
傳輸會出現的問題:
1、不能解碼出正確的視頻
2、視頻播放延遲
視頻傳輸差錯控制
差錯控制解決了視頻傳輸過程中由于數據丟失or延遲導致的問題。
主要技術有:
1、信道編碼差錯控制技術
2、編碼器差錯恢復
3、解碼器差錯隱藏
視頻傳輸Qos質量保證參數
1、數據包的端到端延遲
2、帶寬:bit/s
3、數據包的流失率
4、數據包的延遲時間的波動
人類視覺系統HVS 以及相應編碼措施
HVS的構成:眼鏡、神經、大腦
HVS的特點:
1、對高頻信息不敏感
2、對高對比度更敏感
3、對亮度信息比色度信息更敏感
4、對運動信息更敏感
所以數字視頻系統的設計應該考慮:
1、丟棄高頻信息,只編碼低頻
2、提高邊緣信息的主觀質量
3、降低色度的解析度
4、對ROI區域進行特殊處理,如人臉部分
正餐
編碼層次與碼流結構
1、序列
2、圖像組
3、圖像
4、條帶
5、宏塊
6、塊
PB幀編碼
當前幀:將要編碼的圖像
參考幀:預測塊所在的圖像
前向預測幀(P幀):
雙向預測幀(B幀):
IBBP序列編碼結構
序列:指的是一段連續編碼的并具有相同參數的視頻圖像
序列起始碼:指的是轉悠的一段比特串,表示一個序列的壓縮數據的開始。如MPEG-2的序列起始碼為16進制數000001(B3)
序列頭:指的是記錄序列的信息,包含檔次(Profile)、級別(Level)、寬度、高度、是否逐行序列、幀率等內容
序列結束碼:指的是一段專有的比特串,標識該序列的壓縮數據的結束。如MPEG-2的序列結束碼為16進制數000001(B7)
一段視頻將有一段序列幀組成
圖像編碼結構
包括了:圖像、圖像起始碼、圖像頭
圖像起始碼:一段比特串,標識一個圖像的壓縮數據的開始,如MPEG-2的圖像起始碼為16進制數000000(00)
圖像頭:記錄圖像信息,包含圖像編碼類型、圖像距離、圖像編碼結構、圖像是否為逐行掃描
條帶編碼結構
條帶:多個宏塊的組合
條帶起始碼:專有的一段比特串,標識一個條帶的壓縮數據的開始。如MPEG-2的條帶起始碼為16進制數000001(0~AF)
條帶頭:記錄當前的條帶相關信息,如:條帶位置、條帶量化參數、宏塊編碼技術標識
一個圖像會被劃分為各個條帶
宏塊編碼結構
宏塊:16*16的像素塊
宏塊內容:宏塊的編碼類型、編碼模式、參考幀索引、運動矢量信息、宏塊編碼系數等
塊編碼結構
1、88或者44的變換量化系數的熵編碼數據
2、CBP(code block pattern):用來指示塊的變換量化系數是否全為零。
對于YUV(4:2:0)編碼,CBP通常為6bit長,每一個bit對應了一個塊,當某一塊的變換量化系數全為0,其對應的比特位為0,否則為1
3、每個塊的變換量化系數的最后用一個EOB(end of block)符號來標識
預測技術
幀內預測,即空間預測,利用當前編碼塊周圍已經重構出來的像素預測當前塊
圖像編碼:I幀
幀間預測,即時間預測,利用時間上相鄰圖像的相關性來預測
包括:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)
圖像編碼:前向預測編碼圖像(P幀)、雙向預測編碼圖像(B幀)
碼率控制
受到緩沖區、帶寬限制,編碼碼率不能無限制增長,需要通過碼率控制將編碼碼流控制在目標范圍內。
一般調整量化參數的手段控制碼率:
幀級控制
條帶級控制
宏塊控制
需要考慮的問題:
1、防止碼流有較大波動,導致緩沖區發生溢出
2、同時保持緩沖區盡可能充滿,讓圖像質量盡可能好且穩定
CBR(constant bit rate):比特率穩定,但圖像質量變化大。
VBR(variable bit rate):比特率波動大,但是圖像質量穩定
碼率控制算法分為碼率控制和分配,碼率控制屬于非標準技術,編碼端有,解碼端沒有。
實例H264
H.264是在MPEG-4技術的基礎之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內預測、變換和反變換、量化和反量化、環路濾波、熵編碼。
H.264與以前的國際標準如H.263和MPEG-4相比,最大的優勢體現在以下四個方面:
- 幀內預測編碼
幀內編碼用來縮減圖像的空間冗余。為了提高H.264幀內編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關性,相鄰的宏塊通常含有相似的屬性。因此,在對一給定宏塊編碼時,首先可以根據周圍的宏塊預測(典型的是根據左上角的宏塊,因為此宏塊已經被編碼處理),然后對預測值與實際值的差值進行編碼,這樣,相對于直接對該幀編碼而言,可以大大減小碼率。
- 幀間預測編碼
幀間預測編碼利用連續幀中的時間冗余來進行運動估計和補償。H.264的運動補償支持以往的視頻編碼標準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀——SP幀,如圖3所示。碼流中包含SP幀后,能在有類似內容但有不同碼率的碼流之間快速切換,同時支持隨機接入和快速回放模式。
- 整數變換
在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換,因為取舍而存在誤差的問題。與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換后的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響并不大。此外,整數DCT變換還具有減少運算量和復雜度,有利于向定點DSP移植的優點。
- 量化
H.264中可選32種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的復合率遞進的,而不是一個固定常數。
在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描。大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊內,有助于提高編碼效率。
- 熵編碼
視頻編碼處理的最后一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自適應二進制算術編碼(CABAC)。
在H.263等標準中,根據要編碼的數據類型如變換系數、運動矢量等,采用不同的VLC碼表。H.264中的UVLC碼表提供了一個簡單的方法,不管符號表述什么類型的數據,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符號間的相關性,在中高碼率時效果不是很好。
因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型。為了提高算術編碼的效率,通過內容建模的過程,使基本概率模型能適應隨視頻幀而改變的統計特性。內容建模提供了編碼符號的條件概率估計,利用合適的內容模型,存在于符號間的相關性可以通過選擇目前要編碼符號鄰近的已編碼符號的相應概率模型來去除,不同的句法元素通常保持不同的模型。
其優勢總結如下:
1.低碼率(Low Bit Rate):
和MPEG2和MPEG4 ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮后的數據量只有MPEG2的1/8,MPEG4的1/3。
2.高質量的圖象:
H.264能提供連續、流暢的高質量圖象(DVD質量)。
3.容錯能力強:
H.264提供了解決在不穩定網絡環境下容易發生的丟包等錯誤的必要工具。
4.網絡適應性強:
H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。
H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標準壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標準壓縮后變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。
H.264 草案中包含了用于差錯消除的工具,便于壓縮視頻在誤碼、丟包多發環境中傳輸,如移動信道或IP信道中傳輸的健壯性。
為了抵御傳輸差錯,H.264視頻流中的時間同步可以通過采用幀內圖像刷新來完成,空間同步由條結構編碼(slice structured coding)來支持。同時為了便于誤碼以后的再同步,在一幅圖像的視頻數據中還提供了一定的重同步點。另外,幀內宏塊刷新和多參考宏塊允許編碼器在決定宏塊模式的時候不僅可以考慮編碼效率,還可以考慮傳輸信道的特性。
除了利用量化步長的改變來適應信道碼率外,在H.264中,還常利用數據分割的方法來應對信道碼率的變化。從總體上說,數據分割的概念就是在編碼器中生成具有不同優先級的視頻數據以支持網絡中的服務質量QoS。例如采用基于語法的數據分割(syntax-based data partitioning)方法,將每幀數據的按其重要性分為幾部分,這樣允許在緩沖區溢出時丟棄不太重要的信息。還可以采用類似的時間數據分割(temporal data partitioning)方法,通過在P幀和B幀中使用多個參考幀來完成。
在無線通信的應用中可以通過改變每一幀的量化精度或空間/時間分辨率來支持無線信道的大比特率變化。可是,在多播的情況下,要求編碼器對變化的各種比特率進行響應是不可能的。因此,不同于MPEG-4中采用的精細分級編碼FGS(Fine Granular Scalability)的方法(效率比較低),H.264采用流切換的SP幀來代替分級編碼。
H.264已被廣泛應用于實時視頻應用中,相比以往的方案使得在同等速率下,H.264能夠比H.263減小50%的碼率。也就是說,用戶即使是只利用 384kbit/s的帶寬,就可以享受H.263下高達 768kbit/s的高質量視頻服務。H.264 不但有助于節省龐大開支,還可以提高資源的使用效率,同時令達到商業質量的實時視頻服務擁有更多的潛在客戶。