2020年VVC視頻編碼進入標準化最後階段,有望在年末正式成爲國際標準。
文 / Christian Feldmann架構
譯 / 元寶工具
原文 https://bitmovin.com/compress...性能
2020年是屬於VVC的一年,至少是在標準化的最後階段。在最近一次布魯塞爾會議舉行以後,VVC委員會的草案得到了經過。所以,VVC有望在2020年末最終成爲國際標準。這也意味着標準化過程正在慢慢地接近尾聲,標準草案沒有添加任何新的主要特性。然而,標準化是一個持續進行的過程,包括對文本的清理和錯誤修復、對現有工具的簡化以及高級語法的完成。測試
那麼,VVC到底有什麼新特性呢?對於視頻編碼來講,這是一次真正的革命嗎?簡而言之:不是的。雖然它在技術上很是先進,但它也只是HEVC的一個進化產物。它仍然使用基於塊的混合視頻編碼方法,這是自H.261 (1988年起)以來全部主要視頻編碼標準的基礎概念。在這個概念中,視頻的每一幀都被分割成塊,而後按順序依次去處理全部塊。優化
在解碼器端,解碼器會在一次循環中處理每個塊,循環從碼流的熵解碼開始。而後對解碼後的變換系數進行反量化和反變換運算。輸出是像素域中的偏差信號,而後進入編碼循環,並添加到預測信號中。有兩種預測類型:幀間預測和幀內預測。幀間預測是從先前編碼的圖像中複製塊(運動補償),而幀內預測只使用解碼圖像中的已解碼的像素信息。加法器的輸出是通過一些過濾器的重構塊。這一般包括一個過濾器,用來刪除發生在塊邊界上的塊僞像,但也可使用更高級的過濾器。最後,該塊被保存到一個圖片緩衝區中,以便在解碼完成後能夠將其輸出到屏幕上,而且循環能夠繼續處理下一個塊。編碼
在編碼器端,狀況稍微複雜一些,由於編碼器必須執行相應的正向操做,以及來自解碼器的反向操做才能得到相同的信息以進行預測。spa
混合視頻解碼器的通用架構圖設計
雖然VVC也使用了這些基本概念,但全部的組件都已經用新思想和新技術作了改進或修改。在這篇博文中,我將展現VVC引進的一些改進。然而,這只是VVC中新工具的一小部分,全部細節和工具的完整列表能夠輕鬆地填滿整本書(有人可能已經開始在寫這本書了)。3d
如上所述,視頻中的每一幀都被分割成一個規則的網格塊。在VVC中,這些所謂的編碼樹單元(Coding Tree Units, CTU)的大小從HEVC中的64×64增長到128×128像素。多個塊能夠被排列成邏輯區域。這些被定義爲tile、slice和Subpictures。雖然這些技術在早期的編解碼器中就已經廣爲人知,可是它們的組合方式是全新的。視頻
圖片被分割成四個大小相等的小塊(藍色)。有四片(綠色)。左邊的這個包含兩個小塊。在右上角,小塊被分紅兩部分。CTUs用灰色標記。
這些區域的關鍵特性在於它們在碼流中從邏輯上是分開的,並支持各類用例:
讓咱們回到128×128的CTU塊。正如前面所述,每一個塊都要通過編碼循環。然而,只處理128×128像素的塊,效率是很是低的,所以每一個CTU被靈活地拆分紅更小的子塊,並且有關如何進行分割的信息會被編碼到碼流中。編碼器能夠根據塊的內容選擇CTU的最佳分區。在一個相對平坦的區域,塊越大,效率越高。而在有邊緣或更多細節的區域,一般選擇較小的塊。VVC中的劃分是使用兩個後續的層次樹來完成的:
每一個塊被分紅兩個階段。首先使用層次二叉樹(左),而後使用層次三元樹(右)。
將VVC與其餘視頻編解碼器區別開來的一個因素是,CTU能夠被分割成許多塊,其大小和形狀都具備很高的靈活性。這樣,編碼器能夠靈活地適應各類視頻特性,從而提升編碼性能。固然,這種高度的靈活性是有代價的。編碼器必須考慮全部可能的分割選擇,這須要更多的計算時間。(JVET-Q2002)
在幀內預測中,它是根據當前圖像中已經解碼的部分來預測當前塊。更精確地說,只將離鄰域一個像素寬的條帶用於正常的幀內預測。關於如何從這些參考像素中來預測一個塊有多種模式。VVC中常見的模式有平面模式、直流模式和角度模式。在VVC中,角度的離散方向數由33個增長到65個,與HEVC相比變化不大。因此,讓咱們來關注一下真正的新工具:
多參考線預測:如前所述,以前一般是僅使用一行相鄰的像素進行幀內預測。在VVC中,這個限制稍微放寬了一些,這樣就能夠從不直接靠近當前塊的兩條線進行預測。可是,這有幾個限制,由於一次只能使用一條線路,而且不容許跨越CTU邊界進行預測。這些限制對於高效的硬件實現是必要的。(JVET-L0283)
在傳統的幀內預測中,只有一行(第0行)用於預測當前塊。在多參考線預測中,這一約束被放寬,行1或行3也能夠用於預測。
固然,這個列表並不完整,還有更多的幀內預測方案能夠進一步提升編碼效率。對模型的模內預測和編碼方法也進行了改進和完善。
在幀間預測方面,VVC對HEVC的基本工具進行了繼承和調整。例如,一幅或兩幅參考圖片的單向和雙向運動補償的基本概念基本不變。然而,之前在視頻編碼標準中尚未像這樣使用過下面一些新的工具:
雙向光流(BDOF):若是預測塊使用雙向預測,其中一個參考在過去的時間內,另外一個參考在將來的時間內,BDOF能夠用來細化預測塊的運動場。爲此,將預測塊劃分爲4×4像素的網格子塊。對於這4×4塊中的每一塊,利用兩個參考值來計算光流用來細化運動矢量。雖然這增長了光流計算的解碼器的複雜度,但精細的運動向量場不須要傳輸,從而下降了碼率。(JVET-J0024)
解碼器端運動矢量細化:另外一種容許在解碼器上自動細化運動矢量而無需傳輸額外的運動數據的方法是在解碼器端執行實際的運動搜索。雖然這一基本思想已經存在了一段時間,但在解碼器端進行搜索的複雜性一直被認爲太高,直到如今,這個過程分爲三個步驟:
幾何分區:在有關塊分區的這一節中,會介紹如何將每一個CTU分割成更小的塊。全部這些分割操做都只是將矩形塊分割成更小的矩形塊。不幸的是,天然視頻內容一般包含更多的彎曲邊緣,這些彎曲的邊緣只能用矩形塊來近似。在這種狀況下,幾何分區容許將一個塊非水平分割爲兩個部分。對這兩部分分別使用獨立的運動矢量進行運動補償,並在邊緣採用混合的方法將兩個預測信號合併在一塊兒。
一些使用幾何分區的例子
在當前的實現中,有82種不一樣的幾何分區模式。它們由分區線的24個斜率和4個偏移值組成。然而,確切的模式數目仍在討論中,而且可能仍會改變。[JVET-P0884, JVET-P0085]
仿射運動:傳統的單運動矢量運動補償只能表示二維平面運動。這意味着任何塊只能在圖像平面上的x和y方向上移動。然而,在一個天然的視頻中,嚴格的平面運動是很是罕見的,物體每每會更自由地移動(如旋轉和縮放)。VVC實現了一個仿射運動模型,該模型使用兩個或三個運動矢量來支持一個塊具備四或六個自由度的運動。爲了保持較低的實現複雜度,參考塊沒有以像素爲單位進行變換,而是採用了一種重用現有運動補償和插值方法的方法。將預測塊分割成4×4像素塊的網格。從兩個(或三個)控制點運動矢量中,每一個4×4像素塊計算一個運動矢量。而後,對這4×4塊進行常規的二維平面運動補償。雖然這個實現不是一個真正的仿射運動補償,但它是一個很好的近似,並容許有效的實如今硬件和軟件中。(JVET-O0070)
對於每4×4個子塊,從控制點運動矢量(藍色)中計算出單個運動矢量(綠色)。 而後按4×4塊進行常規運動補償。
轉碼階段也經歷了一些重大的重構。如今,經過對每一個方向分別執行變換,能夠在變換階段支持由三元拆分引入的矩形塊。最大變換塊大小也增長到64×64像素。當涉及到高清和超高清內容時,這些更大的變換尺寸特別有用。此外,還添加了另外兩種類型的變換。雖然變體2 (DCT- ii)中的離散餘弦變換已經從HEVC中獲得了很好的理解,可是此外還增長了一個DCT變體(DCT- viii),以及一個離散正弦變換(DST-VII)。根據預測模式,編碼器能夠根據哪個工做得最好來選擇不一樣的變換方式。
量化階段最大的變化是最大量化參數(QP)從51增長到了63。這是頗有必要的,由於人們發現,即便在儘量高的QP設置下,VVC的編碼工具也能高效地工做,所以不可能將某些編碼的碼率和質量下降到所需的水平。
另外一個更有趣的新工具叫作相關量化。量化階段的目的是將連續變換的輸出值映射到能夠編碼的碼流的離散值中。這種操做自己就伴隨着信息的丟失。量化越大(QP值越高),丟失的信息越多。在下面的圖中,顯示了一個簡單的量化方案,其中每對線之間的全部值都量化爲標記的藍色叉號的值。只有藍色叉號的索引纔會被編碼到碼流中,而後解碼器才能重建相應的值。
基本的量化。每條垂直線都標誌着一個決策閾值。將兩個閾值之間的全部值量化爲一個重構值。重構值用藍色叉號標記。
一般,在視頻編解碼器中,只使用一種固定的量化方案。但在相關量化中,它裏面有兩個量化方案是用略微偏移的重構值定義的。
在嵌入式量化中,使用兩組重構值。解碼器根據先前解碼的值在這些值之間自動切換。
在兩個量化器之間的切換是經過使用微型狀態機隱式進行的,該狀態機使用的是已編碼係數的奇偶校驗。編碼器能夠經過故意改變一些重構值在量化器之間切換。可使用碼率失真權衡來找到這個開關的最佳位置,在這個位置引入的偏差最小,而且開關提供了最大的增益。在某種程度上,這與標誌數據隱藏(在HEVC中使用)有關,其中信息也「隱藏」在其餘數據中。(JVET-K0070)
目前討論的全部工具都是針對傳統的二維視頻編碼進行構建和優化的。然而,其名稱中的「通用的」一詞代表VVC適用於各類各樣的應用程序。實際上,VVC包含了一些能夠用於更具體任務的一些特性,這些特性使得它很是通用。之前的編解碼器一般將這些專用工具放入單獨的標準或單獨的擴展中。其中一種工具是水平環繞運動補償。傳播360內容的一種廣泛方法是使用等矩形投影將360視頻映射到二維平面上。而後可使用傳統的2D視頻編碼方法對2D視頻進行編碼。然而,視頻有一些特殊的屬性是能夠被編碼器使用的。一個屬性是在視頻中沒有左邊框或右邊框。因爲360視角的環繞,所以這能夠用於運動補償。所以,當從左外邊界進行運動補償時,預測將環繞並使用圖像右側的像素值。
從問題左側之外的位置進行的預測也將環繞並使用圖片右側的像素。
雖然這個工具增長了壓縮性能,但因爲普通的視頻編解碼器每每會在2D視頻的左右兩邊縫合在一塊兒的直線上產生可見的邊緣,所以它也有助於提升視覺質量。(JVET-L0231)
視頻編碼的另外一個應用是對計算機生成的視頻內容(也稱爲屏幕內容)進行編碼。這種類型的內容一般具備一些特殊的特徵,如很是尖銳的邊緣和很是均勻的區域,這對於天然視頻內容來講是非典型的。在這種狀況下一個很是強大的工具是幀塊內複製,它能夠從同一幀的已解碼區域執行復制操做。這與運動補償很是類似,但關鍵的區別在於,所表示的向量並非指時間運動,而是指向當前幀中用於複製操做的源區域。(JVET-J0042)
在每次標準化會議上,VVC測試模型軟件(VTM)都會更新,並會運行一個測試,將VTM的最新版本與HEVC參考軟件(HM)進行比較。這個測試是純粹的客觀使用PSNR值和Bjøntegaard增量來比較的。在測試多種不一樣的配置時,咱們將重點放在了所謂的隨機訪問配置,這是與視頻傳輸和流媒體最相關的配置。
VTM 7.0與HM 16.20的BD速率比較。[Q0003]
就BD速率性能而言,VTM在獲得差很少的PSNR值時,同時也能將所需帶寬下降約35%。雖然編碼時間並非衡量複雜性的完美標準,但它能夠提供一個良好的初始指示。編碼器端的VVC複雜度大約增長了10倍,而解碼器的複雜度只增長了1.7倍。請注意,這些結果都是基於PSNR的結果。衆所周知,PSNR值與實際主觀感知質量的耦合不是很好,一些初步的實驗代表,主觀結果彷佛比下降35%的碼率要高。正式的主觀測試計劃在今年晚些時候進行。
那麼在瞭解了全部這些技術細節以後,VVC的將來會是怎樣的呢?從技術上講,VVC是用錢能買到的最高效、最早進的編碼標準。然而,目前還不清楚這到底要花多少錢。一旦標準化過程在2020年10月正式完成,就能夠開始爲新標準創建許可條款。在之前的標準中,咱們瞭解到這是一個複雜的過程,可能須要一段時間。與此同時,還有其餘一些高效的編解碼器,它們的應用程序和實現正在日趨成熟和不斷髮展。