視頻編解碼系列(一)壓縮編碼基礎常識


一:視頻為什么可以被壓縮

視頻信息之所以存在大量可以被壓縮的空間,是因為其中本身就存在大量的數據冗余。

其主要類型有以下四種:

時間冗余:視頻相鄰的兩幀之間內容相似,或者幀直接存在運動關系
空間冗余:視頻的某一幀內部的相鄰像素存在相似性,或者變化的相關性
編碼冗余:視頻中不同數據出現的概率不同(所以我們可以進行壓縮編碼)
視覺冗余:觀眾的視覺系統對視頻中不同的部分敏感度不同,比如YUV中對Y亮度更加敏感

針對這些不同類型的冗余信息,在各種視頻編碼的標准算法中都有不同的技術專門應對,以通過不同的角度提高壓縮的比率。

二:視頻編碼標准化組織

從事視頻編碼算法的標准化組織主要有兩個,ITU-TISO

ITU-T,全稱International Telecommunications Union - Telecommunication Standardization Sector,即國際電信聯盟——電信標准分局。該組織下設的VCEG(Video Coding Experts Group)主要負責面向實時通信領域的標准制定,主要制定了H.261/H263/H263+/H263++等標准。

ISO,全稱International Standards Organization,即國際標准化組織。該組織下屬的MPEG(Motion Picture Experts Group),即移動圖像專家組主要負責面向視頻存儲、廣播電視、網絡傳輸的視頻標准,主要制定了MPEG-1/MPEG-4等。

實際上,真正在業界產生較強影響力的標准均是由兩個組織合作產生的。比如MPEG-2、H.264/AVC和H.265/HEVC等

三:主流視頻編解碼標准的發展

(一)視頻編解碼標准發展總括

視頻編碼標准主要由前面提到的兩個國際組織負責制定:國際電信聯盟ITU-T和國際標准化組織ISO。

目前影響力最強的視頻編碼標准基本均出自這兩個組織:

除了上述兩個組織之外,其他比較有影響力的標准還有:

Google:VP8/VP9;
Microsoft : VC-1;
國產自主標准:AVS/AVS+/AVS2;

(二)H261標准(基於波形的混合編碼的開始)

從H.261開始,視頻編碼方法采用了沿用至今的基於波形的混合編碼方法

H.261標准主要目標是用於視頻會議和可視電話等高實時性、低碼率的視頻圖像傳輸場合

H261中CIF的由來:

在H.261標准產生的時代,由於各國的電視制式不一致,因此不能直接互通。為了解決數據源格式不兼容的問題,H.261定義了一種公共中間格式CIF(Common Intermediate Format)。

編碼的目標格式首選轉換為CIF格式進行編碼和傳輸,接收端進行解碼后再轉換為各自的格式。

H.261規定的CIF格式視頻的亮度分辨率為352×288,QCIF格式的亮度分辨率為176×144。

H261視頻編解碼器結構:

H261信源編解碼器結構:為后面編解碼方法奠定了基礎,都是基於此進行改進,沒有太大變化

幀內編碼/幀間編碼判定:

根據幀與幀之間的相關性判定——相關性高使用幀間編碼,相關性低使用幀內編碼。

幀內編碼:

對於幀內編碼幀,直接使用DCT編碼8×8的像素塊。

幀間編碼/運動估計

使用以宏塊為基礎的運動補償預測編碼
當前宏塊從參考幀中查找最佳匹配宏塊,並計算其相對偏移量(Vx, Vy)作為運動矢量
編碼器使用DCT、量化編碼當前宏塊和預測宏塊的殘差信號

環路濾波器:

實際上是一個數字低通濾波器,濾除不必要的高頻信息,以消除方塊效應;

H261復合解碼器結構:將不同層次的語法元素,編碼為H261格式的碼流

經過H.261碼流復合器輸出的碼流,總共可以分為四層,從上到下分別為幀層、塊組層、宏塊層和塊層。每一層按照不同的封裝格式包含了頭信息和下一層的結構。

幀層:

由幀首和塊組數據構成;幀首包括幀起始碼( PSC)、幀計數碼( TR)、幀類型( PTYPE)等;

塊組層:

由塊組首和宏塊數據組成;塊組首包括組起始碼( GBSC)、塊組編號碼( GN)、塊組量化步長等;

宏塊層(Macroblock,MB):

