一文讀懂視訊編碼的前世今生及未來

數字視訊的超高清潮流奔湧向前。隨著4K、AR/VR、全息視訊等技術的逐步落地,視訊高密度的資料給頻寬和儲存都帶來了巨大挑戰。當前主流的H.264已不堪重負,新一代視訊編碼標準H.265在“韜光隱晦”了多年後,終於要爆發。
那麼,什麼是H.264、又什麼是H.265?他們的差距究竟有多大?視訊編碼的原理是什麼?H.265如此優越,為什麼很多企業敬而遠之要另闢蹊徑?下一代視訊編碼的方向又在哪裡?
這篇文章將通過深度剖析視訊編碼的內部工作原理,來解釋清楚怎樣將千兆位元組的資料壓縮到1/100而人眼分辨不出差別。它好比是數學學位,你將無法在社群大學獲得,但可能更有用。除此之外,它還將告訴你下一代視訊編碼標準的進展及方向。
如果你想更好的控制編碼,理解編碼器內部工作原理是非常有幫助的。具有諷刺意味的是,上文提到的標準沒有一個是對編碼器的定義,而是編碼器的要求。正如我們將要看到的,這些能幫助編碼器寫入器用所有的技術手段和使用者設定來增強編碼,為了甚至一個小檔案或畫質的提升,通常以更長的編碼時間和更多的處理器為代價。

OK,開始暢遊視訊編碼技術的海洋

▲JPEG在低質量設定壓縮下難以保持細節清晰
曾幾何時,出席了GIF動畫,事情變得更糟。從1987年起,我們從一個知名的國際標準組織獲得了30年的穩定編碼增強功能,直到上個十年。
我們不打算詳述歷史,不過有一些固定的命名大會和系統的事情值得我們注意。在動圖出來之前,有靜態的圖片。1991年底,聯合影象專家小組釋出首個JPEG程式碼,1992年出臺標準。這個小組從1986年開始研究JPEG。
同樣,國際電信聯盟(ITU)於1984年成立了視訊編碼專家組(VCEG),以開發電話會議的國際數字視訊標準。 第一個標準是H.261,於1990年完成,旨在通過64kb / s ISDN鏈路以高達176x144的解析度傳送動態影象。 由此,H.262,H.263,H.264和H.265都相繼誕生了。在H.261之後,下一個視訊標準被稱為MPEG-1。
因此,您可以瞭解到這些標準的來源。 我們之前提到JPEG有兩個原因:首先,MPEG(動態影象專家組)是在JPEG成功之後形成的。 它還使用了一些相同的技術來減少編碼檔案的大小,這是從現有的無損數字儲存到使用有損技術的巨大轉變。
關於現代有失真壓縮的最重要的事情之一是如何處理和壓縮影象。 我們將從基礎開始, JPEG壓縮(見上圖)原理是整個行業的核心 - 並將這些知識擴充套件到動態圖片和MPEG中。 一旦我們掌握了這一點,我們將明白這些標準是如何改進和擴充套件以建立我們今天的H.264和H.265標準的。

▲ 針對不同顏色空間對顏色通道取樣原理
空間:多彩的疆界

首先進入腦海的事色彩空間的變化。你可能習慣於認為PC上的所有東西都是以16位、24位或32位顏色儲存,這些顏色分別在紅、綠、藍顏色通道上。同樣強調儲存所有顏色、色調和亮度資訊。事實上,人眼對亮度(即發光度)的敏感程度遠高於其他任何因素,然後是色調,最後是色彩飽和度。
色彩空間從RGB變為YCbCr,又稱亮度和兩個色度通道(此處為藍色和紅色) - 如果您想知道,這與YUV有關。 原因是啟用影象的色度子取樣, 也就是說,我們將降低Cb和Cr通道的解析度以節省空間(希望如此),而不會出現任何可察覺的質量下降。
這表示為亮度與色度通道的比率。 最高質量的全RGB - 將是4:4:4,每個畫素具有Y,Cb和Cr資料。 它僅用於高階視訊裝置。 廣泛使用的4:2:2,對於每個畫素具有Y,但是對於色度資料,水平解析度減半; 這在大多數視訊硬體上使用。而4:2:0保持水平解析度減半,但現在跳過每隔一條垂直線(見上圖) - 這是在每個H.26x 標準和DVD/藍光等標準的MPEG中使用的編碼。 Why? 它將所需的頻寬減半。

▲ 每張圖片都可以大致由此構成

如此的科學

