第244期 / February 5, 2018

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

HEVC(High Efficiency Video Coding)高效率視訊編碼法介紹

作者/許庭瑋

[發表日期:2018/1/5]

作者簡歷

作者目前服務於凌群電腦證券產品研發處之軟體工程師,專長為Typescript,Node.js之開發,目前負責前後端網頁串流與設計工作。

前言

近年來網路技術及行動裝置的普及,越來越多人透過行動通訊裝置線上觀看視訊,但每位使用者的觀看裝置並不一定相同,例如:電腦、平板、手機等等,但是受限於各種行動裝置的解析度、處理能力、儲存容量、網路使用頻寬並不相同,因此為了符合各個裝置下的視訊需求,將視訊分別編碼出不同解析度(畫質)、幀率(影格率)或畫質的位元流(bitstream)來滿足使用者需求,但隨著需求增多(畫質、傳輸速度)使得視訊壓縮的技術更為重要。視訊壓縮的技術可以讓觀看裝置更有效率的存取更多的多媒體資料,也能在儲存容量和網路頻寬都有限制的情況下,提供觀看者一定的觀看品質。

視訊壓縮標準已經發展相當長的一段時間,從早期H.261、H.263、MPEG-1、MPEG-2、H.264/AVC,到近期市面上最長使用的High efficiency video coding (HEVC)。隨著數位多媒體應用技術不斷進步,硬體設備所提供的畫質和解析度也隨之上升,從行動裝置上的HD(720p和1080p)到4k x 2k的超高解析度,使得2003年所制定的H.264/AVC已經不敷使用,因此為了使高畫質影片有效的在有限的頻寬下傳輸,由視訊發標準組織:ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)發展出以H.264/AVC為基準開始制定新的視訊壓縮標準H.265/HEVC,並於2013年4月13日被國際電信聯盟(ITU-T)接受為正式標準。HEVC比起上一代的視訊壓縮標準H.264/AVC可在相同畫面品質下,只需要約一半的位元率(Bitrate),也就是說能夠達到兩倍的壓縮效率。

