ADVERTISEMENT
編碼樹可繼續切割
編碼樹單元邏輯上來說,只是將畫面切割開成許多的子元素,編碼器還會將編碼樹單元繼續切割為編碼單元(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)
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團
> 8K 的解析度應該是 7680 x 4320 吧 ╮(╯_╰)╭
感謝提醒,正確為7680 x 4320,誤植為7680 x 7320
已修正
我現在用mp4編碼的影片大小如果是1000MB
那我用H.265編碼 同解析度,同位元率情況下
檔案大小會減半變500MB 而且畫質還會變更好是嗎?
> 外行人問一下...
> 我現在用mp4編碼的影片大小如果是1000MB
> 那我用H.265編碼 同解析度,同位元率情況下
> 檔案大小會減半變500MB 而且畫質還會變更好是嗎?
不是的mp4只是一個副檔名(容器) 至於裡面裝的是怎麼編碼的影片是另一件事(只要支援副檔名mp4) 所以不能這樣推論
上述的資料在理論上理想化推斷的話意思是相同片源(影片來源 原始檔 通常大到一個可怕的地步)以"h264"這種方式編碼的影片改用"h265"來編碼的話可以達到相同品質 體積減半 或更佳的效果
不過一切都要看詳細測試與使用的參數 片源品質等 才能有更精確的結論
> 上述的資料在理論上理想化推斷的話意思是相同片源(影片來源 原始檔 通常大到一個可怕的地步)以"h264"這種方式編碼的影片改用"h265"來編碼的話可以達到相同品質 體積減半 或更佳的效果
> 不過一切都要看詳細測試與使用的參數 片源品質等 才能有更精確的結論
了解 謝謝
> ※ 引述《藍澤葵》的留言:
> > 上述的資料在理論上理想化推斷的話意思是相同片源(影片來源 原始檔 通常大到一個可怕的地步)以"h264"這種方式編碼的影片改用"h265"來編碼的話可以達到相同品質 體積減半 或更佳的效果
> > 不過一切都要看詳細測試與使用的參數 片源品質等 才能有更精確的結論
> 了解 謝謝
謝謝藍澤葵大大的回覆
基本上是要用相同的影片來源,分別壓製為H.264、H.265才會有這種差異
如果將H.264檔案再次壓縮成H.265的話,影響品質不可能會變更好,但是容量可能可以變更小
轉換編碼再怎樣轉,
最多只能跟片源差不多品質,
要超過片源變成更好的品質...
不知道有沒有這樣的技術啊~"~
可能利用程式去補的話,
反而會破壞品質吧orz。
是否為4:2:2?(個人還不太熟悉)(⊙ˍ⊙)
參考來源:http://120.101.203.1/aliex/%E5%9F%BA%E7%A4%8E%E9%9B%BB%E8%85%A6%E8%AA%B2%E7%A8%8B/digitphoto/DVsource.htm
【影像如何數位化】
寫得非常詳細呢!
【H.265的範本可分為Level、Tire、Profile等3個項目。】
【Tire的用意在限制影片最大流量,在Level 3.1以下只具有Main Tire可以選擇】
【H.265具有Main、Main 10、Main Still Picture等3種Profile】
所以level是大項目,profile > Level 1~13 > Main、Main 10...
main tire是其中一種profile(編碼範本)
而main tire的tire又可以省略不寫
若沒錯的話,希望能把文改得更清楚一點!(≧▽≦)
Level 1~13 > profile > Main、Main 10...