《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看!

“紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓縮編碼標準的思想和方法有足夠深刻的理解和體會!

本節視訊免費

一、人與世界的互動

從遠古時代人類文明誕生之日起,人類就在人類就在不斷為適應環境、改造環境而艱苦鬥爭。其中最為基礎的前提就是利用感官對外界資訊的獲取。利用各種感官,人類可以與世界環境進行多種不同的資訊互動,例如:

  • 嗅覺:識別各種氣味,辨別環境變化和食物、飲水的質量等;
  • 聽覺:識別同類的聯絡資訊和天敵等危險訊號等
  • 味覺:挑選最適宜的食物
  • 觸覺:製作與使用工具時非常重要

另外,最重要的一種自然就是視覺。據統計,在人的各種感官中,視覺佔據了超過7成的資訊獲取量。而且視覺可以使人對環境變化做出最直接的反映。

在文明的發展過程中,人們不滿足於僅僅靠著口述記錄所看到的影像,而是希望能用更加直觀的形式將其記錄下來。經過了多年的發展,經過多年的發展,視訊已經成為記錄和重現資訊最為高效的方式,可以在相對很短的時間內傳遞大量的資訊。

  • 視訊通過其中每一幀的影象表達資訊;
  • 視訊包含的音訊可提供大量資訊;
  • 視訊通過影象的運動、場景的變換提供資訊;

綜上我們可知,視訊資訊提供了最為接近人的直接體驗的資訊表示方式。

二、視訊訊號的表示方法:RGB與YUV

真實世界中的影像與早期的視訊處理與傳輸系統所處理的都是模擬訊號。然而為了能適應現代的計算機、網路傳輸與數字視訊處理系統,模擬的視訊訊號必須轉換成數字格式。

在數字格式的視訊訊號中,組成視訊的基本結構是一幀幀連續而相關聯的影象。組成每一幀影象的基本結構是成平面緊密排列的畫素,每個畫素代表影象中的一個彩色的點。為了使得畫素以彩色表示,每一個畫素由顏色的三基色取不同的分量構成:

  • R:Red——紅色分量;
  • G:Green——綠色分量;
  • B:Blue——藍色分量;

使用這種方式表示彩色影象的方式為RGB顏色空間。RGB顏色空間常用於顯示器系統。通過這種形式表示的影象,每個畫素的每一個顏色分量用1個位元組表示,則可以表示256×256×256種不同的顏色。在常見的影象格式中,如點陣圖(bmp)格式以RGB形式儲存資料。

在實際的編解碼等視訊處理的過程中,YUV格式比RGB格式更為常用。在YUV格式中,一個畫素由亮度分量和色度分量表示,每一個畫素由一個亮度分量Y和兩個色度分量U/V組成。亮度分量可以與色度分量一一對應,也可以對色度分量進行取樣,即色度分量的總量少於亮度分量。

在YUV中之所以採用這樣的方式,主要是因為人的感官對亮度資訊的敏感度遠高於對色度資訊。因此相對於其他畫素格式,YUV的最大優勢是可以適當降低色度分量的取樣率,並保證不對影象造成太大影響。而且,使用這種方式還可以相容黑白和彩色顯示裝置。對於黑白顯示裝置,只需要去除色度分量,只顯示亮度分量即可。

在YUV中常見的色度取樣方式有4:4:4、4:2:2和4:2:0等,如下圖所示:
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

三、視訊壓縮編碼

編碼這一概念在通訊與資訊處理領域中廣泛使用,其基本原理是將資訊按照一定規則使用某種形式的碼流表示與傳輸。常用的需要編碼的資訊主要有:文字、語音、視訊和控制資訊等。

1. 為什麼需要對視訊編碼

對於視訊資料而言,視訊編碼的最主要目的是資料壓縮。這是因為動態影象的畫素形式表示資料量極為巨大,儲存空間和傳輸頻寬完全無法滿足儲存和傳輸的需求。例如,影象的每個畫素的三個顏色分量RGB各需要一個位元組表示,那麼每一個畫素至少需要3位元組,解析度1280×720的影象的大小為2.76M位元組。

如果對於同樣解析度的視訊,如果幀率為25幀/秒,那麼傳輸所需的位元速率將達到553Mb/s!如果對於更高清的視訊,如1080P、4k、8k視訊,其傳輸位元速率更是驚人。這樣的資料量,無論是儲存還是傳輸都無法承受。因此,對視訊資料進行壓縮稱為了必然之選。

2. 視訊資訊為什麼可以被壓縮

視訊資訊之所以存在大量可以被壓縮的空間,是因為其中本身就存在大量的資料冗餘。其主要型別有:

  1. 時間冗餘:視訊相鄰的兩幀之間內容相似,存在運動關係
  2. 空間冗餘:視訊的某一幀內部的相鄰畫素存在相似性
  3. 編碼冗餘:視訊中不同資料出現的概率不同
  4. 視覺冗餘:觀眾的視覺系統對視訊中不同的部分敏感度不同

針對這些不同型別的冗餘資訊,在各種視訊編碼的標準演算法中都有不同的技術專門應對,以通過不同的角度提高壓縮的比率。

3. 視訊編碼標準化組織

從事視訊編碼演算法的標準化組織主要有兩個,ITU-T和ISO。

ITU-T,全稱International Telecommunications Union - Telecommunication Standardization Sector,即國際電信聯盟——電信標準分局。該組織下設的VECG(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等。

不同標準組織制定的視訊編碼標準的發展如下圖所示:

四、視訊壓縮編碼的基本技術

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

1. 預測編碼

預測編碼可以用於處理視訊中的時間和空間域的冗餘。視訊處理中的預測編碼主要分為兩大類:幀內預測和幀間預測。

  • 幀內預測:預測值與實際值位於同一幀內,用於消除影象的空間冗餘;幀內預測的特點是壓縮率相對較低,然而可以獨立解碼,不依賴其他幀的資料;通常視訊中的關鍵幀都採用幀內預測。
  • 幀間預測:幀間預測的實際值位於當前幀,預測值位於參考幀,用於消除影象的時間冗餘;幀間預測的壓縮率高於幀內預測,然而不能獨立解碼,必須在獲取參考幀資料之後才能重建當前幀。

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

2. 變換編碼

目前主流的視訊編碼演算法均屬於有損編碼,通過對視訊造成有限而可以容忍的損失,獲取相對更高的編碼效率。而造成資訊損失的部分即在於變換量化這一部分。在進行量化之前,首先需要將影象資訊從空間域通過變換編碼變換至頻域,並計算其變換系數供後續的編碼。

在視訊編碼演算法中通常使用正交變換進行變換編碼,常用的正交變換方法有:離散餘弦變換(DCT)離散正弦變換(DST)K-L變換等。

3. 熵編碼

視訊編碼中的熵編碼方法主要用於消除視訊資訊中的統計冗餘。由於信源中每一個符號出現的概率並不一致,這就導致使用同樣長度的碼字表示所有的符號會造成浪費。通過熵編碼,針對不同的語法元素分配不同長度的碼元,可以有效消除視訊資訊中由於符號概率導致的冗餘。

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

.