引言
本人最近開始研究視頻重編碼的檢測,因此做個筆記記錄一下自己學習的視頻編碼相關知識。視頻編碼的目的是為了壓縮原始視頻,壓縮的主要思路是從空間、時間、編碼、視覺等幾個主要角度去除冗余信息。而H.265(HEVC)則是目前常用的視頻壓縮編碼格式,本文將主要介紹其編碼單元的格式及其作用。
AVC編碼存在的問題
在介紹HEVC編碼之前,首先會有“為什么要引入新的編碼標準?”這種問題,這是因為AVC編碼仍存在一些問題,而HEVC面對這些問題都有優(yōu)化,且壓縮率優(yōu)于AVC編碼,于是我們先了解一下AVC編碼存在的一些問題。
AVC宏塊尺寸太小
在過去 ,16×16的宏塊大小被認為是內(nèi)存需求和編碼效率之間的合理權衡。但最近研究發(fā)現(xiàn)使用更大的塊大小可以顯著提高高分辨率視頻的編碼效率,因為16×16的大小不足以捕獲來自更高分辨率內(nèi)容的增加的空間相關性,如上表所示,4K視頻中16×16的宏塊面積已經(jīng)占比很小了,這也是HEVC的宏塊(CTU)設計為64×64的原因。
AVC宏塊深度有限
圖1顯示了H.264/A VC中用于預測和變換的塊劃分結構。雖然有幾個非方形分區(qū),但H.264/A VC中的塊劃分架構可以大致等效一個4×4 到16×16節(jié)點的三級四叉樹結構,該結構深度是有限的。
在H.264/A VC中,mb?type是一個集合語法元素,用于指定大小為16×16的宏塊是否應拆分以及如何進行預測。此外,sub?mb?type指定大小為8×8的子宏塊是否應拆分更多。然而,由于大量的組合,這種分割和預測組合在HEVC中效率很低,因此在所有大小中都采用統(tǒng)一一致的語法。
幀間和幀內(nèi)預測方案之間的適應性差
在AVC中,可以指定每個宏塊使用幀內(nèi)或幀間預測方案,但是小于宏塊大?。?6×16)的分區(qū)預測方案則不可進行自適應。
預測與轉換之間存在依賴關系
H.264/A VC支持兩種大小的TB,4×4和8×8,如圖1所示??梢詾槊總€宏塊自適應地使用兩個變換大小,并附加語法元素transform?size?8x8?flag;然而,這在很大程度上取決于塊的分割方式。
當使用幀間預測方案時,如果至少一個塊小于8×8,則應該對宏塊中的所有塊使用4×4變換。即使在另一種情況下,一個宏塊內(nèi)的所有變換大小也應該相同。當使用幀內(nèi)預測方案時,除了幀內(nèi)?16×16模式外,變換的大小應等于塊大小。而在幀內(nèi)?16×16模式中,在對16×16區(qū)域應用16個4×4變換后,對DC值應用4×4大小的Hadamard變換。預測模式和變換大小之間的這種強依賴性以及對塊大小的依賴性使得總體設計更加復雜,尤其是應用于允許更多塊大小變化的HEVC編碼。
HEVC編碼格式
H.265又名為高效率視訊編碼(High Efficiency Video Coding, HEVC)編碼格式,是現(xiàn)行H.264標準于2003年實現(xiàn)標準化以來時隔10年推出的新標準,將成為支撐未來十年的影像服務和產(chǎn)品的視頻壓縮技術。其特點是,支持1080p以上的4K×2K和8K×4K分辨率,將視頻壓縮率提高至H.264的約2倍。也就是說,能以原來一半的編碼速度發(fā)送相同畫質的視頻。例如,按照20Mbit/秒發(fā)送的H.264格式視頻內(nèi)容,在相同畫質的條件下用HEVC格式只需10Mbit/秒的速度。
從編碼順序和結構上講,H.265首先將一個視頻劃分成若干個序列(通常為YUV格式的視頻序列),一個序列劃分成若干個圖像組(GOP),每一個GOP代表一組連續(xù)的視頻幀。H.265 在對圖像做預測編碼和變換編碼時,會先對圖像進行劃分,劃分方式是四叉樹。在劃分四叉樹時,會將整個視頻幀劃分成若干個正方形的編碼樹塊(CTB),CTB 可以繼續(xù)劃分成編碼塊(CB),CB 還可以劃分為預測塊(PB)和變換塊(TB),相應的亮度與色度塊配合上對應的語法元素組成一個編碼單元。
舉個例子,一個CTU包括亮度CTB和色度CTB,作用是將圖像分割成更小的塊,以便進行更高效的編碼和傳輸。對應的語法元素包括其位置和大小,以及與該CTU相關的運動估計和量化參數(shù)等信息。這些語法元素在編碼和解碼過程中都會被使用,以確保正確地對圖像進行編碼和解碼。
H.265對視頻的結構劃分如下圖所示:相對于H.264/AVC的固定大小16×16 macroblock結構,上述的HEVC塊分區(qū)結構被認為是相對于以前的視頻編碼標準來說最重要的變化之一。
從編碼流程來說,H.265的編碼框架如下圖所示:
之所以展示編碼框架圖是為了加深編碼單元塊分區(qū)的理解,因為編碼過程中不同的步驟操作的對象不同,才會將一個視頻序列逐步細分成不同的單元塊。下面來詳細介紹每類編碼單元及其作用。
編碼樹單元(Coding Tree Unit, CTU)
CTU是HEVC的基本處理單元,其中的區(qū)塊(CTB)是存儲資料的地方,許多區(qū)塊加上語法元素組成一個單元(CTU)。此處理單元類似H.264/高階視訊編碼(Advanced Video Coding, AVC)中的宏區(qū)塊(Macroblock)。編碼樹單元的大小可以從16x16到64x64,使用比H.264更大的處理單元得到更好的壓縮效果。
上圖為CTU的一個典型劃分和處理順序的示例圖。右圖為CTU采用的四叉樹結構,這樣可以使CTU內(nèi)部的塊劃分更加靈活。從圖2中可以看出,CTU的大小為64 × 64,最小CU的大小為8 × 8。
編碼單元(Coding Unit, CU)
編碼單元CU是編碼樹的節(jié)內(nèi)部節(jié)點,高效率視訊編碼 (HEVC) 用編碼單元 CU 指示這個單元是屬于畫面內(nèi)預測(Intra Prediction)或是畫面間預測(Inter Prediction)。 同一層次的CU必須是同一尺寸的4個方塊,最多可有4層分解,即64×64(LCU),32×32,16×16和8×8(SCU)。如果不分解,則這個CTU僅包含一個 CU。每個CU包含一塊亮度編碼塊(Coding Blocks, CB)、兩個色度CB以及相應的語法元素。CU的大小和圖像的特性是自適應的,在圖像比較平緩區(qū)域,選擇比較大的CU,而在圖像邊緣或紋理復雜的區(qū)域,選擇比較小的CU,這樣有利于提高編碼效率:
CU可以分為兩類:跳過型CU(Skipped CU)和普通CU:
跳過型CU只能采用幀間預測模式,而且產(chǎn)生的運動向量和圖像的殘差信息不需要傳送給解碼器;
普通CU則可以采用幀內(nèi)預測和幀間預測兩種方式進行預測,然后對殘差數(shù)據(jù)以及附加的控制信息進行編碼。
一個CTU進行編碼時,是按照深度優(yōu)先的順序進行CU編碼,類似于z-scan,因此之前CTU圖中左半部分即CU的編碼順序。
HEVC支持任意大小的CTU,這使得編解碼器能夠快速優(yōu)化不同的內(nèi)容、應用和設備。相比使用固定大小的宏塊(macroblock),支持各種大小的CTU是HEVC在編碼效率和適應性方面的優(yōu)勢之一。特別是對于仍然廣泛使用的低分辨率視頻服務,這種能力尤其有用。通過選擇適當?shù)腃TU大小和最大分層深度,可以將分層塊分割結構優(yōu)化為目標應用程序。
圖4顯示了適用于不同分辨率和內(nèi)容類型的各種CTU大小和CU(Coding Unit,編碼單元)大小的示例。例如,對于使用已知只包含簡單全局運動活動的1080p內(nèi)容的應用程序,CTU大小為64,深度為2可能是一個適當?shù)倪x擇。對于更一般的1080p內(nèi)容,可能還包括小區(qū)域的復雜運動活動,CTU大小為64,最大深度為4將是更好的選擇。
預測單元(Prediction Unit, PU)
CU確實決定了一個編碼樹的葉節(jié)點塊的預測模式,但是這個預測信息并不是直接由CU傳輸給解碼器的。一個編碼單元(CU)可以根據(jù)預測模式的切割類型(Splitting Type)分割成一個、兩個或是四個預測單元,也就是說PU只能是葉子節(jié)點。PU是進行共享預測信息的基本單元,CU到PU僅允許一層劃分,最小的PU為4×4。劃分可以是對稱的,也可以是不對稱的。一個2N×2N(N可以是4、8、16、32)的CU可劃分為8種包含PU方式。PU可以是正方形的,也可以是長方形的,這是為了能夠更好地區(qū)分背景與物體,例如下圖:
換句話說,CU提供了預測模式的選項,而PU用于傳輸預測信息給編碼器。CU和PU是一種包含關系,CU可以包含一個或多個PU。CU包含了PU的全部信息,包括運動信息、殘差信息和預測模式信息等。
轉換單元(Transform Unit, TU)
一旦編碼預測做好了,我們就需要編碼殘差(也就是預測圖像和實際圖像的插值),用DCT類型的變換。再次,CU可能太大了,因為CU可能包含細節(jié)豐富的高頻部分,也可能包含平坦的低頻部分。因此,CU又可以被分為TU。所以TU是變換及量化的基本單元,是具有用于應用整數(shù)變換和量化的殘差或變換系數(shù)的基本代表塊。TU同樣采用四叉樹的分割結構,所支持的尺寸從4×4至32×32的大小。通過基于PU分割類型的預測過程獲得殘差塊后,根據(jù)四叉樹結構將其分割為多個TU。對于每個TU,應用整數(shù)變換。該樹被稱為變換樹或殘差四叉樹(RQT),因為殘差塊由四叉樹結構劃分:
根據(jù)預測殘差的局部變化特性,TU可以自適應地選擇最優(yōu)的模式。大塊的TU模式能夠將能量更好地集中,小塊的TU模式能夠保存更多的圖像細節(jié)。這種靈活的分割結構,可以使變換后的殘差能量得到充分壓縮,以進一步提高編碼增益。
特別地,在HEVC中,PU大小和TU大小都可以達到相應CU的相同大小。這導致TU的大小可能大于同一CU中PU的大小,即同一CU內(nèi)不同PU的殘差可以一起變換。
例如,當TU大小等于CU大小時,無論PU分割類型如何,都將變換應用于覆蓋整個CU的殘差塊。注意,這種情況僅存在于幀間編碼CU,因為預測總是與幀內(nèi)編碼CU的TU分割相耦合。
在幀間預測中,編碼器可以使用多種預測模式來預測當前塊的像素值,例如來自參考幀的運動矢量預測(motion vector prediction,簡稱MVP)或者來自其他塊的鄰域塊預測(intra prediction)。這些預測模式的選擇不受當前塊內(nèi)部結構的限制,因此,CU、PU和TU可以獨立地被設定為相同的大小,所以可能出現(xiàn)上述情況。
而在幀內(nèi)預測中,由于要對當前塊內(nèi)部的像素值進行預測,因此需要對當前塊進行劃分,以便更好地進行預測。具體而言,當前塊需要劃分為一個或多個PU,每個PU再被劃分為一個或多個TU。這種劃分方式對于不同的塊大小、像素內(nèi)容和紋理復雜度有不同的適用情況,因此不能隨意設置大小。因此,在幀內(nèi)預測中,CU、PU和TU的大小通常是不同的,且CU>=PU>=TU。
這張兩張圖可以比較好的理解上述的PU與TU結構:
HEVC嵌套四叉樹結構的優(yōu)勢
盡管在視頻壓縮中使用四叉樹結構并不是一個新概念,但HEVC中的編碼樹方法通過將PU和TU四叉樹概念用于視頻壓縮,可以帶來額外的編碼效率優(yōu)勢。
四叉樹結構中,樹的葉節(jié)點可以合并或組合,這樣可以通過合并和組合節(jié)點實現(xiàn)L形或矩形形狀的運動分割。然而,在HEVC塊劃分結構中,為了實現(xiàn)這樣的形狀,應該在進一步劃分之后使用較小的塊進行合并過程。PU在HEVC中解決了這些情況,而不是為了合并和組合再拆分一層。在HEVC中,PU采用預定義的分割模式(PART-2N×2N,PART-2N×N和PART-N×2N),在樹的葉節(jié)點上測試最佳分割模式。PUs仍然可以通過合并模式共享運動信息。雖然通過去除對稱矩形分割模式(PART-2N×N和PART-N×2N)并替換相應的合并標志,可以將一般的四叉樹結構應用于HEVC,但經(jīng)過證明,其編碼效率和復雜性均不如現(xiàn)有的設計。
另一個優(yōu)勢是將四叉樹運用到TU中。傳統(tǒng)的視頻編碼標準中變換塊的大小和運動補償塊的大小是固定的,而HEVC中變換塊和運動補償塊使用的是更為靈活的四叉樹結構,兩者是可以同步變化的。但是,變換塊的大小和運動補償塊的大小仍然是相關聯(lián)的,因為它們必須保持一致,以確保編碼的正確性和一致性。
這種嵌套四叉樹結構的變換樹是從編碼樹的葉節(jié)點開始建立的,因此在使用HEVC進行編碼時,這種嵌套四叉樹結構可以充分利用深度信息進行熵編碼,從而提高編碼效率。
最后一個優(yōu)勢是利用深度信息進行熵編碼。其中,深度信息指的是四叉樹的深度,這個深度信息可以用于更加精細的熵編碼。例如,對于HEVC標準中的一些語法元素,如inter?pred?idc、split?transform?flag、cbf?luma、cbf?cb和cbf?cr,都可以利用深度信息進行熵編碼。這種依賴深度信息的上下文推導技術可以提高編碼效率,并且可以減少硬件實現(xiàn)中所需的行緩沖器,因為上方CTU的信息不需要被存儲。因此,HEVC標準充分利用了深度信息進行熵編碼,從而提高了編碼效率。文章來源:http://www.zghlxwxcb.cn/news/detail-449059.html
具體來說,利用深度信息進行熵編碼指的是,根據(jù)節(jié)點深度計算出符號的概率分布,并根據(jù)概率為每個符號分配一個合適的編碼,以便可以用更少的比特數(shù)表示。通過利用深度信息進行熵編碼,HEVC可以在盡可能少的比特數(shù)下有效地表示視頻數(shù)據(jù),從而提高了編碼效率。此外,這種方式可以減少硬件實現(xiàn)中所需的行緩沖器數(shù)量,因為不需要存儲上面CTU的信息,這樣就可以降低編碼器的硬件成本。文章來源地址http://www.zghlxwxcb.cn/news/detail-449059.html
到了這里,關于HEVC(H.265)視頻壓縮編碼格式與其原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!