現在繁重的數學運算開始了,所以準備你的灰質...... 對於每個通道Y,Cb和Cr,影象被分成8×8畫素塊。 對於視訊,這些被稱為巨集塊。 事實上,每個巨集塊都使用型別二的前向離散餘弦變換(DCT)進行處理。
DCT過程將離散空間域畫素變換為頻域表示。 看看8x8餘弦網格 - 黑白乾涉圖案(見上圖)。 DCT輸出8x8數字矩陣; 每個數字表示原始8x8影象塊與每個對應的基本功能元素的相似程度。 將它們與指定的權重相結合,你就可以得到與人眼無法區分的原始影象。
正如您所看到的,左上角的基本功能元素是普通的(描述為低頻),並將描述8x8網格的整體強度。逐漸變高的頻率元素在描述整體模式中扮演的角色越來越少。 我們希望的是,最終能夠在不損失感知質量的情況下丟棄大部分高頻資料(細節部分)。

▲ DCT產生頻域矩陣; 我們量化它以得到最終的有失真壓縮矩陣

該DCT矩陣通過8×8量化器矩陣執行; 提供標準矩陣(基於研究的數量),但軟體編碼器可以建立自己的,例如50%的質量,因為它一直在進行。 量化器被設計成試圖保持低頻細節 - 眼睛在高頻細節上更容易看到。 每個DCT元素被每個對應的量化器元素劃分,並且結果四捨五入到最接近的整數。 最終結果是一個矩陣,低頻元素保留在矩陣的左上角,更多的高頻元素向矩陣的右下角減少到零,這就是JPEG無損元素的來源。
由於這種左上角的加權,矩陣使用“Z字形”圖案重新排列成一個列表,處理對角線中的矩陣,從左上角開始,將大多數零推到末尾(參見上圖)。 霍夫曼編碼壓縮了這個最終資料。 JPEG影象的質量由量化器矩陣的積極程度控制。 嘗試將元素向下舍入為零越強烈,工件越多。 恭喜 - 你壓縮了靜止影象!
如果JPEG非常擅長壓縮,為什麼不將一個負載粘在一起來製作一個動態影象格式呢? 嗯,你可以 - 它被稱為Motion JPEG-但與動態影象編碼方案相比,它的效率非常低。

▲ 相比MPEG H.262最新的H.265模型複雜程度在增加

Motion壓縮

對於MPEG(和其他壓縮方案),每個幀被分成16×16畫素的巨集塊。 為什麼不在MPEG標準中使用曾在JPEG中使用的8x8?嗯,MPEG使用4:2:0顏色空間,它會跳過每條水平線,因此我們需要加倍才能在水平和垂直方向保留均勻的資料量。
MPEG標準使用三種類型的幀來建立運動影象。 I(幀內)幀實際上是全幀JPEG影象。 P(預測)幀僅儲存I幀和未來P幀之間的差異。 在它們之間是一系列B(雙向或幀間)幀,其儲存每個巨集塊的運動向量細節-B幀能夠在之前和即將到來時參考幀。
那麼,運動向量和巨集塊發生了什麼? 編碼器將當前幀的巨集塊與來自錨幀的視訊的相鄰部分進行比較,該錨幀可以是I幀或P幀。 這達到巨集塊的預定義半徑。 如果找到匹配,則將運動向量方向和距離資料儲存在B幀中。 對此的解碼稱為運動補償,即MC。
但是,預測與實際幀不完全匹配,因此也儲存預測誤差資料。 誤差越大,必須儲存的資料越多,因此高效的編碼器必須執行良好的運動估計,即ME。
因為同一幀中的大多數巨集塊具有相同或相似的運動向量,所以可以很好地壓縮這些巨集塊。在MPEG-1中,P幀每個巨集塊儲存一個運動向量; B幀能夠具有前一幀中的兩個,以及來自未來幀的一個。編碼器將I,P和B幀組無序地組合在一起,並且解碼器按照MPEG位元流的順序重建視訊。可以想象,編碼器可以實現各種質量和效率變數,從I幀,P幀和B幀的比率到運動補償效率。
在這一點上,我們已經介紹了壓縮的MPEG-1視訊的基礎知識。音訊整合到位元流中,MPEG-1支援立體聲MP3音訊,但我們不會進入音訊壓縮。 MPEG-2(又名H.262,見上圖)主要使用相同的系統,但經過增強,可支援更廣泛的配置檔案,包括DVD,隔行掃描視訊,高達4:4:4的高質量色彩空間,以及多聲道音訊。 MPEG-3被納入MPEG-2,其中包含1080p HD配置檔案。

▲ H.264中的可變大小巨集塊更有利於壓縮

MPEG-4:縮放與強化

