10bit视频编码——特性及全面播放方法介绍
一、前言
10bit視頻的播放,想偷懶的人可以直接用最新版MPC-HC、Potplayer、mplayer、QQ影音等播放器,或者使用各種解碼包的最新版(都是使用ffdshow/LAV實現解碼的),其內部解碼器都是基于ffmpeg(libav)的。這些播放器和解碼器中用的色彩轉換也基本都是libswscale,所以有部分會出現色彩空間轉換上的錯誤以及dither方式的不恰當。并且由于10bit YUV到8bit YUV再到8bit RGB的坑爹轉換過程使損失也大大增加(前一步對于10bit而言還有dither的過程,可以增加一定的精度,8bit視頻播放就是做了后面的一步,所以即使這樣10bit的效果也還是比8bit重編碼的情況好不少)。
于是對回放質量(8bit、10bit都能受益)有追求的可以參考下面介紹的基于MPC-HC使用madVR的播放教程,也可以看VX的播放攻略,其中也包括對于電腦性能不足的情況的解決方案:http://www.vempx.net/article/552.htm
關于10bit視頻播放對電腦性能的要求,主要是不支持硬解(包括DXVA、CUVID、QuickSync),所以要靠軟解,而目前軟解10bit視頻效率最高的就是LAV Video Decoders,基本上短時碼率不超過30Mbps的話現在的雙核CPU都能應付。但為了最佳的回放要靠madVR渲染器,而madVR內部各種mad的處理過程靠的不是CPU,而是GPU的Shader,也就是說顯卡不能太差,顯卡要能支持DX 9.0c,顯存最好在384MB以上,對顯卡性能的要求我沒有什么可以參考的依據,只知道我自己筆記本上的GT420M和HTPC上的HD5550都毫無壓力。
二、10bit的優勢
有關10bit重編碼的優勢,實際上就是用更高位深來進行數據的有損編碼的優勢,而且bit越高效果越好。最簡單的一句話就是,壓縮率更高,以更低的碼率提供更好的還原效果,這已經足夠具有意義了。
在二進制下對8bit的源數據進行有損編碼,造成相同量化損失時,以8bit為100%的error(殘差)時,9bit為50%的error,10bit為25%,12bit為6.25%……所以在HEVC(也就是H.265)里有個叫IBDI(Internal bit depth increase)的技術,就是用12bit的內部精度來進行8bit源數據的重編碼。
例如:
8bit源數據:??10011010
8bit量化后:??10011011
10bit量化后:1001101001
12bit量化后:100110100001
當然相同量化時肯定是bit越高的數據占的容量多,但由于損失程度的降低,綜合下來的結果是,相同碼率下高位深編碼的還原程度始終大于等于低位深。
而其實在目前的大部分有損音頻編碼里,不管輸入的是16bit整數還是24bit整數,其內部都是用32bit浮點數來進行編碼的,能大大減小error。至于為什么不在視頻里用浮點數編碼,可能的原因之一是,目前最強的桌面級CPU也只能勉強解碼一個浮點數編碼的1080p 24fps視頻。
至于你想說:“我只有8bit的顯示設備,10bit有什么用呢?” 這不是什么問題,因為最終是要靠dither(抖動)轉換成8bit RGB的,事實上madVR內部是不管你8bit還是10bit輸入,都先升到16bit進行處理,最后再dither成8bit RGB32進行輸出,所以它才能實現最高精度的轉換和最小的error。
而且最近還有這么一篇文章,對不同位深的YUV空間的色彩數量進行分析,發現8bit YUV轉換成RGB后遠遠到達不了8bit RGB的16777216色(目前大部分高清視頻就是屬于8bit-Rec709的情況),只有用10bit及以上精度YUV轉換為8bit RGB才能達到16.7M色:http://goldenhige.cocolog-nifty. … gb2416777216yu.html
另外也可參考這里taro大所說的:http://tieba.baidu.com/p/1356709843?pn=2
三、對比測試
我對10bit與8bit編碼的客觀測試結果,橫軸為碼率,豎軸為1/(1-SSIM),SSIM(結構相似度)是一種衡量兩畫面間相似度的算法(在這里是編碼后的視頻和源視頻的比較)。另外我這里出于個人需求順便對mbtree的情況做了測試,對此不感興趣的可以無視。
上圖以Clannad AS EP01的3654-17653幀(正片的大約前一半,不含OP)為測試片段,代表典型動畫的情況。
下圖以The Dark Knight的1273-9327幀為測試片段,代表電影的情況,而且是全部IMAX的片段,噪點也比較少,可以看作高畫質片源。
上圖中可以看到同樣達到200的1/(1-SSIM)時,8bit需要4500kbps,而10bit只需要1200kbps,這樣的優勢我覺得不需要多說什么了。
根據我的經驗,10bit對于gradient(梯度變化)的畫面(特別像是暗場之類的)優勢特別明顯,客觀上SSIM值很高,主觀上基本不會產生banding(色彩過渡區域的色帶)。
當然我也遇到了個別奇葩片源比如龍珠Z的BD-BOX,非常強的動態噪點,crf=20跑出來了25Mbps的碼率,而且這時10bit和8bit重編碼的差距基本可以忽略。
?
轉自http://meguizhcn.sourceforge.net/blog/?p=780
總結
以上是生活随笔為你收集整理的10bit视频编码——特性及全面播放方法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 开启utl_tcp,关于O
- 下一篇: 替换 Wonderware,云原生时序数