視訊編碼
- 視訊編碼基本原理
- 變換編碼
- 熵編碼
- 運動估計和運動補償
- 混合編碼
- 分辨率、幀率和碼率
- 主流視訊編碼器
- 常見視訊格式
-
- H.264
-
- H.264 主要特點
視訊編碼基本原理
視訊信号的備援資訊
-
以記錄數字視訊的 YUV 分量格式為例,YUV 分别代表亮度與兩個色差信号。例如對于現有的 PAL 制電視系統,其亮度信号采樣頻率為 13.5MHz;色度信号的頻帶通常為亮度信号的一半或更少,為 6.75MHz 或 3.375MHz。以 4:2:2 的采樣頻率為例,Y 信号采用 13.5MHz,色度信号 U 和 V 采用 6.75MHz 采樣,采樣信号以 8bit 量化,則可以計算出數字視訊的碼率為:
13.5 x 8 + 6.75 x 8 + 6.75 x 8 = 216 Mbit/s
- 如此大的資料量如果直接進行存儲或傳輸将會遇到很大困難,是以必須采用壓縮技術以減少碼率。數字化後的視訊信号能進行壓縮主要依據兩個基本條件:
-
資料備援
例如如空間備援、時間備援、結構備援、資訊熵備援等,即圖像的各像素之間存在着很強的相關性。消除這些備援并不會導緻資訊損失,屬于無損壓縮。例如如空間備援、時間備援、結構備援、資訊熵備援等,即圖像的各像素之間存在着很強的相關性。消除這些備援并不會導緻資訊損失,屬于無損壓縮。
-
視覺備援
人眼的一些特性比如亮度辨識門檻值,視覺門檻值,對亮度和色度的敏感度不同,使得在編碼的時候引入适量的誤差,也不會被察覺出來。可以利用人眼的視覺特性,以一定的客觀失真換取資料壓縮。這種壓縮屬于有損壓縮。
-
- 數字視訊信号的壓縮正是基于上述兩種條件,使得視訊資料量得以極大的壓縮,有利于傳輸和存儲。一般的數字視訊壓縮編碼方法都是混合編碼,即将變換編碼,運動估計和運動補償,以及熵編碼三種方式相結合來進行壓縮編碼。通常使用變換編碼來消去除圖像的幀内備援,用運動估計和運動補償來去除圖像的幀間備援,用熵編碼來進一步提高壓縮的效率。
變換編碼
變換編碼的作用是将空間域描述的圖像信号變換到頻率域,然後對變換後的系數進行編碼處理。一般來說,圖像在空間上具有較強的相關性,變換到頻率域可以實作去相關和能量集中。常用的正交變換有離散傅裡葉變換,離散餘弦變換等等。數字視訊壓縮過程中應用廣泛的是離散餘弦變換。
離散餘弦變換簡稱為 DCT 變換。它可以将 LxL 的圖像塊從空間域變換為頻率域。在基于 DCT 的圖像壓縮編碼過程中,首先需要将圖像分成互不重疊的圖像塊。假設一幀圖像的大小為 1280x720,首先将其以網格狀的形式分成 160x90 個尺寸為 8x8 的彼此沒有重疊的圖像塊,接下來才能對每個圖像塊進行 DCT 變換。
經過分塊以後,每個 8x8 點的圖像塊被送入 DCT 編碼器,将 8x8 的圖像塊從空間域變換為頻率域。下邊左圖給出一個實際 8x8 的圖像塊例子,圖中的數字代表了每個像素的亮度值。從圖上可以看出,在這個圖像塊中各個像素亮度值比較均勻,特别是相鄰像素亮度值變化不是很大,說明圖像信号具有很強的相關性。
下邊右圖是經過 DCT 變換後的結果。從圖中可以看出經過 DCT 變換後,左上角的低頻系數集中了大量能量,而右下角的高頻系數上的能量很小。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP310dFRVZoBnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxQjN3AzN0gTMyEjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
信号經過 DCT 變換後需要進行量化。由于人的眼睛對圖像的低頻特性比如物體的總體亮度之類的資訊很敏感,而對圖像中的高頻細節資訊不敏感,是以在傳送過程中可以少傳或不傳送高頻資訊,隻傳送低頻部分。量化過程通過對低頻區的系數進行細量化,高頻區的系數進行粗量化,去除了人眼不敏感的高頻資訊,進而降低資訊傳送量。是以,量化是一個有損壓縮的過程,而且是視訊壓縮編碼中品質損傷的主要原因。量化的過程可以用下面的公式表示:
其中 FQ(u,v)表示經過量化後的 DCT 系數;F(u,v)表示量化前的 DCT 系數;Q(u,v)表示量化權重矩陣;q 表示量化步長;round 表示歸整,即将輸出的值取為與之最接近的整數值。合理選擇量化系數,對變換後的圖像塊進行量化後的結果如下圖所示,可見 DCT 系數經過量化之後大部分經變為 0,而隻有很少一部分系數為非零值,此時隻需将這些非零值進行壓縮編碼即可。
熵編碼
熵編碼是因編碼後的平均碼長接近信源熵值而得名。熵編碼多用可變字長編碼(VLC,Variable Length Coding)實作。其基本原理是對信源中出現機率大的符号賦予短碼,對于出現機率小的符号賦予長碼,進而在統計上獲得較短的平均碼長。可變字長編碼通常有霍夫曼編碼、算術編碼、遊程編碼等。其中遊程編碼是一種十分簡單的壓縮方法,它的壓縮效率不高,但編碼、解碼速度快,仍被得到廣泛的應用,特别在變換編碼之後使用遊程編碼,有很好的效果。
首先要在量化器輸出直流系數後對緊跟其後的交流系數進行 Z 型掃描(如下圖箭頭線所示)。Z 型掃描将二維的量化系數轉換為一維的序列,并在此基礎上進行遊程編碼。最後再對遊程編碼後的資料進行另一種變長編碼,例如霍夫曼編碼。通過這種變長編碼,進一步提高編碼的效率。
運動估計和運動補償
運動估計(Motion Estimation)和運動補償(Motion Compensation)是消除圖像序列時間方向相關性的有效手段。上文介紹的 DCT 變換、量化、熵編碼的方法是在一幀圖像的基礎上進行,通過這些方法可以消除圖像内部各像素間在空間上的相關性。實際上圖像信号除了空間上的相關性之外,還有時間上的相關性。例如對于像新聞聯播這種背景靜止,畫面主體運動較小的數字視訊,每一幅畫面之間的差別很小,畫面之間的相關性很大。對于這種情況我們沒有必要對每一幀圖像單獨進行編碼,而是可以隻對相鄰視訊幀中變化的部分進行編碼,進而進一步減小資料量,這方面的工作是由運動估計和運動補償來實作的。
運動估計技術一般将目前的輸入圖像分割成若幹彼此不相重疊的小圖像子塊,例如一幀圖像的大小為 1280x720,首先将其以網格狀的形式分成 40x45 個尺寸為 16x16 的彼此沒有重疊的圖像塊,然後在前一圖像或者後一個圖像某個搜尋視窗的範圍内為每一個圖像塊尋找一個與之最為相似的圖像塊。這個搜尋的過程叫做運動估計。通過計算最相似的圖像塊與該圖像塊之間的位置資訊,可以得到一個運動矢量。這樣在編碼過程中就可以将目前圖像中的塊與參考圖像運動矢量所指向的最相似的圖像塊相減,得到一個殘差圖像塊,由于殘差圖像塊中的每個像素值很小,是以在壓縮編碼中可以獲得更高的壓縮比。這個相減過程叫運動補償。
由于編碼過程中需要使用參考圖像來進行運動估計和運動補償,是以參考圖像的選擇顯得很重要。一般情況下編碼器的将輸入的每一幀圖像根據其參考圖像的不同分成3種不同的類型:I(Intra)幀、B(Bidirection prediction)幀、P(Prediction)幀,如圖所示。
I 幀隻使用本幀内的資料進行編碼,在編碼過程中它不需要進行運動估計和運動補償。顯然,由于 I 幀沒有消除時間方向的相關性,是以壓縮比相對不高。P 幀在編碼過程中使用一個前面的 I 幀或 P 幀作為參考圖像進行運動補償,實際上是對目前圖像與參考圖像的內插補點進行編碼。B 幀的編碼方式與 P 幀相似,唯一不同的地方是在編碼過程中它要使用一個前面的 I 幀或 P 幀和一個後面的 I 幀或 P 幀進行預測。由此可見,每一個 P 幀的編碼需要利用一幀圖像作為參考圖像,而 B 幀則需要兩幀圖像作為參考。相比之下,B 幀比 P 幀擁有更高的壓縮比。
混合編碼
上面介紹了視訊壓縮編碼過程中的幾個重要的方法。在實際應用中這幾個方法不是分離的,通常将它們結合起來使用以達到最好的壓縮效果。下圖給出了混合編碼(即變換編碼 + 運動估計和運動補償 + 熵編碼)的模型。該模型普遍應用于 MPEG1,MPEG2,H.264 等标準中。
從圖中我們可以看到,目前輸入的圖像首先要經過分塊,分塊得到的圖像塊要與經過運動補償的預測圖像相減得到內插補點圖像 X,然後對該內插補點圖像塊進行 DCT 變換和量化,量化輸出的資料有兩個不同的去處:一個是送給熵編碼器進行編碼,編碼後的碼流輸出到一個緩存器中儲存,等待傳送出去。另一個應用是進行反量化和反變化後的到信号 X’,該信号将與運動補償輸出的圖像塊相加得到新的預測圖像信号,并将新的預測圖像塊送至幀存儲器。
分辨率、幀率和碼率
視訊是由連續的圖像構成的。每一張圖像,我們稱為一幀(frame)。圖像則是由像素(pixel)構成的。一張圖像有多少像素,稱為這個圖像的 分辨率。比如說 1920×1080 的圖像,說明它是由橫縱 1920×1080 個像素點構成。視訊的分辨率就是每一幀圖像的分辨率。
一個視訊,每一秒由多少圖像構成,稱為這個視訊的 幀率(frame-rate)。常見的幀率有
- 24000 / 1001 = 23.976
- 30000 / 1001 = 29.970
- 60000 / 1001 = 59.940
- 等等
這個數字是一秒鐘内閃過的圖像的數量。比如 23.976,就是 1001 秒内,有 24000 張圖像。視訊的幀率是可以是恒定的(CFR, Const Frame-Rate),也可以是變化的(VFR, Variable Frame-Rate)
碼率 的定義是視訊檔案體積除以時間。機關一般是 Kbps(Kbit/s)或者 Mbps(Mbit/s)。注意1B(Byte)= 8b(bit)。是以一個 24 分鐘,900 MB 的視訊:
- 體積:900 MB = 900 MByte = 7200 Mbit
- 時間:24 min = 1440 s
- 碼率:7200 / 1440 = 5000 Kbps = 5 Mbps
當視訊檔案的時長基本相同的時候,碼率和體積基本上是等價的,都是用來描述視訊大小的參數。長度分辨率都相同的檔案,體積不同,實際上就是碼率不同。碼率也可以解讀為機關時間内,用來記錄視訊的資料總量。視訊的碼率越高,意味着用來記錄視訊的資料量越多,潛在的解讀就是視訊可以擁有更好的品質。
主流視訊編碼器
Codec | Creator / Maintainer | First public release date | License | Patented compression formats |
---|---|---|---|---|
x264 | x264 team | 2003 | GNU GPL | MPEG-4 AVC / H.264 |
x265 | x265 team | 2013 | GNU GPL | HEVC / H.265 |
Xvid | Xvid team | 2001 | GNU GPL | MPEG-4 ASP |
FFmpeg (libavcodec) | FFmpeg team | 2000 | GNU LGPL | MPEG-1, MPEG-2, MPEG-4 ASP, H.261, H.263, VC-3, WMV7, WMV8, MJPEG, MS-MPEG-4v3, DV, Sorenson codec etc. |
DivX | DivX, Inc. | 2001 | Proprietary | MPEG-4 ASP, H.264 |
libvpx (VP9) | 2013 | BSD-style | Patented, but freely licensed | |
Windows Media Encoder | Microsoft | 1999 | Proprietary | VC-1 |
RealVideo | RealNetworks | 1997 | Proprietary | H.263, RealVideo |
常見視訊格式
Name | File extension(s) | Container format | Video coding format(s) | Audio coding format(s) | Notes |
---|---|---|---|---|---|
WebM | .webm | Matroska | VP8, VP9 | Vorbis, Opus | Royalty-free format created for HTML5 video. |
Matroska | .mkv | Matroska | any | any | |
Flash Video (FLV) | .flv | FLV | VP6, Sorenson Spark, Screen video, H.264 | MP3,ADPCM, Nellymoser, Speex, AAC | |
AVI | .avi | AVI | any | any | Uses RIFF |
Windows Media Video | .wmv | ASF | WMV, WMV-Screen, WMV-Image | WMA, Sipro ACELP.net | |
RealMedia Variable Bitrate (RMVB) | .rmvb | RealMedia | RealVideo | RealAudio | Made for RealPlayer |
Advanced Systems Format (ASF) | .asf | ASF | any | any | |
MPEG-4 Part 14 (MP4) | .mp4, .m4p, .m4v | MPEG-4 Part 12 | H.264, MPEG-4 Part 2, MPEG-2, MPEG-1 | AAC, MP3, others |
H.264
H.264 是由 ITU-T 的 VCEG(視訊編碼專家組)和 ISO / IEC 的 MPEG(活動圖像編碼專家組)聯合組建的聯合視訊組(JVT:joint video team)提出的一個新的數字視訊編碼标準,它既是 ITU-T 的H.264,又是 ISO/IEC 的 MPEG-4 的第十部分。而國内業界通常所說的 MPEG-4 是 MPEG-4 的第二部分。即:
H.264 = MPEG-4(第十部分,也叫 ISO / IEC 14496-10)= MPEG-4 AVC
是以,不論是 MPEG-4 AVC、MPEG-4 Part 10,還是 ISO / IEC 14496-10,都是指 H.264。H.264 也是 MPEG-4 的一部分。
H.264 标準從 1998 年 1 月份開始草案征集,到 2003 年 7 月,整套 H.264 (ISO / IEC 14496-10)規範定稿。2005 年 1 月,MPEG 組織正式釋出了 H.264 驗證報告,從各個方面論證了H.264 的可用性以及各種工具集的效果,從标準的角度,印證 H.264 的成熟性。
H.264 在壓縮編碼效率、視訊内容自适性處理能力方面及網絡層面,特别是對 IP 網絡及移動網絡的自适應處理能力、抗幹擾能力與健壯性等方面,相比 H.263 / MPEG-4 均有大幅度提高。H.264 的應用相當廣泛,包括固定或移動的可視電話、實時視訊會議、視訊監控、流媒體、多媒體視訊、IPTV、手機電視等,這也是業内普遍看好它的重要原因。
H.264 主要特點
- 更高的編碼效率:同 H.263 等标準的特率效率相比,能夠平均節省大于 50% 的碼率。
- 高品質的視訊畫面:H.264 能夠在低碼率情況下提供高品質的視訊圖像,在較低帶寬上提供高品質的圖像傳輸是 H.264 的應用亮點。和 MPEG2 和 MPEG4 ASP 等壓縮技術相比,在同等圖像品質下,采用 H.264 技術壓縮後的資料量隻有 MPEG2 的 1/8,MPEG4 的 1/3。
- 提高網絡适應能力:H.264 可以工作在實時通信應用(如視訊會議)低延時模式下,也可以工作在沒有延時的視訊存儲或視訊流伺服器中。
- 采用混合編碼結構:同 H.263 相同,H.264 也使用采用 DCT 變換編碼加 DPCM 的差分編碼的混合編碼結構,還增加了如多模式運動估計、幀内預測、多幀預測、基于内容的變長編碼、4x4 二維整數變換等新的編碼方式,提高了編碼效率。
- H.264 的編碼選項較少:在 H.263 中編碼時往往需要設定相當多選項,增加了編碼的難度,而 H.264 做到了力求簡潔的“回歸基本”,降低了編碼時複雜度。
- H.264 可以應用在不同場合:H.264 可以根據不同的環境使用不同的傳輸和播放速率,并且提供了豐富的錯誤處理工具,可以很好的控制或消除丢包和誤碼。
- 錯誤恢複功能:H.264 提供了解決網絡傳輸包丢失的問題的工具,适用于在高誤碼率傳輸的無線網絡中傳輸視訊資料。
- 較高的複雜度:H.264 性能的改進是以增加複雜性為代價而獲得的。據估計,H.264 編碼的計算複雜度大約相當于 H.263 的 3 倍,解碼複雜度大約相當于 H.263 的 2 倍。
– EOF –
本文前半部分引用自雷神的部落格:https://blog.csdn.net/leixiaohua1020/article/details/28114081