HEVC提供了可調式結構的編碼單位(quadtree-based coding Unit、可調式結構的轉換單位(quadtree-based transform Unit)、更多的預測模式(predict mode)等方法,更進一步的提升壓縮效率、減少位元率,解決儲存容量和網路頻寬有限的問題。

H.265/HEVC 編碼架構

一、H.265/HEVC編碼架構介紹

高效率視訊編碼技術(High Efficiency Video Coding, HEVC)是最新一代的視訊編碼標準,相較於前一代的視訊編碼標準(H.264/AVC),H.265/HEVC可在相同的畫面品質下,節省約一半的位元率。除了良好的壓縮率外,H.265/HEVC最高可支援至解析度 8192x4320(8K解析度),比起以往的視訊標準會更適合用在高畫質視訊上。然而H.265/HEVC高壓縮率來自遠較於 H.264/AVC 複雜的視訊運算邏輯,大幅增加編解碼的運算複雜度。HEVC整體編碼器架構分為網路提取層(Network Abstraction Layer, NAL)和視訊編碼層(Video Coding Layer, VCL),以下會對這兩部分做介紹。

二、HEVC網路提取層(NAL)

NAL可讓HEVC容易透過網路來傳輸,因為以NAL封包為單位的方式來做為VCL編解碼的運算單位,如此傳輸層取得NAL封包後不需要再進行切割,只需附加該傳輸協定的標頭資訊就可以交由底層傳送出去。NAL作封裝(packaging)模組將VCL以Slice為單位的位元流封裝成適當大小的封包單位(NAL-unit),並在封包之標頭檔中的格式欄位記載其封包格式,每種格式分別對應到VCL中不同的編解碼工具。

三、HEVC視訊編碼層(VCL)

VCL層包含了HEVC的核心技術為運動估計(Motion Estimation)、運動補償(Motion Compensation)、轉換(Transform)、量化(Quantization)和熵編碼(Entropy Coding),HEVC的編碼架構如圖一,與H.264/AVC的架構相似,但HEVC在對區塊壓縮時與其它視訊編碼標準不同的是HEVC新增了編碼單位(Coding Unit, CU)、預測單位(Prediction Unit, PU)和轉換單位(Transform Unit, TU),以下將會對此三個單位作介紹。


《圖一》HEVC架構流程圖


四、H.265/HEVC編碼單元(Coding Unit, CU)

H.265/HEVC中繼承了過去H.264/AVC的區塊編碼特性,在H.264/AVC 的區塊(Macroblock)為固定大小的16x16的方形區塊,然而H.265/HEVC則採用更富有彈性的編碼樹單元(Coding Tree Unit, CTU) 藉此獲得更佳的壓縮效果。

CTU採用四分樹的編碼架構,其區塊大小可以從64x64到16x16,依據不同區塊大小分別定義為不同深度(Depth),64x64為深度0(Depth 0),32x32為深度1(Depth 1)以此類推,如圖二所示。每個切割後的區塊稱為編碼單元(Coding Unit, CU),每個CU包含了一個或一個以上的PU和TU如圖三。


《圖二》CU四分樹結構



《圖三》CU、PU、TU分割示意圖


五、H.265/HEVC預測單元(Prediction Unit, PU)

HEVC中的PU與H.264/AVC的PU都包含了畫面內預測(Intra Prediction)和畫面間預測(Inter Prediction),換句話說,HEVC以PU為單位做各種預測行為包含動量估測、運動補償,與H.264/AVC不同的是,HEVC另外提供了Skip模式,且畫面內預測最多增加到35中模式、畫面監獄側則有非對稱分割,所有預測方式一定以CU為單位分割,如圖四。接下來 別介紹畫面內預測、畫面間預測。


《圖四》HEVC之PU模式與分割類型

  • 畫面內預測(Intra Prediction)

    當編碼一個區塊的過程中,將鄰近區塊已編碼之像素點的直對區塊進行預測以增加編碼效率,此即為畫面內預測。HEVC的畫面內預測提供最多33種Angular modes模式、DC mode以及Planar mode,如圖五所示。


    《圖五》HEVC畫面內模式之33種方向預測


  • 畫面間預測(Inter Prediction)

    由於人眼的視覺暫留特性,我們才會在看影片時認為畫面是連續的,此外,相鄰視訊畫面間存在著高度的相似性,在編碼某一張畫面時往往可以利用前後相鄰畫面的相似區塊表示,減少時間上的冗餘藉此達到壓縮目的,此即為畫面間預測之宗旨。

    畫面間預測PU共有8種分割方式(如圖二-三所示),分別為四種對稱分割:2Nx2N、NxN、2NxN、Nx2N與四種非對稱分割: 2N×nU、2N×nD、nL×2N、nR×2N。


六、H.265/HEVC轉換單元(Transform Unit, TU)

TU是HEVC做轉換、量化和熵編碼的基本單位,TU大小不得超過所屬CU大小,TU可以在CU底下遞迴往下繼續分割,也就是四分樹的方式儲存。且TU必為正方形且大小有32×32、16×16、8×8、4×4共四種。

七、率失真最佳化(Rate-Distortion Optimization Routin)

HEVC在進行畫面內預測和畫面間預測,兩種預測分別有相當多種的預測方向以及PU分割模式,HEVC會在多種切割情況中選出一個最佳的模式,最直觀的方法就是找出能以最少位元率編碼的模式也就是編碼花費,稱之為RD-cost,HEVC採用以下數學式表示:J = D + λ × R

變數D表示為失真(殘餘值),λ 為一個Lagrange 函數並由量化參數和編碼類型(採用畫面內預測或畫面間預測)而決定,而R 是編碼當前PU 的運動向量、分割資訊等所花費的位元數。

視訊編碼的發展

HEVC為了達到更好的壓縮效率,所以採用了較複雜的運算方式與多種選擇模式的編碼架構,例如有更多選擇的影像區塊大小、多種畫面內及畫面間的預測模式,使其預測可以更加精準,達到更好的壓縮效率。但是編碼效能提升,使得系統架構的編碼複雜度大大增加,造成編碼時間的拉長。為因應現在數位影音的發展,其要求高畫質的影音展現,往往需要更快速且有效率的編碼技術,所以現階段研究常常利用HEVC架構中的區塊模式、預測模式的運用,達到編碼複雜度的下降且不會造成影像的過度失真,來達到整體編碼效率提升。

影像編碼技術可以運用在數位電視、行動視訊、影音串流等各項新興多媒體服務中都具有極高的應用價值。現階段數位科技蓬勃發展使得編碼技術日趨重要,但如何在更有效率的形況下達到良好的編碼品質,是目前最重要的課題。

資料來源
1."High Efficiency Video Coding" From:Wikipedia

2.G. J. Sullivan, et al, “Overview of the High Efficiency Video Coding (HEVC) Standard,” IEEE Trans. Circuits and Systems for Video Technology, vol. 22, no. 12, pp. 1649-1668, Sep. 2012.

3."What is HEVC?" 2014-04-18-09:21AM By Geoffrey Morrison From:CNET

4."Entropy encoding(熵編碼法)" From:Wikipedia