[轉載] 10bit視頻編碼——特性及全面播放方法介紹
本文章最後由 pureland 於 2012-1-20 14:26 編輯全文來自NMM的mawen1250大大,已獲得同意轉載!!如有更新請至此帖查看: http://www.nmm-hd.org/newbbs/viewtopic.php?f=17&t=551
測試用視頻:http://115.com/folder/fdon21ks
一、前言
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源數據: 100110108bit量化後: 1001101110bit量化後:100110100112bit量化後:100110100001
當然相同量化時肯定是bit越高的資料占的容量多,但由於損失程度的降低,綜合下來的結果是,相同碼率下高位深編碼的還原程度始終大於等於低位深。而其實在目前的大部分有損音頻編碼裏,不管輸入的是16bit整數還是24bit整數,其內部都是用32bit浮點數來進行編碼的,能大大減小error。至於為什麼不在視頻裏用浮點數編碼,可能的原因之一是,目前最強的桌面級CPU也只能勉強解碼一個浮點數編碼的1080p 24fps視頻。
至於你想說:“我只有8bit的顯示設備,10bit有什麼用呢?” 這不是什麼問題,因為最終是要靠dither(抖動)轉換成8bit RGB的,事實上madVR內部是不管你8bit還是10bit輸入,都先升到16bit進行處理,最後再dither成8bit RGB32進行輸出,所以它才能實現最高精度的轉換和最小的error。
而且最近還有這麼一篇文章,對不同位深的YUV空間的色彩數量進行分析,發現8bitYUV轉換成RGB後遠遠到達不了8bit RGB的16777216色(目前大部分高清視頻就是屬於8bit-Rec709的情況),只有用10bit及以上精度YUV轉換為8bit RGB才能達到16.7M色:http://goldenhige.cocolog-nifty.com/blog/2012/01/rgb2416777216yu.html
另外也可參考這裏taro大所說的:http://tieba.baidu.com/p/1356709843?pn=2
三、對比測試
我對10bit與8bit編碼的客觀測試結果,橫軸為碼率,豎軸為1/(1-SSIM),SSIM(結構相似度)是一種衡量兩畫面間相似度的演算法(在這裏是編碼後的視頻和源視頻的比較)。另外我這裏出於個人需求順便對mbtree的情況做了測試,對此不感興趣的可以無視。
上圖以Clannad ASEP01的3654-17653幀(正片的大約前一半,不含OP)為測試片段,代表典型動畫的情況。下圖以The DarkKnight的1273-9327幀為測試片段,代表電影的情況,而且是全部IMAX的片段,噪點也比較少,可以看作高畫質片源。 http://i.imgur.com/4XbwH.pnghttp://i.imgur.com/OmHJR.png上圖中可以看到同樣達到200的1/(1-SSIM)時,8bit需要4500kbps,而10bit只需要1200kbps,這樣的優勢我覺得不需要多說什麼了。根據我的經驗,10bit對於gradient(梯度變化)的畫面(特別像是暗場之類的)優勢特別明顯,客觀上SSIM值很高,主觀上基本不會產生banding(色彩過渡區域的色帶)。當然我也遇到了個別奇葩片源比如龍珠Z的BD-BOX,非常強的動態噪點,crf=20跑出來了25Mbps的碼率,而且這時10bit和8bit重編碼的差距基本可以忽略。
四、播放相關
我更新這篇文章時(2012.1.18)所使用的軟體及版本:Media Player Classic HomeCinema (x86), 1.5.3.3971,BE Modffdshow tryouts project, svn 4257 (x86) -MSVC2010LAV Filters 0.44madVR 0.80Haali Media Splitter v1.11.288.0Reclock 1.8.7.7
下面我以基於MPC-HC的播放設置為例,其他播放器的做法也類似。
播放推薦使用的軟體/濾鏡:
1.(推薦)MPC-HC播放器下載地址:http://www.xvidvideo.ru/media-player-classic-home-cinema-x86-x64/下載x86版本,推薦MSVC2010編譯版
2.(可選但推薦)LAV Filters——分離器/音視頻解碼器下載位址:http://forum.doom9.org/showthread.php?t=156191下載“Installer(both x86/x64)”,也就是安裝版,使用最方便安裝時注意勾選FLAC的分離、解碼支持
3.(推薦)madVR渲染器下載地址:http://forum.doom9.org/showthread.php?t=146228下載以後解壓出來的madVR檔夾放在純英文目錄中,然後雙擊裏面的install.bat即可註冊好,注意保留這個檔夾。
4.(可選)Haali分離器下載位址:http://customers.corecodec.com/downloads.phpmkv還是更推薦使用Haali Media Splitter作為分離器,因為它能支持檔間的Link,比如一些把OP、ED切到外面去的壓制,然後播放正片時會自動根據UID在指定的章節連接到那些檔。如果不需要這個功能的話,LAVSplitter就夠用了。但是Haali有個霸道的設定,改變了H.264的MediaType,導致一些解碼器無法正常調用(我這裏用到的LAV和ffdshow沒有問題),所以如果需要用到其他一些解碼器的話在Haali的設置裏將Output——Use custom media type for H.264設為No
5.(可選)ffdshow tryout解碼器組件下載位址:http://www.xvidvideo.ru/ffdshow-tryouts-project-x86-x64/下載x86版本
6.(可選)Reclock下載地址:http://forum.slysoft.com/forumdisplay.php?f=85我主要是用到了它的WASAPI獨佔輸出,可以實現音頻解碼後的PCM信號bit exact輸出至音頻設備(不受作業系統的混音、重採樣影響)。
7.(可選)xy-VSFilter下載地址http://code.google.com/p/xy-vsfilter/downloads/list一個國人基於VSFilter2.39進行優化修改後的VSFilter,對於ASS字幕播放的效率大大提高,也能支援10bit/16bit的輸入/輸出,自動根據解析度判斷BT.601/BT.709進行RGB轉換……
備註:現在LAV Filters、madVR、xy-VSFilter間正在研究新的濾鏡間的通信方式,比如最近LAV和madVR同時放出測試版,前者支持DXVA2硬解碼(僅用於Win 7/Vista),並且想辦法將硬解後的視頻從顯存中抓回來以NV12輸出(以前硬解後的視頻就直接交由顯卡處理後輸出至顯示器,所以存在各種限制),然後可以輸入ffdshow做後處理、VSFilter渲染字幕,並可以用madVR來渲染……而xy-VSFilter和madVR也在研究新的字幕的傳遞、渲染方式。目前無論是VSFilter將字幕渲染在解碼器輸出的視頻流後再給渲染器處理(Resize、RGB Conversion)的方式,還是MPC-HC內置字幕引擎將字幕渲染在渲染器層(已經過RGB轉換、resize和加黑邊)的方式,都存在其固有的弊端,今天ANE也有篇新文章講到了這個問題:http://afternoonnapsempire.org/subtitle-renderer-matters/
五、播放設置圖文教程
要強調一點以避免人誤會,以下的播放設置是全方面播放設置的教程,也是我自己使用的方案,但只有一部分是關於10bit的(實際上對8bit也一樣,這樣做是最有利於重播效果的)。所以如果只是為了完美重播8bit/10bitH.264視頻,只要安裝並在渲染器裏選擇madVR就可以了,可以參考VX的播放攻略:http://www.vempx.net/article/552.htm
1.字幕設置 http://i.imgur.com/cXga7.pnghttp://i.imgur.com/WCpH3.pnghttp://i.imgur.com/685fT.png
2.濾鏡調用設置 http://i.imgur.com/i9wT7.pnghttp://i.imgur.com/ovuOg.pnghttp://i.imgur.com/yYshZ.png
3.濾鏡內的設置 http://i.imgur.com/KCPrJ.pnghttp://i.imgur.com/IsnaR.pnghttp://i.imgur.com/DT5bE.pnghttp://i.imgur.com/DQYju.pnghttp://i.imgur.com/IHRJR.pnghttp://i.imgur.com/dzznq.pnghttp://i.imgur.com/bMQ1t.pnghttp://i.imgur.com/kholS.pnghttp://i.imgur.com/43emN.png
4.渲染器設置 http://i.imgur.com/xPJYE.pnghttp://i.imgur.com/H31oo.pnghttp://i.imgur.com/VLxUr.pnghttp://i.imgur.com/Fs4wd.pnghttp://i.imgur.com/joEUD.pnghttp://i.imgur.com/DsYqK.pnghttp://i.imgur.com/2b5w5.png
另外補充一點,Reclock本身是開發出來用於音視頻同步、PAL降速等工作的,所以其工作與頻率密切相關,如果你的CPU超頻或降頻了很可能會出現播放速度上的問題,這時你只能不用Reclock或者恢復默認頻率。
5.播放時的音視頻流切換http://i.imgur.com/zu6x5.jpghttp://i.imgur.com/xctrg.jpg 這些東西不如自己體會之後重新自己寫教學 既不需要轉貼 又可以學習到更多
這樣更有意義 10bit在"動漫界" 已經開始流傳了.各家字幕組作品都一定帶有10bit的
给力,超级给力~~ 泡在這篇文章裡好久了....
努力學習中!!!
10bit暂时还不支持硬解,对于旧电脑播放1080p高码率版可能比较吃力。 先標記一下,改天有空好好學習研究一下
順便通知一下LAV Filters 0.44長大了一點點
升到了LAV Filters 0.45 给力~
受教了
看来要好好的看完
頁:
[1]