視頻壓縮編碼
視頻壓縮編碼
視頻壓縮的目標是在儘可能保證視覺效果的前提下減少視頻數據率。視頻壓縮比一般指壓縮后的數據量與壓縮前的數據量之比。
由於視頻是連續的靜態圖像,因此其壓縮編碼演演算法與靜態圖像的壓縮編碼演演算法有某些共同之處,但是運動的視頻還有其自身的特性,因此在壓縮時還應考慮其運動特性才能達到高壓縮的目標。在視頻壓縮中常需用到以下的一些基本概念:
一、有損和無損壓縮:在視頻壓縮中有損(Lossy )和無損(Lossless)的概念與靜態圖像中基本類似。無損壓縮也即壓縮前和解壓縮后的數據完全一致。多數的無損壓縮都採用RLE行程編碼演演算法。有損壓縮意味著解壓縮后的數據與壓縮前的數據不一致。在壓縮的過程中要丟失一些人眼和人耳所不敏感的圖像或音頻信息,而且丟失的信息不可恢復。幾乎所有高壓縮的演演算法都採用有損壓縮,這樣才能達到低數據率的目標。丟失的數據率與壓縮比有關,壓縮比越大,丟失的數據越多,解壓縮后的效果一般越差。此外,某些有損壓縮演演算法採用多次重複壓縮的方式,這樣還會引起額外的數據丟失。
二、幀內和幀間壓縮:幀內(Intraframe)壓縮也稱為空間壓縮(Spatial compression)。當壓縮一幀圖像時,僅考慮本幀的數據而不考慮相鄰幀之間的冗餘信息,這實際上與靜態圖像壓縮類似。幀內一般採用有損壓縮演演算法,由於幀內壓縮時各個幀之間沒有相互關係,所以壓縮后的視頻數據仍可以以幀為單位進行編輯。幀內壓縮一般達不到很高的壓縮。
採用幀間(Interframe)壓縮是基於許多視頻或動畫的連續前後兩幀具有很大的相關性,或者說前後兩幀信息變化很小的特點。也即連續的視頻其相鄰幀之間具有冗餘信息,根據這一特性,壓縮相鄰幀之間的冗餘量就可以進一步提高壓縮量,減小壓縮比。幀間壓縮也稱為時間壓縮(Temporal compression),它通過比較時間軸上不同幀之間的數據進行壓縮。幀間壓縮一般是無損的。幀差值(Frame differencing)演演算法是一種典型的時間壓縮法,它通過比較本幀與相鄰幀之間的差異,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數據量。
三、對稱和不對稱編碼:對稱性(symmetric)是壓縮編碼的一個關鍵特徵。對稱意味著壓縮和解壓縮佔用相同的計算處理能力和時間,對稱演演算法適合於實時壓縮和傳送視頻,如視頻會議應用就以採用對稱的壓縮編碼演演算法為好。而在電子出版和其它多媒體應用中,一般是把視頻預先壓縮處理好,爾後再播放,因此可以採用不對稱(asymmetric)編碼。不對稱或非對稱意味著壓縮時需要花費大量的處理能力和時間,而解壓縮時則能較好地實時回放,也即以不同的速度進行壓縮和解壓縮。一般地說,壓縮一段視頻的時間比回放(解壓縮)該視頻的時間要多得多。例如,壓縮一段三分鐘的視頻片斷可能需要10多分鐘的時間,而該片斷實時回放時間只有三分鐘。
目前有多種視頻壓縮編碼方法,但其中最有代表性的是MPEG數字視頻格式和AVI數字視頻格式。
H.264和H.261、H.263一樣,也是採用DCT變換編碼加DPCM的差分編碼,即混合編碼結構。同時,H.264在混合編碼的框架下引入了新的編碼方式,提高了編碼效率,更貼近實際應用。
H.264沒有繁瑣的選項,而是力求簡潔的“回歸基本”,它具有比H.263++更好的壓縮性能,又具有適應多種通道的能力。
H.264的應用目標廣泛,可滿足各種不同速率、不同場合的視頻應用,具有較好的抗誤碼和抗丟包的處理能力。
H.264的基本系統無需使用版權,具有開放的性質,能很好地適應IP和無線網路的使用,這對目前網際網路傳輸多媒體信息、移動網中傳輸寬頻信息等都具有重要意義。
儘管H.264編碼基本結構和H.261、H.263是類似的,但它在很多環節做了改進,現列舉如下。
1.多種更好的運動估計
在H.263中採用了半像素估計,在H.264中則進一步採用1/4像素甚至1/8像素的運動估計。即真正的運動矢量的位移可能是以1/4甚至1/8像素為基本單位的。顯然,運動矢量位移的精度越高,則幀間剩餘誤差越小,傳輸碼率越低,即壓縮比越高。
在H.264中採用了6階FIR濾波器的內插獲得1/2像素位置的值。當1/2像素值獲得后, 1/4像素值可通過線性內插獲得,對於4:1:1的視頻格式,亮度信號的1/4 像素精度對應於色度部分的1/8像素的運動矢量,因此需要對色度信號進行1/8像素的內插運算。
理論上,如果將運動補償的精度增加一倍(例如從整像素精度提高到1/2像素精度),可有0.5bit/Sample的編碼增益,但實際驗證發現,在運動矢量精度超過1/8像素后,系統基本上就沒有明顯增益了,因此,在H.264中,只採用了1/4像素精度的運動矢量模式,而不是採用1/8像素的精度。
在H.264的預測模式中,一個宏塊(MB)可劃分成7種不同模式的尺寸,這種多模式的靈活、細微的宏塊劃分,更切合圖像中的實際運動物體的形狀,於是,在每個宏塊中可包含有1、2、4、8或16個運動矢量。
在H.264中,可採用多個參數幀的運動估計,即在編碼器的緩存中存有多個剛剛編碼好的參數幀,編碼器從其中選擇一個給出更好的編碼效果的作為參數幀,並指出是哪個幀被用於預測,這樣就可獲得比只用上一個剛編碼好的幀作為預測幀的更好的編碼效果。