MPEG-4-又稱 H.264開始時的目的是優化數字流媒體的標準。 從一半的位元率中獲得更好的影象質量。 但隨著藍光和高清DVD的出現(記得嗎?),MPEG-4 Part 10-又稱 MPEG-4高階視訊編碼(AVC)形成了。
AVC於研究工作始於1998年,首次獲批是在2003年,即MPEG-1獲批的10年後。MPEG-1在1988年開始研究,1993年獲批。正如你想象的,一系列的改進在進行中,藉助處理器速度和編解碼器系統資源的大幅度增加,以及顯示器效能的提升。我們已從Video CD是的邁入全高清藍光時代。
我們不會深入研究用於MPEG-1各個方面的細節,部分原因在於我們已經對基本技術進行了改進,並且很大程度上因為實現的複雜性如此之多,我們已經無能為力了!
為了開始,I幀預測通過增加其複雜性而得到極大改善。 主要的變化是巨集塊中運動補償的可變塊大小,從16x16到4x4,以及它們之間的任何變化,例如8x16或8x4(上圖)。 每個巨集塊和可用參考幀的多個運動向量增加到16,緩衝要求為4或5,而之前只有一個或兩個。 運動補償以四分之一畫素精度工作。 內建的去塊濾波器有助於消除這些16x16偽像。
這只是改進的一小部分 - 例如,關於損失彈力的以提高損壞的資料流的效能的部分,加上增強的協議壓縮,無損功能和特定功能的選項,以增強黑白鏡頭,視覺轉換 ,或淡出。

▲ 在低位元率下x265高清能力與H.264的對比

MPEG-5:專利戰爭

與上一代一樣,H.265(即高效視訊編碼(HEVC)的核心設計目標是獲得與H.264相同的影象質量水平,但位元率為一半(上圖)。 主觀測試率能夠使720p的位元率至少降低56%,在2160p時達到64%。
那麼,改變了什麼? 首先,修復了16x16巨集塊,取而代之的是編碼樹塊(CTB)。 這些可以是64x64,32x32或16x16畫素。 然後可以遞迴地將CTB細分為編碼單元(CU)塊,從32x32大小降到8x8,儲存為“四叉樹”,因為每個CU分支是小方塊的四邊形。
每個CU遞迴地分成變換單元(TU),用DCT處理,又可變成32x32到4x4。 除此之外,備選的且更有效的離散正弦變換(DST)被用於4x4塊。 這種靈活性和準確性的提高極大地提高了H.265的效率。
真正的力量是連線幀間預測運動向量系統。 它仍然有兩個參考列表,每個參考列表有16個條目,但它可以緩衝8個圖片,這些圖片可以多次包含相同的幀以進行加權預測。 亮度和鉻通道上都有改進的運動補償濾波器,以及可以並行處理的優化解塊濾波器。 最後,H.265的設計考慮了現代系統的多執行緒處理。 CTB設計生成一個獨立可解碼塊網格。


終於從深奧的技術海洋中浮出水面

音訊編碼:難覓存在感

感覺好像人們消費音訊的方式已經發生了巨大的變化,從舊的所有者/收集者到新的流媒體/訂閱模式。即使考慮到這一點,如果您要儲存自己的音訊,如果您以任何方式關心,您將使用無損編解碼器。 儲存空間很便宜了,FLAC應該是首選。你可以繼續使用MP3編碼,但更應選擇ogg Vorbis。
這兩個標準都是開放的(實際上,MP3也在專利已過期時開放),因此技術上可以得到任何關心的人的支援。 FLAC擁有廣泛的行業支援,包括Windows,MacoS,ioS,Android和Linux。 同樣重要的是,它的裝置支援是一流的,包括Sonos,一系列車載系統,Denon,Synology和Plex,僅舉幾例。 ogg的支援有限,但Windows,MacoS和ioS可以支援。
有些人可能會指出,更新的格式opus,其無損格式可提供更高的質量,但它的年幼也意味著硬體支援比ogg更有限。
下一代HEVC

H.265編碼方式表明了編解碼器設計人員已取得了難以置信的成就:在降低位元率的同時提高了影象質量,而且並沒有大幅提高解碼複雜度。 編解碼器世界不爽的地方是需要授權許可的軟體專利。
如果公平的話,許可證是好的,但眾所周知,HEVC的專利費顯著的提升,這迫使了該行業開始尋找替代品。擁有視訊部落格平臺YouTube的谷歌顯然不願意為其不斷增長的使用者群體支付授權費。 它曾購買了VP8編解碼器技術,現在使用與H.265對等但免版稅的VP9用於YouTube流媒體。 Netflix大量使用H.264 AVC,但可以為相容裝置切換到VP9。
因此,您可以理解為什麼開放媒體聯盟由Google,Mozilla,Microsoft,Netflix,亞馬遜,英特爾,AMD,ARM和Nvidia組成。 AV1是它一直在開發的編解碼器,於2018年3月底釋出.Netflix的測試顯示比HEVC和VP9低25%的位元率,但編碼複雜了10倍,莫斯科州立大學專案釋出的未經優化的編碼器速度慢了3500倍。 AV1的一大障礙是硬體支援; 2019年底之前估計無解。HEVC人員並沒有坐以待斃 - 一個新的聯合視訊探索團隊已經成立,以便在2020年末開發下一代編解碼器。它的效率將提高50%,並支援下一代顯示技術。