由宏塊首和塊數據構成;宏塊首包括宏塊地址碼、宏塊類型、宏塊量化步長、運動矢量數據、編碼模式等;

塊層:

包括每個8×8塊的DCT系數按之字形掃描后的熵編碼碼流,以塊結束符結尾 

(三)H263標准(H261改進標准)

同樣以低碼率視頻通信為目標,但是具有更好的壓縮效率。與H.261相比,H.263支持更多種分辨率的圖像格式:

Sub-QCIF: 128×96
QCIF: 176×144
CIF:352×288
------下方清晰度更高-----
4CIF:704×576 16CIF:1480×1152

除了更多的分辨率選擇之外,視頻信源編碼算法也相比H.261實現了多項改進:

運動矢量:相比於H.261H.263的運動矢量分配更加靈活。在H.261中,每一個MB分配一個運動矢量;H.263中支持對每一個8×8像素塊各自使用一個運動矢量。
MV精度:H.261只支持整數像素的運動矢量,在H.263中運動矢量精度為1/2像素。
雙向預測模式:H.263的幀間編碼幀除了P幀之外,也支持B幀,使用前后雙向預測模式。
熵編碼:采用了算術編碼,以較高的運算復雜度換取更高的編碼效率。

(四)MPEG-1標准(被MPEG-2淘汰)

MPEG-1是國際標准化組織ISO下屬的移動圖像專家組負責制定的早期視頻壓縮標准主要用於視頻信息的存儲、廣播電視和網絡傳輸應用

主要用於在VCD中存儲音視頻信息,保存的視頻信息便使用MPEG-1標准進行壓縮,其碼率約為1.2~1.5Mb/s。

MPEG-1標准所支持的圖像類型與H.263類似,支持I、B、P幀類型

I幀:幀內編碼幀,采用幀內編碼,可作為P/B幀的參考幀;
P幀:前向預測幀,采用幀間編碼,以I/P幀作為參考幀;
B幀(非參考幀):雙向預測幀,參考前后兩個方向的參考幀;

在MPEG-1中圖像的顯示順序為:

在碼流的結構上,MPEG-1采用了與H.261類似的分層碼流結構。

MPEG-1相比於H.261增加了條帶層,每一個宏塊所有的編碼操作只能在一個條帶內實現,條帶層可以有效防止編碼錯誤在一幀內擴散。

MPEG-1標准的碼流結構如下圖所示:

(五)MPEG-2標准(兼容MPEG-1)

MPEG-2標准是ITU-T和ISO合作制定的編碼標准,其視頻部分也稱作H.262標准,其標准編號為ISO-13818。

ISO-13818是一系列標准的集合,包括了系統、視頻、音頻、一致性、參考軟件等10個部分。

MPEG-2標准在數字電視廣播和音視頻媒體容器等場合得到了廣泛應用,常見的DVD視盤采用的就是MPEG-2視頻編碼方法。(DVD可以播放VCD,因為MPEG-2兼容了MPEG-1)

MPEG-2格式的主要改進之處之一是支持支持逐行或者隔行掃描視頻,使用基於幀或場的編碼

在MPEG-2中,為適應隔行掃描視頻信號的特點,在DCT、預測和運動估計算法中對幀和場進行了不同的處理。

另一方面,MPEG-2根據不同的編碼工具定義了5個Profile:

簡單SP、主要MP、SNR可分級SNP、空間可分級SSP和高級HP。

根據視頻分辨率的不同定義了4個Level:

低級LL、主級ML、高-1440級High1440和高級HL。

MPEG-2的碼流分為三層:

基本流:ES,由視頻編碼的視頻基本流和音頻編碼的音頻基本流構成
打包基本流:PES,為音視頻ES分別打包
傳輸流、節目流:TS/PS,若干個PES進行復用后輸出,分別用於傳輸和存儲

在MPEG-2的ES流層中,其碼流結構采用了類似MPEG-1碼流結構的分層封裝的方法

圖像序列層:包括若干GOP,序列頭包含起始碼和序列參數等;
圖像組(GOP)層:包括若干圖像,GOP頭包括起始碼、GOP標識等;
圖像層:包括若干個Slice,圖像頭中包括起始碼和圖像參數等;
片(Slice)層:最小的同步單位,包括若干宏塊,Slice頭中包括起始碼、片地址、量化步長等信息;
宏塊(Macroblock)層:由4個亮度塊和2個色度塊組成,宏塊頭包括地址、類型、MV等信息

