HEVC標準概覽
HEVC(高效視頻編碼標準)是ITU-T VCEG(國際電聯電信標準化部視頻編碼組)與ISO/IEC MPEG(國際標準化組織國際電工委員會視頻標準化組)的合作組織JCT-VC最新項目。ITU-T和ISO/IEC計劃在2013年1月共同發布第一個版本(譯者按:ITU-T已經在2013-01-25發布,標準可見JCT-VC草案10)。標準將會包含一系列的擴展,包括高精度色彩空間的支持、可伸縮編碼(SVC)、3D與多視角視頻。ISO/IEC將會把HEVC作為MPEG-H標準的第二部分(ISO/IEC 23008-2),ITU-T則會將其作為ITU-T的推薦標準 —— H.265。
在視頻編碼領域,ITU-T開發了H.261和H.263,ISO/IEC開發了MPEG-1和MPEG-4 Visual。它們共同開發的H.262/MPEG-2和H.264/MPEG-4 AVC標準產生了極大的影響,被廣泛應用在各種產品中,對我們的生活產生了深刻影響。視頻編碼技術的發展一直致力于追求更高的壓縮率,也不斷增強其它特性,如惡劣網絡下的傳輸,同時考量實現復雜度以及同時代數字設備的計算能力,以期能夠廣泛應用。
HEVC主要在H.264/MPEG-4 AVC的基礎上發展而來。H.264/AVC項目1999-2003年間啟動,2003-2009年間幾經重要擴展,目前已經在每個H.262/MPEG-2標準沒有覆蓋到的領域內取代了之前的標準,成為了數字視頻領域的使能技術。它的應用領域非常廣,包括有高清電視信號的衛星傳輸、有線傳輸和其他地面傳輸系統、視頻錄制和編輯、攝像機、安防、互聯網、移動網絡視頻、藍光光碟、視頻聊天、視頻會議和遠程演示等等。
如今視頻服務越來越多樣化,高清視頻不斷增長,甚至超高清視頻(4kx2k、8kx4k分辨率)的需求也在逐步興起。這些現實都在呼喚比H.264/AVC更高壓縮效率的視頻編碼技術出現。尤其是超高分辨與3D和多視角復合使用的時候,對更高壓縮效率的需求是十分強烈的。更高質量和分辨率的追求也會逐步反映在移動設備上,而只是目前來講,移動設備和平板電腦視頻的流量對移動網絡已經造成了沉重的負擔。
HEVC被設計來取代所有目前的H.264/AVC應用,它專注于兩個關鍵問題:更高的視頻分辨率和并行處理架構。它的碼流盡量采用通用設計,以能被所有應用使用而不是只是和特定應用或設備適配。
與之前ITU-T和ISO/IEC開發的視頻編碼標準一樣,HEVC標準只包含碼流的語法結構以及碼流和解碼視頻間的映射關系。編碼和解碼的具體實現只要遵循標準中語法元素的語法語義和約束就可以與其它HEVC實現達成一致。標準最大限度給了具體實現以優化的自由(方便廠商在質量、成本、推向市場的時機與其它因素間取舍)。但也由于這樣的自由度,標準并無法保證端對端的分發質量,標準完全允許粗糙與不完全的編碼實現,只要它遵循規范即可。
為了幫助業界盡快理解新標準,標準中不僅包含了文字描述,也包含了一份參考的軟件實現。這份代碼曾用于標準開發過程中的研究,它也可以用做通用的研究或是商業產品的基礎。此外,標準中還包含一套用于測試的數據集。
HEVC標準概覽(二)設計和技術要點
HEVC的設計兼顧提高編碼效率、降低傳輸壓力、增強丟包容忍性、優化并行處理在內的多個目標。
本章將簡要描述HEVC實現這些目標的關鍵技術以及標準HEVC編碼器的處理流程。
解碼流程和具體的語法會在之后的章節討論。
一、編解碼層面
HEVC的編碼分層沿用了H.261以來的混合模式(幀間預測、幀內預測、2D轉換)。下圖表達了編碼HEVC標準碼流的基本過程。
HEVC_flow
HEVC標準編碼過程大致如下:幀首先被切分成多個塊狀區域,分別傳輸給解碼器。圖像序列的第一個畫面(以及每一個可被拖放的幀)只使用幀內預測編碼(只使用同一幀中其它區域進行預測,不依賴其他幀)。
其它幀中的塊大多數使用幀間預測編碼,過程包括選擇預測模式、參考圖像的運動數據和生成每個塊的運動矢量(MV)。
編碼器和解碼器通過旁路傳輸預測模式信息和運動矢量(MV),計算運動補償,進而重建幀間預測數據。
幀內或幀間的預測結果和實際畫面之間的殘差數據經過空間-線性變換、采樣、量化、熵編碼后和預測信息一起傳輸。
編碼器會重復解碼器的處理循環(上圖中灰色方框的部分),以保證編解碼雙方對子序列作出一致的預測。但編碼器量化的參數被解碼器逆采樣、逆轉換還原后只能得到近似的殘差。
殘差和預測的結果合并后會進入一或兩個循環濾波器以去處塊效應。最終得出的畫面(解碼器的輸出)會存儲在緩沖區中作為視頻中其它圖像預測參考。
編解碼幀序很可能會和從源下來的幀序不一樣,因此對解碼器來說,需要一段緩沖區來應對解碼順序(碼流順序DTS)和輸出順序(顯示順序PTS)間的差距。
一般而言,HEVC編碼器輸入都應該是逐行掃描的(逐行源,或去交錯處理后的隔行源)。HEVC的編碼設計沒有特意去支持隔行掃描,因為隔行掃描已經不再用于最終顯示,在分發中使用隔行的場景也在大量減少。
但HEVC提供了一個元數據讓編碼器可以聲明這是一個按照場編碼的隔行視頻(每幀中其實只有一個場),每個畫面中只有一半的信息。這樣就簡單而有效地降低了解碼器支持隔行視頻的復雜度。
下面我們介紹一些HEVC混合編碼特性中的要點。
1) 編碼樹單元(CTU)和編碼樹塊(CTB):
前代標準中的核心編碼層是宏塊,包含一個16×16的亮度塊采樣,對于一般的yuv420而言,會伴隨兩個8×8的色度塊采樣。類似結構在HEVC中被稱作CTU,但它的大小是可以由編碼器設定的,并且可以超越16×16。CTU由一個亮度CTB、幾個色度CTB和一些關聯的語法元素組成。亮度CTB的可選大小有16×16、32×32、64×64,更大的塊會有更好的壓縮率。HEVC還支持使用樹結構和四叉樹將CTB切分為更小的塊。
2) 編碼單元(CU)和編碼塊(CB):
CTU中的四叉樹確定了亮度和色度CB的大小和位置,四叉樹的根節點與CTU關聯。亮度CB最大可以支持到亮度CTB的大小。把CTU切成亮度和色度CB的過程是一體的。一個亮度CB、兩個色度CB和關聯的語法元素構成一個CU。一個CTB可以只包含一個CU,也可以包含好幾個CU,每一個CU都有一個分區關聯的預測單元(PU)和一個變換樹單元(TU)。
3) 預測單元(PU)和預測塊(PB):
某幀圖像采用幀內預測還是幀間預測是在CU層面決策的。PU分區結構的根也在CU層。根據預測決策的結果,亮度和色度CB進一步拆分為亮度和色度PB。HEVC支持從4×4到64×64大小的PB。
4) 變換單元(TU)和變換塊(TB):
預測殘差使用塊變換編碼。TU樹結構的根在CU層面。亮度CB的殘差可能和亮度TB完全一樣,或者進一步切分為更小的亮度TB。色度TB也是一樣的。4×4、8×8、16×16、32×32的TB都各自定義了近似DCT變換的基本整型方法。對于4×4的亮度幀內預測的殘差變換,還有一個DCT變換表衍生的整型變換供選擇。
5) 運動矢量:
標準中采用了基于鄰近PB和參考幀數據來預測方向的高級運動矢量預測(AMVP)。MV編碼還可以使用一種允許繼承鄰近PB的MV的合并模式。此外,HEVC中還包含有一個增強版的H.264/AVC直接運動預測。
6) 運動補償:
MV使用四分之一采樣預測。分級采樣的插值使用7階或8階的濾波器(H.264/AVC中插值使用二分之一采樣的6階濾波器和四分之一采樣的線性插值)。和H.264/AVC一樣,HEVC也使用多參考幀。每一個PB可以根據單向或者雙向預測傳送一個或者兩個運動矢量。同H.264/AVC一樣,預測信號上可以附加采樣和偏移以聲明預測權重。
7) 幀內預測:
不使用幀間預測時,就只能基于鄰近的塊來做空間上的幀內預測。HEVC的幀內預測支持33個方向模式(H.264/AVC中是8個)。HEVC還設計了增強的二維變換和可選的DC預測模式。需要由預先解碼出的鄰近PB計算得出最優的幀內預測模式。
8) 量化控制:
和H.264/AVC一樣,HEVC也使用URQ(一致量化還原)。由于HEVC引入了更多的變換塊,所以量化參數矩陣也隨之增多。
9) 熵編碼:
HEVC使用CABAC來做熵編碼。和H.264/AVC中的CABAC相比,得益于新引入的并行處理架構,速度、壓縮率和內存占用等方面均得到了大幅改善。
10) 內置環路濾波器:
和H.264/AVC一樣,HEVC的幀間預測循環中也內置去除塊效應的濾波器。相比H.264/AVC,HEVC的設計更重視簡化決策和濾波器的流程,并且為并行處理而優化。
11) 采樣自適應偏移(SAO):
幀間預測循環的去塊效應濾波器之后引入了一個非線性的幅值映射的流程。主要目的是通過編碼器端的直方圖分析產出一些參數以增強解碼器端的幅值信號還原。
二、語法層面
H.264/AVC以來的語法基本得到了保留,HEVC在其基礎上加入了不少為應用多樣性及網絡丟包而設計的特性。
1) 參數集結構:
能被多個區塊共享的解碼信息包含在參數集中。這個結構負責保證把必不可少的解碼信息傳輸到解碼端。它由H.264/AVC中的圖像序列參數集擴展而來,在HEVC中被稱為VPS。
2) NAL語法單元:
每個語法結構都會被放進一個叫做NAL(網絡抽象層)中的邏輯上的數據包中。這個包的包頭中有兩個字節表明了它裝載的是什么用途的數據(用于判斷是否需要重傳)。
3) 片:
可以不依賴同幀中的其它數據獨立進行預測、殘差重建、熵編碼的部分被稱為“片”。片可以是一個幀也可以只是一個幀中的一部分。片的主要作用之一是在丟包時同步用。在包式傳輸中一個片可以包含的數據量是被嚴格限制的,在這個限制內調整片內包含的CTU數量可以有效地最小化包傳輸產生的額外開銷。
4) 增強信息(SEI)和視頻可用性信息(VUI):
SEI和VUI用于存儲視頻元數據,比如說時間戳、使用的色彩空間、3D填充的方式等等。
三、并行化設計和片的改良
最后要介紹的是HEVC中增強的并行處理架構和為包傳輸而改良的片結構。這兩個特性可能會在某些應用中十分有用,具體實現可以考量自己的情況采用它們。
1) 并行塊(Tile)
HEVC定義了一個可選的方式,可以把一幀圖像分割成并行塊。并行塊的主要目的是在增強并行處理的能力同時又不引入新的錯誤擴散。并行塊是一些在一幀圖像內使用一些共有的信息編碼而成,但可以獨立解碼的區域。一般的做法是將圖像切割成包含大體相同數量CTU的并行塊。并行塊的引入使得簡單粗粒度的并行化處理成為可能,線程之間將不再需要考慮復雜的同步和鎖。
tiles
2) 錯峰并行處理(WPP)
主要用于熵編碼。當WPP開啟時,片先被分成數個CTU行。第一行正常處理,第二行在第一行處理完2個CTU后開始處理,第三行在第二行處理完2個CTU后開始處理。每一行相對前一行都有2個CTU的延遲。WPP提供了一種在適當的層級上(比如說片)并行化的方式。WPP可以提供比并行塊更好的壓縮效率,而且不會引入塊效應。
wavefront
3) 依賴更小片(Dependent slice segments)
這個設計允許數據與錯峰并行處理或者并行塊關聯起來,在碎片化的包傳輸網絡中,相對于一次編碼一整片而言,這種做法可以更快進入解碼流程,從而降低延遲。與錯峰并行處理一起使用用時,它也需要類似錯峰的機制。這項設計尤為適合低延遲要求下的并行處理。
接下來的兩章里,我們將會把關鍵特性的細節進一步展開來講。
HEVC標準概覽(三)高層語法
HEVC從H.264/AVC的NAL(網絡抽象層)繼承了大量的語法元素。
NAL負責把視頻編碼層的數據映射到RTP/IP、ISO MP4、H.222.0/MPEG-2等視頻傳輸層上,并提供丟包處理的框架。
本章節不復述NAL單元、參數集、存取單元、碼流格式、包格式等基本概念。
NAL單元根據是否裝載有視頻編碼數據分為VCL和non-VCL兩類。為了優化任意點解碼和解碼初始化,HEVC標準中根據不同的視頻種類進一步細分出子類。
下表列舉了HEVC中NAL單元的種類及用途。
nal
下面我們介紹幾個HEVC在語法上的新特性:
一、任意點解碼和碼流拼接
H.264/AVC中,碼流必須從一個包含關鍵幀的IDR單元開始,它必須不依賴NAL中的前置的包就可以獨立解碼。IDR是封閉GOP(group of pictures)的標志性組成部分。
新的純隨機讀取(CRA)語法定義了如何使用處于隨機讀取點(RAP)位置的關鍵幀。
比如說,告訴解碼器從一個臨時有效的位置直接開始解碼,忽略之前的視頻數據,這種做法被稱作開放式的GOP操作。
隨機位置讀取的支持對頻道切換、拖動操作和動態流服務是十分關鍵的。
某些解碼順序在CRA幀之后,顯示順序在CRA幀之前的幀可能會參考解碼器buffer中還不存在的幀,于是這些解碼器無法解碼的幀就只能被丟棄。基于這種情況,這些幀被定義為拖動可跳過的前置幀(RASL)。
不同的碼流之間切換可以通過斷點連接幀(BLA)來拼接。簡單的把需要切換的碼流的RAP幀標記為BLA放到當前幀的下一個CRA幀的地方,然后傳輸新碼流就可以完成碼流拼接的工作。
RAP幀可以是IDR、CRA、BLA幀,CRA和BLA的后面都可能跟隨著RASL幀(BLA的NAL單元的標記可定)。BLA幀之后的RASL幀解碼器必須拋棄,因為它們可能參考了拼接前源碼流的幀導致無法解碼。
還有一種解碼順序在RAP幀之后,顯示順序在RAP幀之前的幀,叫做拖動可解碼的前置幀(RADL),這種幀不會參考解碼順序在RAP之前的幀。
RASL和RADL可以統稱為前置幀(LP)。
解碼和顯示順序都在RAP幀之后的幀叫做后置幀,它們不可以將LP作為它們的參考。
二、臨時分層編碼
類似H.264/AVC的可伸縮編碼擴展(SVC)的功能,HEVC可以在NAL的頭上臨時定一個分級預測的層。這樣就可以只解析到NAL層面就實現可伸縮性。
某些情況下,針對同一個碼流,解碼器可以自主決定臨時解碼層的數量。從低級子層到更高級子層切換的操作可以在臨時子層幀(TSA)和步進臨時子層幀(STSA)完成。
TSA點允許切換到比當前子層高的任意子層,STSA只允許切換到只比當前子層高一級的下一層(除非更高的層也包含TSA或者STSA幀)。
三、擴展參數集
新加入VPS元數據描述包括臨時層級依賴在內的編碼視頻的全部特征。主要目的是增強在系統層的兼容擴展性。
比如說,對未來可伸縮編碼或者多視角的視頻需要被舊的解碼器解碼時,那么它就可以方便地忽略那些高級解碼器才需要的碼流擴展信息。
四、參考幀集和參考幀列表
為了管理解碼多參考幀,已解碼好的幀被放在解碼幀緩沖區(DPB)中并被詳細標記以供碼流中后續的幀參考。每個片的頭部都會包含一個幀序計數器(POC)以定位那些幀。
保留下來用以參考的幀集合叫做參考幀集合(RPS)。
下圖演示了一小段碼流的POC值、解碼順序和RPS。
DPS
H.264/AVC的DPB中有兩個幀的列表,分別叫做參考幀列表0和參考幀列表1。定位具體幀的索引叫做參考幀索引,如果列表中只有一個幀,則參考幀索引為0,不在碼流中傳輸。單向預測時,可以從0和1兩個列表中選出一個幀。雙向預測時,則會從兩個列表中各選一幀。
定位RPS和將參考幀列表用于幀間參考的語法比前代H.264/AVC的設計對丟包的兼容性更好,在拖動和其它播放模式下(快進、快退、動態碼流切換等)也能工作地更好。
這項優化的關鍵是讓語法更加明確可展現,避免了之前對解碼器解碼過程中的中間狀態和臨時值的依賴。而且還比H.264/AVC中的語法更加簡化了。
HEVC標準概覽(五)Profile、Tier和Level
一、Profile、Tier和Level的概念
這三個概念主要用于需要類似功能的不同實現之間的溝通。
Profile指出碼流中使用了哪些編碼工具和算法。
Level指出一些對解碼端的負載和內存占用影響較大的關鍵參數約束。主要包括采樣率、分辨率、最大碼率,最小壓縮率,DPB容量,CPB(解碼緩沖區)大小。
在HEVC的設計中,應用可以只依據最大的碼率和CPB大小就可以區分。為了達成這個效果,有些Level定義了兩個Tier——Main Tier用于大多數應用,High Tier用于那些最苛刻的應用。
遵守某Level和tier的解碼器可以解碼所有等于或低于這個Level和Tier的碼流。
支持某Profile的解碼器必須支持此Profile中的所有特性。
編碼器不必實現Profile中所有的特性,但產出的碼流必須是遵守標準的,比如說要遵守與之兼容的解碼器的約束。
二、HEVC中的Profile和Level
按照進度,2013年1月有三個Profile將被寫入標準,分別是Main、Main10和Main Still Picture,針對不同的應用需求。
減少Profile的數量可以增強設備通用性的。未來還會促進視頻服務一定程度上的融合,比如說廣播、移動、流,這些服務會逐漸匯聚到能全部支持它們的設備上。
本文之前討論的編碼工具和高層語法加上下面的限制條件組成了三個Profile的草案。
1) 只支持4:2:0色度采樣;
2) 編碼器使用多tile時,不能同時使用錯峰并行處理。而且每個tile至少有256亮度采樣寬,64亮度采樣高。
3) 在Main和Main Still Picture這兩個Profile中支持8位深度的采樣,Main10支持10位采樣深度。
4) Main Still Picture中,全部的碼流只能一幀編碼的視頻(意即禁用幀間預測)。
下表中13個Level計劃包含在標準第一版中,它們的分辨率從176×144(QCIF)到7680×4320(8kx4k)。圖像的寬和高均需小于等于8倍的MaxLumaPS再開方。MaxLumaPS是下圖中的最大亮度幀尺寸(避免極端尺寸時解碼器產生錯誤)。
level
有8個Level支持2個Tier(Level4及以上)。除了Level1偏高(要求350,000b)之外,CPB容量均等于最大碼率的1秒容量。當使用Level最大的分辨率時,CPB最大容量為6幀圖像(包括當前幀、用于參考的幀和準備輸出的幀)。如果降低分辨率的話,CPB可以容納16幀圖像(取決與具體采用的分辨率)。
Level還約束了每幀中垂直和水平方向tile的最大數量,以及每秒最大的tile數量
HEVC標準概覽(六)歷史沿革
ITU-T VCEG和ISO/IEC MPEG于2004年中完成了H.264/AVC的High Profile之后,就開始著手準備下一代的標準。
VCEG在2004年開始準備,2005初確定關鍵技術方向(KTA),并開發了一個通用的KTA軟件代碼庫。此代碼庫由H.264/AVC的參考軟件joint model(JM)開發而來,它引入并驗證了很多新技術。
2005到2008年間,MPEG開始探索顯著提升編碼效率的可能性。它組織了數個Workshop,并在2009年4月為這些技術發布了一篇“征集證據”。隨后專家開始觀測征集而來的評估和測試結果。
VCEG和MPEG分頭調查后,達成了現有編碼標準的效率可以顯著提升的共識。2010年1月兩個組織聯合建立了JCT-VC,同時發表定義了未來標準概況的視頻編碼技術聯合建議書(CfP)。
2010年4月JCT-VC第1次會議,項目名確定為HEVC,研究了反饋給CfP的建議,從數個有前途的技術建議中收集了一些元素,產出了審議測試模型的第一個版本(TMuC)。會后實現了相應的代碼庫。一些關鍵性的技術已經在《IEEE 視頻技術系統和電路匯報》里預先討論了。雖然TMuC在前代標準基準上有顯著的效率提升,但在每個功能塊中都存在多余的編碼工具,它還是一個來自各種貢獻的簡單集合體。
2010年7月JCT-VC第2次會議,開始通過測試TMuC每個組件的方式選擇每個功能塊所需編碼工具的最小集。
2010年10月JCT-VC第3次會議,在詳盡的組件測試的結果報告基礎上,完成了HEVC測試模型版本1(HM 1)和相應的HEVC標準草案1(WD 1)。和TMuC相比,HM 1通過刪除沒必要的高復雜度的編碼工具,大大地簡化了代碼庫。
隨后的研究中,HM的編碼工具被分為2類:追求高效率或低復雜度的。JCT-VC它們分別建立了測試場景。下表簡述了HM 1中這兩個方向的編碼工具。
HMcodingtool
JCT-VC第4次到第11次會議中,除了編碼效率,包括降低實現復雜度、統一編碼工具、并行化設計等很多其它方面也被納入研究范圍。HEVC設計持續更新下,高效率和低復雜度之間的差異逐漸縮小,達成一個統一的Main Profile。下表簡述了配置為高效率的HM 1和目前HEVC標準中的編碼工具。
HEVCcodingtool
2012年2月JCT-VC第8次會議,產出了HEVC標準草案第6版,ISO/IEC草案委員會投票通過。
2012年7月JCT-VC第10次會議,草案的第8個版本發布,作為國際標準草案投票,最終決定2013年1月作為ITU-T和ISO/IEC的最終國際標準草案發布。
JCT-VC的母體目前已經在探索和準備HEVC未來的擴展。很可能支持更高精度的采樣深度、增強的色彩采樣、可伸縮編碼、3D和多視角視頻編碼(以及為高級的3D顯示器深度映射編碼)等特性。
HEVC標準概覽(七)總結
ITU-T VCEG和ISO/IEC MPEG合作開發了HEVC標準,當中包含了現代的高級視頻編碼技術。
HEVC視頻編碼層的基本設計依然是傳統基于塊的運動補償混合編碼,但相對前代標準作出了許多重要改進。
新特性共同發揮作用時,HEVC相對前代標準可以節省50%的碼率(針對高分辨率視頻尤為有效)。
編碼性能上的細節,可以參見J.-R. Ohm、G. J. Sullivan、H. Schwarz, T. K. Tan和T. Wiegand的《Comparison of the coding efficiency of video coding standards— Including High Efficiency Video Coding (HEVC)》。
實現復雜度的分析超出了本文的范圍。但現代處理器技術之下,解碼器的復雜度并不是主要的負擔(相對H.264/AVC),編碼器的復雜度也是可控的。實現復雜度上的細節,可以參見F. Bossen、B. Bross、K. Sühring和D. Flynn的《HEVC complexity and implementation analysis》。
標準的更多信息可以在JCT-VC的文檔管理系統(http://phenix.int-evry.fr/jct/)查閱。
致謝
感謝ITU-T VCEG、ISO/IEC MPEG和JCT-VC專家們的貢獻。
HEVC(高效視頻編碼標準)是ITU-T VCEG(國際電聯電信標準化部視頻編碼組)與ISO/IEC MPEG(國際標準化組織國際電工委員會視頻標準化組)的合作組織JCT-VC最新項目。ITU-T和ISO/IEC計劃在2013年1月共同發布第一個版本(譯者按:ITU-T已經在2013-01-25發布,標準可見JCT-VC草案10)。標準將會包含一系列的擴展,包括高精度色彩空間的支持、可伸縮編碼(SVC)、3D與多視角視頻。ISO/IEC將會把HEVC作為MPEG-H標準的第二部分(ISO/IEC 23008-2),ITU-T則會將其作為ITU-T的推薦標準 —— H.265。
在視頻編碼領域,ITU-T開發了H.261和H.263,ISO/IEC開發了MPEG-1和MPEG-4 Visual。它們共同開發的H.262/MPEG-2和H.264/MPEG-4 AVC標準產生了極大的影響,被廣泛應用在各種產品中,對我們的生活產生了深刻影響。視頻編碼技術的發展一直致力于追求更高的壓縮率,也不斷增強其它特性,如惡劣網絡下的傳輸,同時考量實現復雜度以及同時代數字設備的計算能力,以期能夠廣泛應用。
HEVC主要在H.264/MPEG-4 AVC的基礎上發展而來。H.264/AVC項目1999-2003年間啟動,2003-2009年間幾經重要擴展,目前已經在每個H.262/MPEG-2標準沒有覆蓋到的領域內取代了之前的標準,成為了數字視頻領域的使能技術。它的應用領域非常廣,包括有高清電視信號的衛星傳輸、有線傳輸和其他地面傳輸系統、視頻錄制和編輯、攝像機、安防、互聯網、移動網絡視頻、藍光光碟、視頻聊天、視頻會議和遠程演示等等。
如今視頻服務越來越多樣化,高清視頻不斷增長,甚至超高清視頻(4kx2k、8kx4k分辨率)的需求也在逐步興起。這些現實都在呼喚比H.264/AVC更高壓縮效率的視頻編碼技術出現。尤其是超高分辨與3D和多視角復合使用的時候,對更高壓縮效率的需求是十分強烈的。更高質量和分辨率的追求也會逐步反映在移動設備上,而只是目前來講,移動設備和平板電腦視頻的流量對移動網絡已經造成了沉重的負擔。
HEVC被設計來取代所有目前的H.264/AVC應用,它專注于兩個關鍵問題:更高的視頻分辨率和并行處理架構。它的碼流盡量采用通用設計,以能被所有應用使用而不是只是和特定應用或設備適配。
與之前ITU-T和ISO/IEC開發的視頻編碼標準一樣,HEVC標準只包含碼流的語法結構以及碼流和解碼視頻間的映射關系。編碼和解碼的具體實現只要遵循標準中語法元素的語法語義和約束就可以與其它HEVC實現達成一致。標準最大限度給了具體實現以優化的自由(方便廠商在質量、成本、推向市場的時機與其它因素間取舍)。但也由于這樣的自由度,標準并無法保證端對端的分發質量,標準完全允許粗糙與不完全的編碼實現,只要它遵循規范即可。
為了幫助業界盡快理解新標準,標準中不僅包含了文字描述,也包含了一份參考的軟件實現。這份代碼曾用于標準開發過程中的研究,它也可以用做通用的研究或是商業產品的基礎。此外,標準中還包含一套用于測試的數據集。
HEVC標準概覽(二)設計和技術要點
HEVC的設計兼顧提高編碼效率、降低傳輸壓力、增強丟包容忍性、優化并行處理在內的多個目標。
本章將簡要描述HEVC實現這些目標的關鍵技術以及標準HEVC編碼器的處理流程。
解碼流程和具體的語法會在之后的章節討論。
一、編解碼層面
HEVC的編碼分層沿用了H.261以來的混合模式(幀間預測、幀內預測、2D轉換)。下圖表達了編碼HEVC標準碼流的基本過程。
HEVC_flow
HEVC標準編碼過程大致如下:幀首先被切分成多個塊狀區域,分別傳輸給解碼器。圖像序列的第一個畫面(以及每一個可被拖放的幀)只使用幀內預測編碼(只使用同一幀中其它區域進行預測,不依賴其他幀)。
其它幀中的塊大多數使用幀間預測編碼,過程包括選擇預測模式、參考圖像的運動數據和生成每個塊的運動矢量(MV)。
編碼器和解碼器通過旁路傳輸預測模式信息和運動矢量(MV),計算運動補償,進而重建幀間預測數據。
幀內或幀間的預測結果和實際畫面之間的殘差數據經過空間-線性變換、采樣、量化、熵編碼后和預測信息一起傳輸。
編碼器會重復解碼器的處理循環(上圖中灰色方框的部分),以保證編解碼雙方對子序列作出一致的預測。但編碼器量化的參數被解碼器逆采樣、逆轉換還原后只能得到近似的殘差。
殘差和預測的結果合并后會進入一或兩個循環濾波器以去處塊效應。最終得出的畫面(解碼器的輸出)會存儲在緩沖區中作為視頻中其它圖像預測參考。
編解碼幀序很可能會和從源下來的幀序不一樣,因此對解碼器來說,需要一段緩沖區來應對解碼順序(碼流順序DTS)和輸出順序(顯示順序PTS)間的差距。
一般而言,HEVC編碼器輸入都應該是逐行掃描的(逐行源,或去交錯處理后的隔行源)。HEVC的編碼設計沒有特意去支持隔行掃描,因為隔行掃描已經不再用于最終顯示,在分發中使用隔行的場景也在大量減少。
但HEVC提供了一個元數據讓編碼器可以聲明這是一個按照場編碼的隔行視頻(每幀中其實只有一個場),每個畫面中只有一半的信息。這樣就簡單而有效地降低了解碼器支持隔行視頻的復雜度。
下面我們介紹一些HEVC混合編碼特性中的要點。
1) 編碼樹單元(CTU)和編碼樹塊(CTB):
前代標準中的核心編碼層是宏塊,包含一個16×16的亮度塊采樣,對于一般的yuv420而言,會伴隨兩個8×8的色度塊采樣。類似結構在HEVC中被稱作CTU,但它的大小是可以由編碼器設定的,并且可以超越16×16。CTU由一個亮度CTB、幾個色度CTB和一些關聯的語法元素組成。亮度CTB的可選大小有16×16、32×32、64×64,更大的塊會有更好的壓縮率。HEVC還支持使用樹結構和四叉樹將CTB切分為更小的塊。
2) 編碼單元(CU)和編碼塊(CB):
CTU中的四叉樹確定了亮度和色度CB的大小和位置,四叉樹的根節點與CTU關聯。亮度CB最大可以支持到亮度CTB的大小。把CTU切成亮度和色度CB的過程是一體的。一個亮度CB、兩個色度CB和關聯的語法元素構成一個CU。一個CTB可以只包含一個CU,也可以包含好幾個CU,每一個CU都有一個分區關聯的預測單元(PU)和一個變換樹單元(TU)。
3) 預測單元(PU)和預測塊(PB):
某幀圖像采用幀內預測還是幀間預測是在CU層面決策的。PU分區結構的根也在CU層。根據預測決策的結果,亮度和色度CB進一步拆分為亮度和色度PB。HEVC支持從4×4到64×64大小的PB。
4) 變換單元(TU)和變換塊(TB):
預測殘差使用塊變換編碼。TU樹結構的根在CU層面。亮度CB的殘差可能和亮度TB完全一樣,或者進一步切分為更小的亮度TB。色度TB也是一樣的。4×4、8×8、16×16、32×32的TB都各自定義了近似DCT變換的基本整型方法。對于4×4的亮度幀內預測的殘差變換,還有一個DCT變換表衍生的整型變換供選擇。
5) 運動矢量:
標準中采用了基于鄰近PB和參考幀數據來預測方向的高級運動矢量預測(AMVP)。MV編碼還可以使用一種允許繼承鄰近PB的MV的合并模式。此外,HEVC中還包含有一個增強版的H.264/AVC直接運動預測。
6) 運動補償:
MV使用四分之一采樣預測。分級采樣的插值使用7階或8階的濾波器(H.264/AVC中插值使用二分之一采樣的6階濾波器和四分之一采樣的線性插值)。和H.264/AVC一樣,HEVC也使用多參考幀。每一個PB可以根據單向或者雙向預測傳送一個或者兩個運動矢量。同H.264/AVC一樣,預測信號上可以附加采樣和偏移以聲明預測權重。
7) 幀內預測:
不使用幀間預測時,就只能基于鄰近的塊來做空間上的幀內預測。HEVC的幀內預測支持33個方向模式(H.264/AVC中是8個)。HEVC還設計了增強的二維變換和可選的DC預測模式。需要由預先解碼出的鄰近PB計算得出最優的幀內預測模式。
8) 量化控制:
和H.264/AVC一樣,HEVC也使用URQ(一致量化還原)。由于HEVC引入了更多的變換塊,所以量化參數矩陣也隨之增多。
9) 熵編碼:
HEVC使用CABAC來做熵編碼。和H.264/AVC中的CABAC相比,得益于新引入的并行處理架構,速度、壓縮率和內存占用等方面均得到了大幅改善。
10) 內置環路濾波器:
和H.264/AVC一樣,HEVC的幀間預測循環中也內置去除塊效應的濾波器。相比H.264/AVC,HEVC的設計更重視簡化決策和濾波器的流程,并且為并行處理而優化。
11) 采樣自適應偏移(SAO):
幀間預測循環的去塊效應濾波器之后引入了一個非線性的幅值映射的流程。主要目的是通過編碼器端的直方圖分析產出一些參數以增強解碼器端的幅值信號還原。
二、語法層面
H.264/AVC以來的語法基本得到了保留,HEVC在其基礎上加入了不少為應用多樣性及網絡丟包而設計的特性。
1) 參數集結構:
能被多個區塊共享的解碼信息包含在參數集中。這個結構負責保證把必不可少的解碼信息傳輸到解碼端。它由H.264/AVC中的圖像序列參數集擴展而來,在HEVC中被稱為VPS。
2) NAL語法單元:
每個語法結構都會被放進一個叫做NAL(網絡抽象層)中的邏輯上的數據包中。這個包的包頭中有兩個字節表明了它裝載的是什么用途的數據(用于判斷是否需要重傳)。
3) 片:
可以不依賴同幀中的其它數據獨立進行預測、殘差重建、熵編碼的部分被稱為“片”。片可以是一個幀也可以只是一個幀中的一部分。片的主要作用之一是在丟包時同步用。在包式傳輸中一個片可以包含的數據量是被嚴格限制的,在這個限制內調整片內包含的CTU數量可以有效地最小化包傳輸產生的額外開銷。
4) 增強信息(SEI)和視頻可用性信息(VUI):
SEI和VUI用于存儲視頻元數據,比如說時間戳、使用的色彩空間、3D填充的方式等等。
三、并行化設計和片的改良
最后要介紹的是HEVC中增強的并行處理架構和為包傳輸而改良的片結構。這兩個特性可能會在某些應用中十分有用,具體實現可以考量自己的情況采用它們。
1) 并行塊(Tile)
HEVC定義了一個可選的方式,可以把一幀圖像分割成并行塊。并行塊的主要目的是在增強并行處理的能力同時又不引入新的錯誤擴散。并行塊是一些在一幀圖像內使用一些共有的信息編碼而成,但可以獨立解碼的區域。一般的做法是將圖像切割成包含大體相同數量CTU的并行塊。并行塊的引入使得簡單粗粒度的并行化處理成為可能,線程之間將不再需要考慮復雜的同步和鎖。
tiles
2) 錯峰并行處理(WPP)
主要用于熵編碼。當WPP開啟時,片先被分成數個CTU行。第一行正常處理,第二行在第一行處理完2個CTU后開始處理,第三行在第二行處理完2個CTU后開始處理。每一行相對前一行都有2個CTU的延遲。WPP提供了一種在適當的層級上(比如說片)并行化的方式。WPP可以提供比并行塊更好的壓縮效率,而且不會引入塊效應。
wavefront
3) 依賴更小片(Dependent slice segments)
這個設計允許數據與錯峰并行處理或者并行塊關聯起來,在碎片化的包傳輸網絡中,相對于一次編碼一整片而言,這種做法可以更快進入解碼流程,從而降低延遲。與錯峰并行處理一起使用用時,它也需要類似錯峰的機制。這項設計尤為適合低延遲要求下的并行處理。
接下來的兩章里,我們將會把關鍵特性的細節進一步展開來講。
HEVC標準概覽(三)高層語法
HEVC從H.264/AVC的NAL(網絡抽象層)繼承了大量的語法元素。
NAL負責把視頻編碼層的數據映射到RTP/IP、ISO MP4、H.222.0/MPEG-2等視頻傳輸層上,并提供丟包處理的框架。
本章節不復述NAL單元、參數集、存取單元、碼流格式、包格式等基本概念。
NAL單元根據是否裝載有視頻編碼數據分為VCL和non-VCL兩類。為了優化任意點解碼和解碼初始化,HEVC標準中根據不同的視頻種類進一步細分出子類。
下表列舉了HEVC中NAL單元的種類及用途。
nal
下面我們介紹幾個HEVC在語法上的新特性:
一、任意點解碼和碼流拼接
H.264/AVC中,碼流必須從一個包含關鍵幀的IDR單元開始,它必須不依賴NAL中的前置的包就可以獨立解碼。IDR是封閉GOP(group of pictures)的標志性組成部分。
新的純隨機讀取(CRA)語法定義了如何使用處于隨機讀取點(RAP)位置的關鍵幀。
比如說,告訴解碼器從一個臨時有效的位置直接開始解碼,忽略之前的視頻數據,這種做法被稱作開放式的GOP操作。
隨機位置讀取的支持對頻道切換、拖動操作和動態流服務是十分關鍵的。
某些解碼順序在CRA幀之后,顯示順序在CRA幀之前的幀可能會參考解碼器buffer中還不存在的幀,于是這些解碼器無法解碼的幀就只能被丟棄。基于這種情況,這些幀被定義為拖動可跳過的前置幀(RASL)。
不同的碼流之間切換可以通過斷點連接幀(BLA)來拼接。簡單的把需要切換的碼流的RAP幀標記為BLA放到當前幀的下一個CRA幀的地方,然后傳輸新碼流就可以完成碼流拼接的工作。
RAP幀可以是IDR、CRA、BLA幀,CRA和BLA的后面都可能跟隨著RASL幀(BLA的NAL單元的標記可定)。BLA幀之后的RASL幀解碼器必須拋棄,因為它們可能參考了拼接前源碼流的幀導致無法解碼。
還有一種解碼順序在RAP幀之后,顯示順序在RAP幀之前的幀,叫做拖動可解碼的前置幀(RADL),這種幀不會參考解碼順序在RAP之前的幀。
RASL和RADL可以統稱為前置幀(LP)。
解碼和顯示順序都在RAP幀之后的幀叫做后置幀,它們不可以將LP作為它們的參考。
二、臨時分層編碼
類似H.264/AVC的可伸縮編碼擴展(SVC)的功能,HEVC可以在NAL的頭上臨時定一個分級預測的層。這樣就可以只解析到NAL層面就實現可伸縮性。
某些情況下,針對同一個碼流,解碼器可以自主決定臨時解碼層的數量。從低級子層到更高級子層切換的操作可以在臨時子層幀(TSA)和步進臨時子層幀(STSA)完成。
TSA點允許切換到比當前子層高的任意子層,STSA只允許切換到只比當前子層高一級的下一層(除非更高的層也包含TSA或者STSA幀)。
三、擴展參數集
新加入VPS元數據描述包括臨時層級依賴在內的編碼視頻的全部特征。主要目的是增強在系統層的兼容擴展性。
比如說,對未來可伸縮編碼或者多視角的視頻需要被舊的解碼器解碼時,那么它就可以方便地忽略那些高級解碼器才需要的碼流擴展信息。
四、參考幀集和參考幀列表
為了管理解碼多參考幀,已解碼好的幀被放在解碼幀緩沖區(DPB)中并被詳細標記以供碼流中后續的幀參考。每個片的頭部都會包含一個幀序計數器(POC)以定位那些幀。
保留下來用以參考的幀集合叫做參考幀集合(RPS)。
下圖演示了一小段碼流的POC值、解碼順序和RPS。
DPS
H.264/AVC的DPB中有兩個幀的列表,分別叫做參考幀列表0和參考幀列表1。定位具體幀的索引叫做參考幀索引,如果列表中只有一個幀,則參考幀索引為0,不在碼流中傳輸。單向預測時,可以從0和1兩個列表中選出一個幀。雙向預測時,則會從兩個列表中各選一幀。
定位RPS和將參考幀列表用于幀間參考的語法比前代H.264/AVC的設計對丟包的兼容性更好,在拖動和其它播放模式下(快進、快退、動態碼流切換等)也能工作地更好。
這項優化的關鍵是讓語法更加明確可展現,避免了之前對解碼器解碼過程中的中間狀態和臨時值的依賴。而且還比H.264/AVC中的語法更加簡化了。
HEVC標準概覽(五)Profile、Tier和Level
一、Profile、Tier和Level的概念
這三個概念主要用于需要類似功能的不同實現之間的溝通。
Profile指出碼流中使用了哪些編碼工具和算法。
Level指出一些對解碼端的負載和內存占用影響較大的關鍵參數約束。主要包括采樣率、分辨率、最大碼率,最小壓縮率,DPB容量,CPB(解碼緩沖區)大小。
在HEVC的設計中,應用可以只依據最大的碼率和CPB大小就可以區分。為了達成這個效果,有些Level定義了兩個Tier——Main Tier用于大多數應用,High Tier用于那些最苛刻的應用。
遵守某Level和tier的解碼器可以解碼所有等于或低于這個Level和Tier的碼流。
支持某Profile的解碼器必須支持此Profile中的所有特性。
編碼器不必實現Profile中所有的特性,但產出的碼流必須是遵守標準的,比如說要遵守與之兼容的解碼器的約束。
二、HEVC中的Profile和Level
按照進度,2013年1月有三個Profile將被寫入標準,分別是Main、Main10和Main Still Picture,針對不同的應用需求。
減少Profile的數量可以增強設備通用性的。未來還會促進視頻服務一定程度上的融合,比如說廣播、移動、流,這些服務會逐漸匯聚到能全部支持它們的設備上。
本文之前討論的編碼工具和高層語法加上下面的限制條件組成了三個Profile的草案。
1) 只支持4:2:0色度采樣;
2) 編碼器使用多tile時,不能同時使用錯峰并行處理。而且每個tile至少有256亮度采樣寬,64亮度采樣高。
3) 在Main和Main Still Picture這兩個Profile中支持8位深度的采樣,Main10支持10位采樣深度。
4) Main Still Picture中,全部的碼流只能一幀編碼的視頻(意即禁用幀間預測)。
下表中13個Level計劃包含在標準第一版中,它們的分辨率從176×144(QCIF)到7680×4320(8kx4k)。圖像的寬和高均需小于等于8倍的MaxLumaPS再開方。MaxLumaPS是下圖中的最大亮度幀尺寸(避免極端尺寸時解碼器產生錯誤)。
level
有8個Level支持2個Tier(Level4及以上)。除了Level1偏高(要求350,000b)之外,CPB容量均等于最大碼率的1秒容量。當使用Level最大的分辨率時,CPB最大容量為6幀圖像(包括當前幀、用于參考的幀和準備輸出的幀)。如果降低分辨率的話,CPB可以容納16幀圖像(取決與具體采用的分辨率)。
Level還約束了每幀中垂直和水平方向tile的最大數量,以及每秒最大的tile數量
HEVC標準概覽(六)歷史沿革
ITU-T VCEG和ISO/IEC MPEG于2004年中完成了H.264/AVC的High Profile之后,就開始著手準備下一代的標準。
VCEG在2004年開始準備,2005初確定關鍵技術方向(KTA),并開發了一個通用的KTA軟件代碼庫。此代碼庫由H.264/AVC的參考軟件joint model(JM)開發而來,它引入并驗證了很多新技術。
2005到2008年間,MPEG開始探索顯著提升編碼效率的可能性。它組織了數個Workshop,并在2009年4月為這些技術發布了一篇“征集證據”。隨后專家開始觀測征集而來的評估和測試結果。
VCEG和MPEG分頭調查后,達成了現有編碼標準的效率可以顯著提升的共識。2010年1月兩個組織聯合建立了JCT-VC,同時發表定義了未來標準概況的視頻編碼技術聯合建議書(CfP)。
2010年4月JCT-VC第1次會議,項目名確定為HEVC,研究了反饋給CfP的建議,從數個有前途的技術建議中收集了一些元素,產出了審議測試模型的第一個版本(TMuC)。會后實現了相應的代碼庫。一些關鍵性的技術已經在《IEEE 視頻技術系統和電路匯報》里預先討論了。雖然TMuC在前代標準基準上有顯著的效率提升,但在每個功能塊中都存在多余的編碼工具,它還是一個來自各種貢獻的簡單集合體。
2010年7月JCT-VC第2次會議,開始通過測試TMuC每個組件的方式選擇每個功能塊所需編碼工具的最小集。
2010年10月JCT-VC第3次會議,在詳盡的組件測試的結果報告基礎上,完成了HEVC測試模型版本1(HM 1)和相應的HEVC標準草案1(WD 1)。和TMuC相比,HM 1通過刪除沒必要的高復雜度的編碼工具,大大地簡化了代碼庫。
隨后的研究中,HM的編碼工具被分為2類:追求高效率或低復雜度的。JCT-VC它們分別建立了測試場景。下表簡述了HM 1中這兩個方向的編碼工具。
HMcodingtool
JCT-VC第4次到第11次會議中,除了編碼效率,包括降低實現復雜度、統一編碼工具、并行化設計等很多其它方面也被納入研究范圍。HEVC設計持續更新下,高效率和低復雜度之間的差異逐漸縮小,達成一個統一的Main Profile。下表簡述了配置為高效率的HM 1和目前HEVC標準中的編碼工具。
HEVCcodingtool
2012年2月JCT-VC第8次會議,產出了HEVC標準草案第6版,ISO/IEC草案委員會投票通過。
2012年7月JCT-VC第10次會議,草案的第8個版本發布,作為國際標準草案投票,最終決定2013年1月作為ITU-T和ISO/IEC的最終國際標準草案發布。
JCT-VC的母體目前已經在探索和準備HEVC未來的擴展。很可能支持更高精度的采樣深度、增強的色彩采樣、可伸縮編碼、3D和多視角視頻編碼(以及為高級的3D顯示器深度映射編碼)等特性。
HEVC標準概覽(七)總結
ITU-T VCEG和ISO/IEC MPEG合作開發了HEVC標準,當中包含了現代的高級視頻編碼技術。
HEVC視頻編碼層的基本設計依然是傳統基于塊的運動補償混合編碼,但相對前代標準作出了許多重要改進。
新特性共同發揮作用時,HEVC相對前代標準可以節省50%的碼率(針對高分辨率視頻尤為有效)。
編碼性能上的細節,可以參見J.-R. Ohm、G. J. Sullivan、H. Schwarz, T. K. Tan和T. Wiegand的《Comparison of the coding efficiency of video coding standards— Including High Efficiency Video Coding (HEVC)》。
實現復雜度的分析超出了本文的范圍。但現代處理器技術之下,解碼器的復雜度并不是主要的負擔(相對H.264/AVC),編碼器的復雜度也是可控的。實現復雜度上的細節,可以參見F. Bossen、B. Bross、K. Sühring和D. Flynn的《HEVC complexity and implementation analysis》。
標準的更多信息可以在JCT-VC的文檔管理系統(http://phenix.int-evry.fr/jct/)查閱。
致謝
感謝ITU-T VCEG、ISO/IEC MPEG和JCT-VC專家們的貢獻。