懸盪已久的次世代影像編碼格式 H.265,終於在2013年1月25日收到國際電信聯盟(ITU)的認可,成為新一代標準格式,它除了肩負縮小影片所需資料流量,以舒緩繁重的網路負擔外,同時也是 4K UHD 解析度影片編碼的不二人選。
影片流量拖垮網路
影片壓縮最主要的終極目標,就是要降低影片檔案的大小,如此一來可以減少儲存時所佔用的空間,同時也能夠降低傳輸時消耗的網路頻寬。或許讀者會覺得現在硬碟便宜的跟什麼一樣,網路速度也非常快,但若以目前主流的HD影片來推估,並以下列條件進行試算:
- 解析度=1920 x 1080
- 顏色取樣深度=24bit(R、G、B各色8bit)
- 每秒幀數=60幀
那麼每秒需要的流量可能是多少?
1920 x 1080 x 24bit x 60=2985984000bit
2985984000bit/8bit/1024/1024=355.957MB
以2小時的電影來說,就需要佔用2.44TB的儲存空間,大約需要使用50片雙層藍光光碟才能裝得完(而且以上估算還不包括音訊部分),更罔談以網路即時串流,影片壓縮的重要性可見一斑。
以目前主流的藍光光碟為例,採用大部分H.264編碼格式的影片流量落於20至25Mbps之間,壓縮率大約為113.9至142.38倍之間,節省的空間相當可觀。即便H.264的壓縮能力足夠滿足目前使用需求,但是遇到解析度更高的4K UHD格式,還是顯得捉襟見肘,需要尋求壓縮效率更好的編碼器,才能將影片壓縮到適合傳輸與儲存的流量範圍。
▲由此圖可以看出各種不同解析度的尺寸差異,4K UHD的解析度為HD的4倍,與480P相比,差距更是高達24倍。
▲規格比較表
工作時程超過8年
H.265的起源為2004年時,國際電信聯盟旗下的視訊編碼專家小組(Video Coding Experts Group)開始研讀可以取代H.264的技術,並且將專案名稱暫定為H.265與H.NGVC (Next-generation Video Coding,次世代視訊編碼),其目標為與H.264 High Profile比較時,在相同畫質表現下,可以為影片節省25至50%的資料流量。
2007年國際標準化組織(ISO)旗下的動態畫像專家小組(Moving Picture Experts Group)也開始了相似的工作,它們也希望能提出壓縮效率更高的編碼方式。2010年4月時,這2個小組一起組成了視訊編碼聯合工作小組(JCT-VC,Joint Collaborative Team on Video Coding),共同提出了27項提案,並針對這些提案進行研討,於2010年10月發佈第1份規格草案。
在累積許多工作成果後,2012年2月推出了以第6份規格草案為基礎的委員會版草案,接下來以第8份規格草案為基礎的國際規格草案,於2012年6月推出。最後原訂於2013年2月發佈最終版國際規格草案,則是提前於1月25日確認,確定了H.265的基本功能。
▲影像技術年表(點圖看大圖)
節省一半流量
H.265的研發目的從命名就可以看出端倪,H.265又名HEVC(High Efficiency Video Coding,高效率視訊編碼),其最主要的用途就是要進一步降低影片所需的流量,以降低儲存與傳輸的成本。以上述27項提案中最重要3項為例,H.265要求在最佳的編碼範本(profile)中,能在維持相同PSNR的前提下,節省以H.264壓縮的1080P影片36%左右的資料量,並且能在影像品質差不多時,將節省的幅度進一步提升到50%。
而第3項重要提案,則是針對壓縮、解壓縮所需的運算量做出限制,以最佳編碼範本進行H.265編碼所需的時間,只能比H.264編碼多出10%,而解碼時間則是可以多出60%。有趣的是,限制H.265的運算量需求,勢必會降低它的編碼效率,恰巧與節約流量的初衷相互矛盾,但是會做出這種決定,其目的不外乎是預想到日後解析度與每秒幀數更高的影片,會讓運算量大幅提高,先做出折衷的限制,才能在處理器或是行動裝置效能足夠負荷的前提下,盡可能提高壓縮效率。
PSNR為畫質打分數
影片的畫質分析可以分為主觀的人肉測試,與相對客觀的量化測試,人肉測試的方式不外乎用肉眼觀察影片的畫面,分析不同樣本中熟優熟劣,這種方式雖然直接,但卻容易受到測試者主觀喜惡的影響,而且也不夠精確。量化測試是採用數學方式分析影片處理前後的差異,雖然可以得到精確的分數,但是該分數不一定能完全反應視覺上的感受。
PSNR(Peak Signal-to-Noise Ratio,尖峰訊噪比)為量化測試的一種,其定義為「10 x log10(MAX^2 / MSE)」,其中MAX為每個像素中,能夠表現出的最大可能性數量,若以8bit取樣深度為例,MAX將等於2^8-1 = 255。MSE為方均誤差,其數學上的定義為比較處理前後的影片,針對每一個像素計算其量化數據上差異,再將這個差異平方後加總計算,最後再將總和除以像素總數。簡單地說,尖峰訊噪比越大,就表示訊號越強、雜訊越小,也代表畫面與原始檔案比較相近。反之若是數值很小的話,就表示影片受雜訊干擾的情況嚴重,畫質表現比較不好。
以H.264為基礎,H.265效率更高
自從H.261編碼格式引入混合式(hybrid)編碼方式開始,後續的編碼格式大多會延用這個方式,將影像進行畫面間、畫面內預測(inter prediction、intra prediction),刪去影片中不需要的重複資料。H.265也不例外,它也是基於這個概念進行設計,不過它擁有諸多新的編碼工具,可以讓增進壓縮效率。
僅支援循序掃瞄
為了要節省影片資料流量,有些媒體會以交錯掃描(interlaced scan)進行傳輸,交錯掃描的原理為將影片依照掃瞄線(即水平方向像素)將畫面拆分為2個群組,奇場群組包含第1、3、5……等奇數條掃瞄線,偶場群組則包含偶數條掃瞄線,奇場、偶場群組會在螢幕上交替播出,在快速輪換的結果下,人眼就會因視覺暫留而看到完整畫面。
雖然交錯掃描可以降低影片資料流量,但是對畫質仍會造成一定影響,尤其是高速移動的物體,容易在邊緣產生抖動或毛邊等干擾。循序掃描(progressive scan)則是每次都傳送完整畫面,雖然會佔用較多流量,但可以提供較佳畫質。
由於目前的顯示器皆以循序掃描模式運作,因此H.265設計時並不支援交錯掃描方式進行編碼,但若為了節省流量或其他因素,編碼器可以透過參考資料語法(metadata syntax),將完整畫面在編碼前先拆分為奇場及偶場群組,編碼器會將2個不同的群組視為不同影片來源,分別進行編碼工作,以此變通方式達成儲存交錯掃描影片的需求。
▲交錯掃描會將畫面分為機奇場與偶場群組,並在播放時交替播出,如此就可以減少資料流量。
捨巨區塊,採編碼樹
從H.265的發展延革來看,它勢必會站在H.264的基礎上發展,但是兩者間最大的不同,存在於最基礎的編碼單元。以往H.264會以16 x 16像素為單位(或是16 x 8、8 x 8、8 x 4、4 x 4等配置),將畫面切割為數個大小相同的巨區塊(macroblock),並以這些巨區塊做為編碼時的最小元素。H.265則是將切割畫面的工作從使用者手動設定,轉交給編碼器來決定,讓編碼器可視情況以16 x 16、32 x 32、64 x 64等尺寸,將畫面切割為數個編碼樹單元(Coding Tree Unit),一般來說區塊尺寸越大,壓縮效率就會越好。
每個編碼樹單元內包含1個亮度與2個色度編碼樹區塊(Coding Tree Block),以及記錄額外資訊的語法元素(syntax element)。一般來說影片大多是以YUV 4:2:0色彩採樣進行壓縮,因此以16 x 16的編碼樹單元為例,其中會包含1個16 x 16的亮度編碼樹區塊,以及2個8 x 8的色度編碼樹區塊。
▲編碼樹皆是以4分法,將影像切割成子區塊,編碼樹區塊可切為編碼單元,再切下去即可得到預測單元。
延伸閱讀:
免費下載Windows 8 專用影音編碼包,支援多種影音格式不求人
認識VP8 影像編碼:整合HTML5 更小更漂亮、挑戰H.264 地位
動態補償如何讓影片壓縮變小?B-frame 能讓影片變多瘦?
(後面還有更多H.265編碼格式介紹)
編碼樹可繼續切割
編碼樹單元邏輯上來說,只是將畫面切割開成許多的子元素,編碼器還會將編碼樹單元繼續切割為編碼單元(Coding Unit),做為實際編碼時採用的單元。切割方式可以分為保留原始尺寸,或切割成4個等大的子區塊。選擇前者的話,編碼單元的尺寸就會跟編碼樹單元一樣大,然而若選擇後者,新的編碼單元邊長將會只有編碼樹單元的一半。每個編碼單元與編碼樹單元一樣,都包含1個亮度、2個色度編碼區塊(Coding Block),以及語法元素。
編碼單元還會進一步切割成預測單元(Prediction Unit),以及轉換單元(Transform Unit)。預測單元是進行畫面間、畫面內預測所採用的元素,假設編碼單元的邊長為M,預測單元可以切割成M x M、M/2 x M、M/2 x M/2以及M/4 x M等型式,其尺寸取決於編碼樹單元大小,分佈於4 x 4像素到64 x 64像素之間。
轉換單元則是處理經過畫面內、畫面間預測後,留下無法刪減的殘存資料,其尺寸限制為4 x 4、8 x 8、16 x 16或是32 x 32。和編碼單元一樣,預測單元及轉換單元底下,也都有各自存放亮度與色度的預測區塊(Prediction Block)及轉換區塊(Transform Block),以進行資料壓縮。
▲編碼單元可以使用上述配置,切割成預測單元。畫面間預測可使用此8種方式,而畫面內預測只支援M/ x M、M/2 x M/2等2種方式。
編碼樹有利動態補償
無論是H.264或H.265,將畫面切割為巨區塊或編碼樹之目的,其中之一就是要進行動態補償(motion compensation),它是畫面間預測步驟中相當重要的一環。簡單地說動態補償就是比對不同的畫面,從中找出相同的部分予以刪除,只記錄有變動的部分,來達到節省資料流量之目的。
動態補償的實作方法也不難理解,編碼器在把畫面切割之後,會抓取各區塊與其他畫格進行比對,分析各區塊中的物件是否有所變化,以及各物件移動的方向以及距離。如果物件沒有變化的話,該區塊就可以延用其他畫格中的資訊,如果物件產生移動的話,則只需將移動的方向與距離記錄為動態向量,就可以省去記錄完整畫面資訊所需的工夫。
參考畫格更靈活
H.265採用參考圖像集(reference picture set,以下稱RPS)記錄動態補償之畫格,並具有已解碼圖像緩衝區(decoded picture buffer),可以用來暫存畫格,這意味著編碼器可以不依照畫格播放的順序進行動態補償,換言之參考圖像集比H.264使用的傳統圖像群組(group of picture,以下稱GOP)具有更大的安排幅度。
RPS與GOP一樣具有單向、雙向等參考方式,其不同點在於RPS可以跳脫播放順序,各畫格可以尋找最適合的畫格作為動態補償的參考,更加靈活的參考模式讓資料重複的可能性降到最低。除此之外,H.265採用高階語法進行RPS編排,具有比H.264更強的結構性,可以防止解碼時資料流失,有利於隨機存取影片、搜尋、快轉、倒轉等動作時,避免畫面出現解碼錯誤。
▲RPS比GOP擁有更大的彈性,甚至可以不照畫格播放順序進行編碼,因此可能可以抓到更多重複資料,進而節省資料流量。
提高多工編碼效率
考量到H.265編碼的複雜度勢必比H.264高,以及電腦、行動裝置大多搭載多核心處理器,因此H.265會加強多工運算效率並不是意料外的事。最簡單的多工處理方式就是方塊(tile)模式,在此模式下,完整的畫面會被切割為多個矩形子區塊,每個子區塊可以包含多個編碼樹單元,且會被視為獨立的個體,由於每個子區塊之間並不存在資料相依問題,所以各執行緒可以單獨運作,達到多工處理之目的。
方塊模式的優點就是切割方式很單純,而且在編碼、解碼過程中,除了在使用deblocking filter處理畫面時,需要考慮跨區塊間資料交換問題,其餘包括像素、動態向量等資料,都會被侷限在子區塊中,因此其運算複雜度最低,編瑪所需的時間最短。不過其缺點也在於各子區塊間無法交換資料,因此無法刪去跨區塊的冗餘資料,所以壓縮率表現會比較差。
波前編碼兼顧壓縮率
H.265加入了嶄新的波前平行運算(wavefront parallel processing)編碼方式,它會把編碼樹單元劃分為一橫列、一橫列的群組,第一列群組正常程序處理,而第二列以後的群組則會等上列群組中前2個編碼樹單元處理完後才進行運算,每列群組都會由不同的執行緒負責處理。舉例來說,執行緒1會先處理第1列的編碼樹單元,當執行緒1處理完第2個編碼樹單元後,執行緒2就會開始處理第2列的編碼樹單元,而當執行緒2處理完第2個編碼樹單元後,執行緒3就會開始處理第3列的編碼樹單元,依此類推。
波前平行運算的好處是可以在不同編碼樹單元間交換像素、動態向量等資料,以及CABAC編碼時可能碰到的相同資料。這樣雖然會提高編碼複雜度,但是能夠節省更多資料流量,也可以避免在子區塊邊緣產生雜訊的問題。
▲波前平行運算會讓各執行緒在處理每列單元時,會有一段時間差,如此一來就可以提高不同區塊間的資料相依性。
▲波前平行運算讓不同編碼樹單元可以互相資料,雖然會降低編碼速度,但是可以提高資料壓縮率。
deblocking filter
在H.264等編碼技術中,各巨區塊間的資料彼此完全獨立、沒有相依性,於是很容易受編碼過程中產生的失真影響,在巨區塊的邊界區域產生雜訊,導致將所有巨區塊組合成完整畫面時,發生圖像無法完全合併的狀況。
deblocking filter在運作時會偵測臨近巨區塊的資料,重新建立巨區塊間之資料依賴性,盡量將邊緣區域平滑化,提高整體圖像品質。
13種Level最大支援8K
如同H.264一般,H.265也有編碼範本的設計,範本的主要目地在於規範編碼時所採用的各種編碼工具以及參數,以保證使用的設備具有足夠的運算能力與記憶體容量進行編、解碼,H.265的範本可分為Level、Tire、Profile等3個項目。
在目前的草案階段,H.265具有13種Level,各Level都有不同的亮度取樣尺寸與每秒亮度取樣率之限制,且影像的長與寬需要小於或等於「亮度取樣尺寸 x 8之平方根」,支援的影像尺寸最小為176 x 144,最大則上看8K(7680 x 4320)解析度。Tire的用意在限制影片最大流量,在Level 3.1以下只具有Main Tire可以選擇,當提高到Level 4以後,則具有Main Tire與High Tire等2種選項。
制定範本確保效率
H.265具有Main、Main 10、Main Still Picture等3種Profile,數量雖比H.264少,但是較單純的設計反而有利於提高檔案互通性。Main為最基本的Profile,其色彩採樣限定使用YUV 4:2:0,取樣深度為8bit,且多工處理方式只能在方塊模式與波前平行運算中擇一使用,每個子區塊至少需要包含256個亮度取樣與64個色度取樣。
Main 10則是將取樣深度放寬為10bit,其餘限制與Main相同,而Main Still Picture是限制在影片的位元流(bitstream)只能包含單一編碼畫格,也就是說無法使用已解碼圖像緩衝區進行動態補償,因此壓縮時無法使用畫面間預測,雖然會拖累影片壓縮率,但是因為不用準備已解碼圖像緩衝區,所以可以減少記憶體佔用量。
▲H.265各Level限制
實測流量可省一半
根據IEEE於2012年12月出版的 Circuits and Systems for Video Technology,其中Comparison of the Coding Efficiency of Video Coding Standards—Including High Efficiency Video Coding一文中,提到了H.265的編碼表現。
該文章以9段影片進行測試,所得到的結果相當另人滿意,即便在表現最差的樣本中,節省的流量接近30%,平均起來也達到49.3%的佳績,要在相同畫質表現下為影片瘦身一半的口號並不是喊假的。該文中也提供了一些參考圖片,筆者節錄其中1張進行說明,測試使用H.262 Main profile、MPEG 4 Advanced Simple Profile、H.263 High Latency profile、H.264 High profile、H.265 Main profile等5種編碼,圖中可以看到H.264已經與早期3種技術有明顯差距,H.265還能再次拉開比數。
H.265於2012年全球移動通訊大會(MWC)由Qualcomm首次公開展示,2013年度全球移動通訊大會將在本期雜誌截稿後登場,屆時也許將有更多相關消息釋出。可以肯定的是,在硬體廠商的支持,以及國際電信聯盟批准的前提下,H.265的前景比筆者先前介紹過的VP8還令人期待,普及的時間說不定比大家想像的速度還要快。
▲流量比較表
▲圖片中藍色的線條即為H.265的表現,可以使用較低的流量,達到相同的畫質表現。(圖片來源IEEE)
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團