馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。
您需要 登錄 才可以下載或查看,沒有賬號?註冊
x
本文章最後由 pureland 於 2012-1-20 14:26 編輯
全文來自NMM的mawen1250大大,已獲得同意轉載!!
測試用視頻:
一、前言
10bit視頻的播放,想偷懶的人可以直接用最新版MPC-HC、Potplayer、mplayer、QQ影音等播放器,或者使用各種解碼包的最新版(都是使用ffdshow/LAV實現解碼的),其內部解碼器都是基於ffmpeg(libav)的。這些播放器和解碼器中用的色彩轉換也基本都是libswscale,所以有部分會出現色彩空間轉換上的錯誤以及dither方式的不恰當。並且由於10bit YUV到8bit YUV再到8bit RGB的坑爹轉換過程使損失也大大增加(前一步對於10bit而言還有dither的過程,可以增加一定的精度,8bit視頻播放就是做了後面的一步,所以即使這樣10bit的效果也還是比8bit重編碼的情況好不少)。
關於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。
三、對比測試
我對10bit與8bit編碼的客觀測試結果,橫軸為碼率,豎軸為1/(1-SSIM),SSIM(結構相似度)是一種衡量兩畫面間相似度的演算法(在這裏是編碼後的視頻和源視頻的比較)。另外我這裏出於個人需求順便對mbtree的情況做了測試,對此不感興趣的可以無視。
上圖以Clannad ASEP01的3654-17653幀(正片的大約前一半,不含OP)為測試片段,代表典型動畫的情況。 下圖以The DarkKnight的1273-9327幀為測試片段,代表電影的情況,而且是全部IMAX的片段,噪點也比較少,可以看作高畫質片源。 上圖中可以看到同樣達到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 Mod ffdshow tryouts project, svn 4257 (x86) -MSVC2010 LAV Filters 0.44 madVR 0.80 Haali Media Splitter v1.11.288.0 Reclock 1.8.7.7
下面我以基於MPC-HC的播放設置為例,其他播放器的做法也類似。
播放推薦使用的軟體/濾鏡:
1.(推薦)MPC-HC播放器下載地址: 下載x86版本,推薦MSVC2010編譯版
2.(可選但推薦)LAV Filters——分離器/音視頻解碼器下載位址: 下載“Installer(both x86/x64)”,也就是安裝版,使用最方便 安裝時注意勾選FLAC的分離、解碼支持
3.(推薦)madVR渲染器下載地址: 下載以後解壓出來的madVR檔夾放在純英文目錄中,然後雙擊裏面的install.bat即可註冊好,注意保留這個檔夾。
4.(可選)Haali分離器下載位址: mkv還是更推薦使用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解碼器組件下載位址: 下載x86版本
6.(可選)Reclock下載地址: 我主要是用到了它的WASAPI獨佔輸出,可以實現音頻解碼後的PCM信號bit exact輸出至音頻設備(不受作業系統的混音、重採樣影響)。
7.(可選)xy-VSFilter下載地址 一個國人基於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來渲染……
五、播放設置圖文教程
要強調一點以避免人誤會,以下的播放設置是全方面播放設置的教程,也是我自己使用的方案,但只有一部分是關於10bit的(實際上對8bit也一樣,這樣做是最有利於重播效果的)。
1.字幕設置
2.濾鏡調用設置
3.濾鏡內的設置
4.渲染器設置
另外補充一點,Reclock本身是開發出來用於音視頻同步、PAL降速等工作的,所以其工作與頻率密切相關,如果你的CPU超頻或降頻了很可能會出現播放速度上的問題,這時你只能不用Reclock或者恢復默認頻率。
5.播放時的音視頻流切換 |