H.265视频编码与技术全析(上)
H.265視頻編碼與技術全析(上)
一. 概述
作為新一代視頻編解碼格式,H.265得到越來越廣泛的應用。不久之前,蘋果公司在翹首期盼中發布了iPhone6,該款手機較之以往的iPhone,不僅僅只是簡單地增大了屏幕,其采用了H.265視頻編碼解碼技術,可達到在有限帶寬下傳輸更高質量的網絡視頻。雖然對于大部分人來講,H.265還有點陌生,然而早在兩年前,愛立信就已經推出了首款H.265編解碼器。使用H.265編解碼的一個巨大優勢是僅需目前主流編碼視頻H.264一半的比特率,就可提供同等質量的視頻。
接下來,為大家詳細介紹H.265視頻編碼技術究竟有什么樣的優勢。
新一代視頻壓縮標準:H.265
視頻編解碼標準主要來源于國際電聯ITU-T和國際標準化組織ISO,ITU的H.26×系列視頻壓縮標準經過了H.261、H.263,H.263+這樣一個演進過程。而ISO的視頻壓縮標準是MPEG系列,從MPEG1、MEPG2到MPEG4,之后兩個標準化組合走向合作,成立了JVT,推出了在當前最有效的視頻壓縮標準:H.264/AVC。
隨后,H.264的應用范圍不斷擴展,成熟度也不斷提高,于2013年定稿發布了下一代視頻壓縮標準,命名為HEVC(High EfficiencyVideoCoding),分別被ITU-T和ISO/IEC采納成為國際標準,即H.265視頻壓縮標準。H.265在現有的視頻編碼標準H.264基礎上,進一步提高壓縮效率、提高魯棒性(Robustness抗變換性)和錯誤恢復能力、減少實時的時延、減少信道獲取時間和隨機接入時延、降低復雜度,以達到最優化設置。
高清晰,低碼率
如今,4K超高清技術大行其道,傳統的H.264已面臨瓶頸限制。以編碼單位來說,H.264中每個宏塊(marcoblock,MB)大小都是固定的16x16像素。然而,在更高分辨率下,單個宏塊所表示的圖像內容信息大大減少,H.264所采用的宏塊經過整數變換后,低頻系數相似程度也大大提高,出現大量冗余,導致H.264編碼對高清視頻的壓縮效率明顯降低;其次,H.264算法宏塊個數的爆發式增長,會導致每個編碼宏塊的預測模式、運動矢量、參考幀索引和量化級等宏塊級參數信息占用更多碼流資源,也降低了編碼壓縮率。
相比H.264,H.265提供了更多不同的工具來降低碼率。H.265的編碼單位可以選擇從最小的8x8到最大的64x64。信息量不多的區域劃分的宏塊較大,編碼后的碼字較少,而細節多的地方劃分的宏塊就相應的小和多一些,編碼后的碼字較多,這樣就相當于對圖像進行了有重點的編碼,針對重要的更多關鍵細節的部分進行增強劃塊,從而降低了整體的碼率,編碼效率就相應得到了提高。這個過程在H.265上,可以通過系統自行適應識別實現。
最新H.265標準基本繼承了H.264的框架,H264由于算法優化,只能低于1Mbps的速度實現標清數字圖像傳送;H265則可以實現利用1~2Mbps的傳輸速度傳送720P(分辨率1280*720)普通高清音視頻傳送。這意味著,旨在有限帶寬下H.265能夠傳輸更高質量的網絡視頻,同時,僅需原先的一半帶寬即可播放相同質量的視頻。
H.265技術的應用
編碼技術主要運用于視頻播放設備、軟件應用以及拍攝、錄制視頻的設備。人們最熟悉的莫過于PPS網絡視頻播放器。在PC屏客戶端產品上面,PPS已經于2013年初推出了基于H.265標準的高清視頻,并命名“臻高清”為自己的高清品牌。同時 PPS不斷加大了在H.265技術應用方面的研究,把H.265推向手機客戶端,且在性能上不斷優化提升。
在視頻播放設備上,4K超清電視的推出,也與H.265編碼技術息息相關。索尼于今年9月份發布的國內首臺提供高品質4K內容的媒體播放器新品FMP-X10以及索尼在國外已發布的S900B系列和S990B系列,它們都采用了H.265編碼格式,在編碼技術上更勝從前。對于藍光來說,H.265的HEVC編碼技術足以將巨大的4K電影壓縮進一張藍光光盤,節省更大的內存空間。
在攝像設備上,索尼、海康威視、中興等廠商陸續發布了該類攝像設備,不僅用于日常的拍照攝影,更用于區域監控安防上。采用了H.265編碼技術的超高清監控所能監控的區域更大,不僅減少了安裝數量,最主要的是提高了監控的畫面質量。避免了一個路口安裝多臺攝像機而造成龐大的冗余數據的情況。
當然,H.265的應用不僅僅局限于此,據悉,馬上入華的索尼PS4也將支持H.265編解碼技術。另外,伴隨著4G網絡的到來,H.265將可能逐漸大規模投入移動客戶端,讓高清無處不在,使得更多的人們感受并享受這一技術所帶來的影響。
這里需要指出的是,雖然H.265帶來了遠高于H.264的壓縮效率,但同時也帶來了高于H.264數倍的解碼難度,運算量飆升到400~500GOPS,目前還沒有廣泛的H.265硬解支持。而且,在面對硬件支持度欠缺、標準確立太晚等問題的同時,谷歌VP9也是H.265擺在面前的挑戰,畢竟和需要繳納授權費的H.265相比,VP9使用自由的BSD版權協議對業界的吸引力無疑是巨大的。
二、名詞
CTU: 編碼樹單元
CU: 編碼單元
PU: 以CU為根,對CU進行劃分,一個預測單元PU包含一個亮度預測塊PB和兩個色度預測塊PB.
TU: 以CU為根,變換單元TU是在CU的基礎上劃分的,跟PU沒有關系,采用四叉樹劃分方式,具體劃分有率失真代價決定,下圖給出了某個CU劃分成TU的結構。
- H265-NALU-Type介紹
NAL_TRAIL_N
= 0, NAL_TRAIL_R = 1, NAL_TSA_N = 2, NAL_TSA_R = 3, NAL_STSA_N = 4, NAL_STSA_R
= 5, NAL_RADL_N = 6, NAL_RADL_R = 7, NAL_RASL_N = 8, NAL_RASL_R = 9,
NAL_BLA_W_LP = 16, NAL_BLA_W_RADL = 17, NAL_BLA_N_LP = 18, NAL_IDR_W_RADL = 19,
NAL_IDR_N_LP = 20, NAL_CRA_NUT = 21, NAL_VPS = 32, NAL_SPS = 33, NAL_PPS = 34,
NAL_AUD = 35, NAL_EOS_NUT = 36, NAL_EOB_NUT = 37, NAL_FD_NUT = 38,
NAL_SEI_PREFIX = 39, NAL_SEI_SUFFIX = 40,
- H264和H265獲取幀類型/NALU類型的區別
H264獲取方式為 code&0x1f 取低5位,如00 00 00 01 65 則65&0x1f=5表示IDR幀
H265獲取方式為 (code & 0x7E)>>1 , 如00 00 00 01
40 則(40&0x7e)>>1 = 32–vps
- H265中幀類型的介紹GOP等
H265和H264的不同有H265引入了多種方式的幀編碼方式,其次H265的GOP不像H264那種為封閉式,H265是封閉和開放式都支持;H264封閉式GOP: H264中單個GOP內部幀解碼不會依賴其它GOP,即每個GOP都可獨立解碼,關鍵點就是IDR幀的強制刷新起了阻隔作用,避免錯誤幀相互影響,所以H264中GOP開始的第一幀必須為IDR關鍵幀,IDR為I幀的一種采用幀內編碼無參考方式,但I幀不一定是IDR幀,普通I幀會參考前邊的IDR,在RTC中,用的最多的就是IDR關鍵幀。
關于GOP。
這是圖像組(Group of Pictures)的意思,表示編碼的視頻序列分成了一組一組的有序的幀的集合進行編碼。每個GOP一定是以一個I幀開始的,但是卻不一定指代的是兩個I幀之間的距離。因為一個GOP內可能包含幾個I幀,只有第一個I幀(也就是第一幀)才是關鍵幀。在程序cfg中,GOP的長度和兩個I幀的距離也是兩個不同參數指定的(如IntraPeriod和GOP Size或者類似的參數)。所以,兩個I幀的間距不可能大于GOP的長度,一般情況是更小的。
關于IDR。
這個詞兒的全稱是Instantaneous Decoding Refresh,是在H.264中定義的結構。在H.264中,IDR幀一定是I幀,而且一定是GOP的開始,也是H.264 GOP的關鍵幀。但是反過來卻不成立,I幀不一定是IDR幀。GOP的長度不是定死不變的,在H.264的編碼器中,如果判定場景發生變化,那么及時不到原定GOP的末尾,也會在這個位置加入一個IDR,作為新一個GOP的開始。此時這個GOP的長度就被縮小了。
閉合GOP和開放GOP(closed GOP/open GOP),CRA
閉合GOP是H.264中GOP的格式。在H.264的GOP中,所有的GOP都是獨立解碼的,與其他GOP無關,即它們都是“封閉”的。但是在HEVC中,GOP的結構發生了變化,采用了“開放”的結構,在解碼過程過可能會參考其他GOP的數據。這時,一個GOP的起始幀命名為CRA, clean random access,同樣采用幀內編碼,但是這個GOP內的幀間編碼幀可以越過CRA參考前一個GOP的數據,這便是GOP的open。
關于BLA
BLA只是CRA在視頻流切換情況下的一種特例。視頻流在某個RAP上要求切換到另一個視頻流繼續解碼,則直接將該CRA同另一個視頻流中的接入CRA連接,后者便是BLA。由于BLA之前解碼到緩存的視頻流與當前視頻流無關,因此其特性類似于直接從該點進行隨機存取后的CRA。
RASL和RADL
這是兩種GOP間的圖像類型。如果解碼器從某個CRA隨機接入,則按照顯示順序的后面幾幀數據由于缺少參考幀而不能解碼,這些圖像將被解碼器拋棄,即skip leading。而對于沒有從當前CRA接入的數據,這些圖像可以被正常解碼顯示,因此稱為decodable leading。由于這些數據是有可能舍棄的,因此其他圖像(trailing
pictures)不能參考這些數據,否則萬一這些圖像被舍棄,將會有更多的圖像受其影響而不能正常解碼。
三、基礎結構
HEVC Encoder整體框架:
CU是用作幀間和幀內編碼的基礎模塊,它的特點是方塊,它的大小從8×8到最小64×64,LCU是64x64,可以使用遞歸分割的四分樹的方法來得到,大的CU適用于圖像中比較平滑部分,而小的部分則適用于邊緣和紋理較豐富的區域。CU采用四叉樹的分割方式,具體的分割過程通過兩個變量來標記:分割深度(Depth)和分割標記符(Split_flag)。
在設置CTU大小為64X64的情況下,一個亮度CB最大為64X64即一個CTB直接作為一個CB,最小為8X8,則色度CB最大為32X32,最小為4X4。每個CU包含著與之相關聯的預測單元(PU)和我變換單元(TU).
Z掃描順序:
Z掃描
PU是預測的最基本的單元,是從CU中分割出來的,HEVC中對于skip模式、幀內模式和幀間模式。
幀內預測有2種劃分模式,只有在CU尺寸為8x8時,才能用PART_NxN。
幀間有8種劃分模式,PU可以使方形也可以使矩形,但是其分割不是遞歸的,與CU的分割還是有區別的。尺寸最大為64×64到最小4×4。
TU也是采用四叉樹劃分,以CU為根,TU可以大于PU,但是卻不可以大于CU的大小。
在幀內編碼過程中,TU 的尺寸嚴格小于
PU 的尺寸;
在幀間編碼過程中,TU 的尺寸不一定小于PU
的尺寸,但一定小于其對應 CU 的尺寸。
Slice可以包含一個獨立的Slice Segment(SS)和多個非獨立的SS,一個Slice中的SS可以互相依賴,但不能依賴其它Slice。圖中,虛線是SS分隔線,實線是Slice分隔線。
Tile是一個矩形塊,Slice是一個條帶。
Tile、Slice需要滿足以下兩個條件之一:
- 任一Slice中的所有CTU屬于同一個Tile:
- 任一Tile中的所有CTU屬于同一個Slice:
舉例說明:
假設視頻序列的顯示順序為①,這是一個完整的GOP,解碼順序為②
①I B B P B B P B B P
②I P B B P B B P B B
在H.264中,第一個I幀為IDR,GOP為閉合結構,因此兩個GOP組成視頻的結構為
I B B P B B P B B PI B B P B B P B B P(顯示順序)
I P B B P B B P B BI P B B P B B P B B(解碼順序)
而在HEVC中,兩個I幀為CRA,GOP為開放結構,因此GOP的結構為:
I B B P B B P B B PB B I B B P B B P B(顯示順序)
I P B B P B B P B B I B B P B B P B B…(解碼順序)
兩個紅色的B幀表示的是按照解碼順序在CRA之后,該GOP內參考的前一個GOP進行編碼的圖像。這樣便很容易得知,如果選擇在第二個CRA進行隨機接入,這兩個紅色的B幀將會由于沒有參考幀無法解碼而被舍棄。這兩個紅色的B幀即RASP。如果沒有選擇這個CRA進行隨機接入,這兩個紅色B幀將可以順利解碼,即成為RADP。對于BLA,情況也是類似的。由于出現碼流拼接,第二段碼流的CRA之后的B也會因為沒有參考幀無法解碼而丟棄。很容易理解,此時緩存中的參考幀數據還來自上一段碼流,跟當前碼流沒關系,當然不能用作B的參考了。
至于HEVC這么設計的目的,應該是為了編碼效率考慮的。因為B幀的壓縮比相對是最高的,引入這種設計可以在不影響隨機存取性能的前提下,盡可能增大B幀的比重,提高整體壓縮編碼的性能。
H265中引入的新結構:
Random
access point picture
IDR(instantaneous decoder refresh)BLA(broken link access)CRA(clean random access)
Leading
picture RASL和RADL的總稱
RADL(random access decodable leading)在隨機接入點后,可以按順序解碼的圖像RASL(random access skipped leading)因為包含幀間信息而不能解碼的圖像--會被丟棄
Temporal sub-layer
access picture隨機接入點后按解碼和輸出順序的圖像。
TSA(temporal sublayer access)STSA(stepwise temporal sublayer access)因此可以說隨機接入點的圖像一定是I幀,則H265中I幀的類型有以下幾種IDR/BLA/CRA,也就是NALU中的16~21均為I幀,代碼可參考ffmpeg相關判斷代碼:
switch (type) {
case
NAL_VPS:
vps++;
break;
case
NAL_SPS:
sps++;
break;
case
NAL_PPS:
pps++;
break;
case
NAL_BLA_N_LP:
case
NAL_BLA_W_LP:
case
NAL_BLA_W_RADL:
case
NAL_CRA_NUT:
case
NAL_IDR_N_LP:
case
NAL_IDR_W_RADL: irap++; break;
}
總結
以上是生活随笔為你收集整理的H.265视频编码与技术全析(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全卷积目标检测:FCOS
- 下一篇: H.265视频编码与技术全析(下)