(六)MPEG-4標准(在H264出來后,才被廣泛應用)

同前任的MPEG-1和MPEG-2相比,MPEG-4更注重多媒體系統的交互性、靈活性和可擴展性。

MPEG-4的標准編號為ISO-14496,也包括多個部分,如系統、視覺信息、音頻、一致性等。

MPEG-4中最為顯著的特點是采用了基於對象的編碼。

在MPEG-4中,一個視頻對象主要定義為畫面中分割出來的不同物體,每個物體由三類信息描述:運動信息、輪廓信息和紋理信息

MPEG-4通過編碼這三類信息來實現對視頻對象的編碼。

四:視頻壓縮編碼的分類

主要可以分為以下兩種大類別:基於波形的編碼基於內容的編碼

(一)基於波形的編碼(主流)

特點:編碼的數據是針對於每一幀圖像包含的像素值,即采樣像素的波形。

方法:利用像素之間在時間與空間上的相關性采用預測編碼和變換編碼結合的的基於塊的混合編碼方法(到目前任然是最主流的編解碼方法)

代表:MPEG-1,MPEG-2,H264,H264等等

(二)基於內容的編碼

特點:視頻幀分成對應不同物體的區域,分別對其編碼
方法:針對不同物體的形狀、運動和紋理分別進行編碼(運算復雜度太高,導致發展慢,不過CV方向發展挺多)
代表:MPEG-4

五:視頻壓縮編碼的基本技術

為了專門處理視頻信息中的多種冗余,視頻壓縮編碼采用了多種技術來提高視頻的壓縮比率。其中常見的有預測編碼、變換編碼和熵編碼等等

(一)預測編碼:用於處理視頻中的時間和空間域的冗余

預測編碼通過傳輸預測像素值與實際像素值之差,利用時間或者空間相鄰像素之間較強的相關性進行編碼!

視頻處理中的預測編碼主要分為兩大類:幀內預測幀間預測

1.幀內預測:

預測值與實際值位於同一幀內,用於消除圖像的空間冗余
幀內預測的特點是壓縮率相對較低,然而可以獨立解碼,不依賴其他幀的數據
通常視頻中的關鍵幀都采用幀內預測。

2.幀間預測:

幀間預測的實際值位於當前幀(預測的幀),參考值位於參考幀,用於消除圖像的時間冗余
幀間預測的壓縮率高於幀內預測,然而不能獨立解碼,必須在獲取參考幀數據之后才能重建當前幀

通常在視頻碼流中,I幀全部使用幀內編碼,P幀/B幀中的數據可能使用幀內或者幀間編碼。

(二)變換編碼

目前主流的視頻編碼算法(MPEG1,MPEG2,H264,H265)均屬於有損編碼通過對視頻造成有限而可以容忍的損失,獲取相對更高的編碼效率

造成信息損失的部分在於變換量化這一部分:

進行量化之前,首先需要將圖像信息從空間域通過變換編碼變換至頻域並計算其變換系數供后續的編碼視頻編碼算法中通常使用正交變換進行變換編碼,常用的正交變換方法有:離散余弦變換(DCT)、離散正弦變換(DST)、K-L變換等。

(三)熵編碼:主要用於消除視頻信息中的統計冗余。

由於信源中每一個符號出現的概率並不一致,這就導致使用同樣長度的碼字表示所有的符號會造成浪費。

通過熵編碼,針對不同的語法元素分配不同長度的碼元,可以有效消除視頻信息中由於符號概率導致的冗余。

在視頻編碼算法中常用的熵編碼方法有變長編碼和算術編碼等,具體來說主要有上下文自適應的變長編碼(CAVLC)上下文自適應的二進制算術編碼(CABAC),都是H264中常見的熵編碼方法。

注意:變換編碼和熵編碼中包含有無損壓縮技術

FFmpeg學習(四)視頻基礎中:

整數離散余弦變換(無損壓縮技術): ----- 經過上面兩種壓縮后(幀內、幀間),數據已經很小了,但是還可以通過DCT變換,將有用數據集中,其他位置為0,進行壓縮。可以減少復雜度,利於后面的無損壓縮 
CABAC壓縮(無損壓縮技術):    ----- 根據上下文進行數據的壓縮

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM