天天看點

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

本系列文章分為三個部分,首先對HEVC标準做一個介紹,然後回顧一下H.264中的碼率控制方法,分析為什麼不能直接沿用舊的方法,最後具體分析HEVC的碼率控制方法和相應代碼。

HEVC标準介紹

首先我們需要明白的是,其實每一代視訊編碼标準的更新都是為了實作兩個大目标:更好的支援高分辨視訊;以更高的壓縮率達到同等的主觀品質。除此之外,還有提高網絡适配性(比如在H.264中定義的網絡抽象層概念)、抗出錯性能(H.264中的資料分割、靈活宏塊順序)等等的小目标。當然,提升這些性能要付出的代價往往是複雜度的大幅增加。在這幾個問題上,HEVC也不例外。當年JCT-VC确定的HEVC的核心目标就是在H.264 High Profile的基礎上将壓縮效率提高一倍。分辨率方面HEVC也可以支援到8K。

從編碼架構上來說,HEVC并沒有革命性的改變,依舊采用了混合編碼架構,也能看到在H.264中就有的變換、量化、熵編碼、幀内預測、幀間預測、環路濾波等子產品。但是HEVC在這個架構中幾乎所有子產品都引入了新的編碼技術。一路看過各種編碼标準之後就會發現,随着視訊編碼技術的不斷成熟,各種新推出的編碼标準基本都是這個模式:在保持原有架構基本不變的情況下采用更多的新技術。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

上圖即為一個典型的混合編碼架構

下面我們就來具體看看HEVC中的一些新概念以及在H.264已有概念上的一些創新。

1. 編碼結構與配置

為了應對不同應用場合, HEVC設立了GOP的3種編碼結構,即幀内編碼、低延時編碼和随機通路編碼。在幀内編碼結構中,每一幀圖像都是按幀内方式進行空間域預測編碼,不使用時間參考幀。在低延遲時間( Low Delay)編碼結構中,隻有第一幀圖像按照幀内方式進行編碼,并成為 IDR幀,随後的各幀都作為一般的P幀和B幀進行編碼。這主要是為互動式實時通信設計的。随機通路( Random Access) 編碼結構主要由分級B幀構成( Hierarchical B) ,周期性地(大約每隔 1秒) 插入随機通路( Clean Random Access,CRA) 幀。這些CRA 幀成為編碼視訊流中的随機通路點( Random Access Point,RAP) 。所謂随機通路點是指對這些幀的解碼可以獨立進行,不需要參考比特流中前面已經解碼的圖像幀。這種對随機通路方式有力地支援了信道轉換、 搜尋以及動态流媒體服務等應用。

2. 四叉樹單元劃分

在HEVC中依然采用分塊編碼方式,但不同于H.264中固定尺寸的宏塊,HEVC中塊的尺寸是可以自适應改變的。HEVC中定義了四個新的概念:編碼樹單元、編碼單元、預測單元和變換單元。

(1) 編碼樹單元

類似于H.264 /AVC中的宏塊,HEVC将編碼幀分為若幹編碼樹塊( Coding Tree Blocks,CTB),它們是進行預測、變換、量化和熵編碼等處理的基本單元,其尺寸或者所包含的像素數可以是16×16、32×32或64×64。同一位置的亮度CTB和兩塊色度CTB,再加上相應的文法元素形成一編碼樹單元( Coding Tree Units,CTU)。一般來說,Unit是從文法結構角度進行描述,而Block是從采樣值角度進行描述,并不特意區分這兩個概念。由于目前HEVC隻支援4:2:0的像素格式,是以色度塊CTB的像素數為同等亮度塊的1 /4,即水準和垂直方向都是亮度塊的一半。

(2) 編碼單元

CTU 又可以按照四叉樹結構分解為若幹方形編碼單元( Coding Units,CU),同一層次的CU必須是同一尺寸的4個方塊,最多可有4層分解,即64×64,32×32,16×16和8×8。如果不分解,則這個CTU僅包含一個 CU。每個CU包含一塊亮度編碼塊( Coding Blocks,CB) 、兩個色度CB以及相應的文法元素。CB 的大小和圖像的特性是自适應的,在圖像比較平緩區域,選擇比較大的CB,而在圖像邊緣或紋理複雜的區域,選擇比較小的CU,有利于提高編碼效率。CU是決定進行幀内預測還是幀間預測的單元,也就是說整個 CU隻能是一種預測模式,不是幀内就是幀間。CU還可以按照四杈樹層次分解(或不分解) 為更小的預測單元( Prediction Units,PU) 和變換單元( TB,Transform Units) 。

(3) 預測單元

預測單元PU是進行預測運算的基本單元,包括幀内和幀間預測兩類。一個編碼單元CU可以包含一個或者多個預測單元,CU到PU僅允許一層劃分,最小的PU為4×4。劃分可以是對稱的,也可以是不對稱的。如圖所示, 一個2N×2N ( N可以是 4、8、16、32) 的CU可劃分為8種包含PU方式。幀間預測時可以在這 8 種方式中任意選擇,在幀間預測的跳過( skip) 模式中隻允許選擇2N×2N這種模式,幀内預測時隻允許選擇2N×2N或N×N方式。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

(4) 變換單元

變換單元TU是進行變換和量化的基本單元,是在CU的基礎上劃分的,但受到所在的預測單元PU的限制。如PU是正方形,則TU也必須是正方形,尺寸為4×4、8×8、16×16、32×32。幀内編碼模式中變換單元的尺寸需小于或者等于預測單元,而幀間編碼模式中變換單元可以大于預測單元,但是不能超過編碼單元 CU。一個編碼單元中多個變換單元也是按照四叉樹的結構排列,即每向下一層劃分為4個小的正方形。如 PU為非正方形時,TU 也需非正方形,其大小為32×8、8×32、16×4、4×16,可用于亮度分量,其中隻有32×8、8×32 可用于色度分量。HEVC中允許使用的變換包括4x4、8x8、16x16和32x32整數DCT變換以及對于Intra預測中4x4亮度塊使用的整數DST變換。

雖然Intra預測的模式資訊是以PU為機關傳遞的,但Intra預測是以TU為機關進行的。所有PU内部的各個TU的預測方向是一緻的,以TU為基本單元進行Intra預測的目的是使已重建像素和待預測像素之間的距離盡量短,進而提高預測效率,即進行幀内預測的基本單元是TB。這也是在Intra編碼的CU中,TU永遠不會比PU大的原因。

3. 條和片的劃分

條( Slice)的劃分在H.264 /AVC 中就有,HEVC也允許将圖像幀劃分為若幹條,條是HEVC 中獨立的編碼區域,條的劃分以CTU或更小的CU為界。為了支援并行計算和差錯控制,某一個條可以劃分為更小的條,謂之“熵條”( Entropy Slice,ES)。每個ES都可獨立地進行熵解碼,而毋須參考其它的ES。如在多核的并行進行中,就可以安排每個核單獨處理一個ES。每個條編碼為一個NAL單元,其容量小于等于最大網絡傳輸單元( Maximum Transmission Unit,MTU) 容量。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

在HEVC中新引入了片( Tile)的劃分,用水準和垂直的若幹條邊界将圖像幀劃分為多個矩形區域,每個區域就是一個片,每一個片包含整數個CTU,片之間也可以互相獨立,以此實作并行處理。片劃分時并不要求水準或垂直邊界均勻分布, 可根據并行計算和差錯控制的要求靈活掌握。在編碼時圖像中的片也是按掃描順序進行處理,每個片中的CTU 也是按掃描順序進行。在HEVC中,允許條和片在同一圖像幀中同時使用,既可以一個條中包含若幹片,又可以一個片中包含若幹條。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

4. 圖像格式

取樣結構方面還是以前那三樣,但是在比特深度方面,HEVC引入了一項新技術,提供了一種對編碼器内外有别的比特深度表示方式,即内部比特深度增加( IBDI,Internal Bit Depth Increase)方式。這種方式允許在編碼器内采用高于8比特的像素深度(如10比特)進行編碼運算,而編碼器外部,即編碼器的輸出圖像仍然是8比特深度。這是因為8比特深度對人眼來說可能已經足夠了,但是對編碼處理而言,有時顯得精度不夠,往往會帶來的計算誤差和累積誤差。

除了比特深度之外,HEVC還有一點值得注意的是它沒有提供專用于隔行視訊的工具,而是将隔行視訊的一幀看作兩個獨立的場,對各個場資料分别進行編碼,簡化了編碼器的實作。這也是因為随着數字視訊技術的快速發展,視訊的隔行掃描方式日漸式微。

5. 幀内預測

HEVC為亮度資訊定義了 33 種不同的幀内預測方向,連同平面( Planar) 和直流( DC) 模式,總共35種幀内預測模式。DC模式和H.264 /AVC 類似,對目前塊的所有像素使用同一個預測值,即它們的平均值。平面模式的預測值由水準和垂直兩個方向上已知像素的線性内插産生,特别适用于圖像的平坦區域。在幀内編碼中色度信号也采用相應亮度信号所采用的預測模式。這樣,對于色度資訊,HEVC有5種幀内預測模式: Planar 模式( 0) 、 垂直模式( 1)、水準模式( 2)、DC 模式( 3)和導出( derived) 模式( 4),即相應的亮度模式。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

6. 幀間預測

HEVC的幀間預測編碼總體上和H.264 /AVC 相似,但進行了如下幾點改進

(1) 非對稱運動劃分( Asymmetric Motion Partitions,AMP)

允許非對稱地劃分64×64到16×16的CU為更小的PU,PU可以是方形的, 也可以是矩形的。每個采用幀間預測方式編碼的PU都有一套運動參數,包括運動矢量、參考幀索引和參考表标志。因為 AMP 允許 PU在運動估計和運動補償中更精确地符合圖像中運動目标的形狀,而不需要進一步的細分來解決,是以可以提高編碼效率。

(2) 運動合并( Motion Merge)

HEVC對運動參數的編碼有3種模式,簡稱之為Inter 模式、Skip 模式和Merge 模式。前兩種模式和 H.264 /AVC 類似,Merge模式是HEVC新引入的。這樣, 對于每個幀間編碼的 PU,可以在下列 3 種編碼模式中選擇: (1) 采用對運動參數直接編碼(如對運動矢量進行預測編碼)的Inter 模式,(2) 采用運動合并技術的 Merge 模式,(3)采用改進的 Skip 模式。Inter 模式需要傳送目前編碼 PU 的運動矢量來完成基于運動補償的幀間預測。HEVC中運動矢量可采取空間或時間預測編碼的方式( H.264 /AVC 僅采用空間預測)。而Skip 模式和Merge模式都無需傳送MV 資訊,隻傳送候選PU塊的索引資訊,由解碼端采用運動推理( Motion Inference)方法(如拷貝)來獲得運動資訊,推理依據來自空域鄰近塊或時域鄰近塊(候選塊)的MV。在Skip 模式中連殘差資訊也省略了,編碼器隻需要編碼運動合并候選者的索引資訊,以保證解碼時Skip PU可以拷貝中選者的運動參數作為

自己的運動參數。這樣,對那些幀間變化很少,或者運動靜止的區域編碼隻需很少的比特。

在以往标準的幀間預測中,對以每個幀間預測塊都要傳輸一套運動參數。為了進一步提高編碼效率, 可對鄰近的PU塊進行合并(Merge)處理,形成Merge幀間預測編碼模式,即将毗鄰的運動參數相同或相近的幾個PU塊合并起來形成一個所謂的“小區”( Region),隻要為每個小區傳輸一次運動參數,不必為每個PU塊分别傳輸運動參數。在運動合并模式中,HEVC 為目前正在編碼的PU建立一個先前已編碼的鄰近PU (稱為“候選”PU) 清單。其中候選PU既可以是在編PU的空間鄰近,也可以是時間鄰近。編碼器按照率失真準則選取并标注這個運動合并清單中哪一個候選PU被選中,繼而使得目前編碼的PU在解碼時隻要拷貝中選PU的運動參數。顯然,運動合并方式不需要為目前PU去編碼運動矢量,取而代之的是隻需要編碼運動合并清單中候選者的簡單索引資訊。

Merge 模式的這種 MVP 候選集的設定和選擇方法在 HEVC 中稱之為進階運動矢量預測( Advanced Motion Vector Prediction, AMVP),它也同樣适用于 Skip 模式和Inter模式的最佳MVP塊的選擇。

(3) 參考圖檔管理

H.264/MPEG-4 AVC中使用基于滑動視窗(Sliding Window)和MMCO(Memo Management Control Operation,記憶體管理控制操作)的方式對DPB(Decoded Picture Buffer,解碼圖檔緩存)中的圖檔進行操作。H.264/MPEG-4 AVC使用的是基于“指令”的參考圖檔管理方式。由于HEVC中支援時間可分級,高時間級别的圖檔可以人為的被丢棄。若被丢棄的圖檔中含有控制DPB的指令,則會導緻不正确的DPB狀态。故HEVC使用更為魯棒的基于狀态的RPS(Reference Picture Set,參考圖檔集合)的方式對DPB中的參考圖檔進行管理。HEVC中的RPS并不是基于指令的,而是基于狀态的,故更為穩健,抗差錯性也更強。

7. 變換和量化

HEVC 的量化機理和 H.264 /AVC基本相同,是在整數DCT變換時一并完成的。HEVC采用了率失真優化的量化( Rate Distortion Optimized Quantization,RDOQ) 技術,在給定碼率的情況下選擇最優的量化參數使重建圖像的失真最小。量化操作是在變換單元 TU 中分别對亮度和色度分量進行的。在TU中所有的變換系數都是按照一個特定的量化參數 QP 統一進行量化和反量化的。HEVC的RDOQ 可比H.264 /AVC提高編碼效率 5% 左右(亮度) ,當然帶來的負面影響是計算複雜度的增加。

8. 熵編碼

HEVC隻采用了CABAC進行熵編碼,而沒有使用CAVLC。

除此之外,考慮到高清、超高清視訊編碼的巨大運算量,在HEVC提供了基于條和基于片的便于并行編碼和解碼處理的機制。然而,這樣又會引起編碼性能的降低,因為這些條和片是獨立預測的,打破了穿越邊界的預測相關性,每個條或片的用于熵編碼的統計必須從頭開始。為了避免這個問題,HEVC 提出了一種波前并行處理( Wavefront Parallel Processing,WPP)的熵編碼技術,在熵編碼時不需要打破預測的連貫性,可盡可能多地利用上下文資訊。

在編碼的波前并行處理時,一旦目前 CTU 行上邊的兩塊 CTU 已經處理完了,立即用一個新的并行程序(通常是一個新的線程) 開始處理這新的一行CTU,其過程如圖所示。之是以需要兩塊 CTU,是因為幀内預測和運動矢量預測需要依賴于來之目前CTU 上邊和右上邊的 CTU 的資料。WPP 熵編碼初始化的參數可來自于從目前行上邊的兩塊完全編碼的 CTU 獲得的資訊,這樣就可在新的編碼線程中使用盡可能多的上下文資訊。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

9. 環路濾波

環路濾波( Loop Filtering)位于編碼器預測環路中的反量化/反變換單元之後、重建的運動補償預測參考幀之前。因而,環路濾波是預測環路的一部分,屬于環内處理,而不是環外的後處理。環路濾波的目标就是消除編碼過程中預測、變換和量化等環節引入的失真。 由于濾波是在預測環路内進行的,減少了失真,存儲後為運動補償預測提供了較高品質的參考幀。HEVC 除了采用和 H.264 /AVC類似的環内去方塊濾波( DeBlocking Filter,DBF) 外,還增加了新的樣值自适應偏移( Sample Adaptive Offset,SAO)環内濾波工具,形成了2 個按順序進行的處理: 去方塊濾波和SAO濾波。

去方塊濾波方面,首先我們知道方塊效應是由于采用圖像分塊壓縮方法所形成的一種圖像失真,尤其在塊的邊界處更為明顯。為了消除這類失真,提高重建視訊的主觀和客觀品質,H.264 /AVC 在方塊的邊界按照“邊界強度”進行自适應低通濾波,又稱去方塊濾波。HEVC也使用了類似的環内去方塊濾波來減輕各種單元邊界(如CU、PU、TU 等)的塊效應。HEVC 為了減少複雜性,利于簡化硬體設計和并行處理,不對4×4的塊邊界濾波,僅對8x8邊界進行濾波,且僅定義了3個邊界強度等級( 0、1 和2),濾波邊界附近的像素,省卻了對非邊界處像素的處理。在濾波前,對于每一個邊界需要判決: 是否需要進行去方塊濾波? 如果需要,還要判決到底是進行強濾波還是弱濾波。判決是根據穿越邊界像素的梯度值以及由此塊的量化參數 QP 導出的門限值共同決定的。HEVC的去方塊濾波對需要進行濾波的各類邊界統一進行,先對整個圖像的所有垂直邊界進行水準方向濾波,然後再對所有的水準邊界進行垂直方向濾波。

樣值自适應偏移( SAO) 是HEVC的一項新的編碼工具,對要重建的圖像逐像素進行濾波。它先按照像素的灰階值或邊緣的性質,将像素分為不同的類型,然後按照不同的類型為每個像素值加上一個簡單的偏移值,達到減少失真的目的,進而提高壓縮率。加偏移值有兩種模式,帶偏移( Band Offset,BO)和邊緣偏移( Edge Offset,EO)。編碼器對圖像的不同區域選擇施加BO模式或EO模式的偏移,并在碼流中給出相應的辨別。

BO模式将像素值從0到最大值分為32個相等的間隔——“帶( bands)”,例如對8比特而言,最大值是 255,則此時的帶的寬度就是256 /32 = 8,每個帶所包含的像素值都比較相近。如果某 CTB 的亮度值分布在4個相鄰的帶中間,說明這原本是一個比較平坦的圖像區域,這樣的區域人為失真容易出現,則需對這些像素值施加偏移量(可正可負),使像素值的分布趨向更集中。當然這個偏移量也要作為帶偏移傳輸到解碼端。

EO模式使用一種3像素結構來對所處理的像素進行分類。在該像素所處邊緣(一維) 的方向上、以該像素為中心再加上最近鄰的2個像素,形成45°、垂直、水準和 135°四種“3 像素結構”,如圖所示。按照3像素值的不同分布,該像素可被分為峰值像素(如果其值大于相鄰的2個像素) ,谷值像素(如果其值小于相鄰的 2 個像素),邊緣像素(如果其值等于任何一個相鄰像素)和其它像素(如果不符合前 3 種) 共4類。對4類不同的像素所加的偏移值也不同。

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

最後來簡單順一遍HEVC的編碼過程,如下圖

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

輸入HEVC編碼器的是原始視訊序列,原始視訊序列會先按照LCU(Largest Coding Unit,最大編碼單元)分成不重疊的矩形塊。對于每個LCU,編碼器先要選擇合适的CU四叉樹劃分方式。對于每個不再繼續劃分的CU,編碼器會選擇合适的預測方式進行預測。CU可以繼續劃分為PU和TU。經過預測後,原始信号和預測信号的差稱作殘差信号,而殘差信号經過變換量化後傳遞到解碼端。預測值加上經過反變換和反量化後重建的殘內插補點構成了重建值。而此重建值需經過濾波(包括去塊效應濾波和SAO)處理後,構成最終的輸出圖檔。

以上介紹了HEVC标準的相關内容,并且在最後簡單梳理了一下HEVC的編碼流程,下一篇文章中将會介紹HEVC所采用的全新的碼率控制算法。

關注下方公衆号,回複“hevc代碼分析”,檢視本文完整pdf文檔下載下傳連結

關注公衆号,掌握更多多媒體領域知識與資訊

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

文章幫到你了?可以掃描如下二維碼進行打賞~,打賞多少您随意~

HEVC碼率控制算法研究與HM相應代碼分析(一)——HEVC标準及編碼流程介紹

繼續閱讀