搜索 社区服务 统计排行 帮助
  • 29476阅读
  • 63回复

【原创】10bit视频编码——特性及全面播放方法介绍(2012.1.18更新)

楼层直达
级别: 小荷初露
注册时间:
2011-08-01
在线时间:
13小时
发帖:
50
测试用视频:
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源数据:  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重编码的差距基本可以忽略。



四、播放相关


我更新这篇文章时(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播放器下载地址:
http://www.xvidvideo.ru/media-player-classic-home-cinema-x86-x64/

http://xhmikosr.1f0.de/index.php?folder=bXBjLWhj
下载x86版本

2.(可选但推荐)LAV Filters——分离器/音视频解码器下载地址:
http://forum.doom9.org/showthread.php?t=156191

http://xhmikosr.1f0.de/index.php?folder=bGF2ZmlsdGVycw
下载“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.php

http://www.free-codecs.com/haali_matroska_splitter_download.htm
mkv还是更推荐使用Haali Media Splitter作为分离器,因为它能支持文件间的Link,比如一些把OP、ED切到外面去的压制,然后播放正片时会自动根据UID在指定的章节连接到那些文件。
如果不需要这个功能的话,LAV Splitter就够用了。
但是Haali有个霸道的设定,改变了H.264的MediaType,导致一些解码器无法正常调用(我这里用到的LAV和ffdshow没有问题),所以如果需要用到其他一些解码器的话在Haali的设置里将Output——Use custom media type for H.264设为No。

另外现在也有个AV Splitter,支持更多自定义的高级功能,喜欢折腾的可以尝试。

5.(可选)ffdshow tryout解码器组件下载地址:
http://www.xvidvideo.ru/ffdshow-tryouts-project-x86-x64/

http://xhmikosr.1f0.de/index.php?folder=ZmZkc2hvdw
下载x86版本,Intel的CPU可以选icl12编译版,MSVC2010编译版通用。

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
一个国人基于VSFilter 2.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/10bit H.264视频,只要安装并在渲染器里选择madVR就可以了,可以参考VX的播放攻略:http://www.vempx.net/article/552.htm

1.字幕设置




2.滤镜调用设置




3.滤镜内的设置










4.渲染器设置







另外补充一点,Reclock本身是开发出来用于音视频同步、PAL降速等工作的,所以其工作与频率密切相关,如果你的CPU超频或降频了很可能会出现播放速度上的问题,这时你只能不用Reclock或者恢复默认频率。

5.播放时的音视频流切换




[ 此帖被mawen1250在2012-01-23 14:26重新编辑 ]
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 1楼 发表于: 2011-08-16
动画这么高的码率有意义吗?不如去下remux。
级别: 小荷初露
注册时间:
2011-08-01
在线时间:
13小时
发帖:
50
只看该作者 2楼 发表于: 2011-08-16
本来就是测试视频,时间也短,码率有这么多其实挺正常的(和Salender-raws相比),动画本来就不好压,码率在画面的分配是难点。
不过我现在又压了一遍,用了1st pass CRF=12,现在2nd pass时Clannad NCOP有13Mbps,NCED有19Mbps。
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 3楼 发表于: 2011-08-16
动画还不好压?动画比真人好压多了,人家几百k的1080p rip都有。
另外没有和8bit对比的话看不出优势来的啊。

建议去掉qpmax=28
级别: 风云使者
注册时间:
2009-03-17
在线时间:
552小时
发帖:
1255
只看该作者 4楼 发表于: 2011-08-16
回 3楼(roozhou) 的帖子
roozhou 何必认真,每个人对RIP理解以及理念不同

10bit码率开那么高不用去和8bit比了,没有意义了,10bit的初衷在于保证质的情况下更大程度上减少量
级别: 骑士
注册时间:
2008-10-06
在线时间:
115小时
发帖:
319
只看该作者 5楼 发表于: 2011-08-17
qpmax=28必去啊……

10bit的qp值和8bit下大不一樣,譬如在8bit下crf 23出來時qp值為28的幀可能在10bit下crf 23下qp值是三四十,仍然設定qpmax=28的話碼率飄得會很離譜的……

話說Hi10還ref=16,全世界沒米級配置PC的窮人們都清靜了……

Follow me: @06_taro

MediaFire links to:
Taro's tools (avs plugins & other useful tools' builds)
Taro's x264 builds (Latest build: x264 core:129 r2245+704_tMod (&tMod+10bit/MixAQ/OreAQ), Win & MacOS, built on 10 Jan 2012, gcc: 4.7.2)

nmm牆內鏡像(部分工具)
级别: 小荷初露
注册时间:
2011-08-01
在线时间:
13小时
发帖:
50
只看该作者 6楼 发表于: 2011-08-17
回 5楼(06_taro) 的帖子
这样啊,学习了。
想知道10bit下qpmin和qpmax设为多少配合CRF16比较合适?
我现在也就压这种很短的东西,配置也好不到哪里去,HTPC用的AMD X4 640,笔记本i3 370M
解码这种还是很轻松的,四核占用率30-50%,相当于BD-REMUX的水平。倒是ASS字幕加上各种move效果后卡啊……

级别: 新手上路
注册时间:
2010-06-20
在线时间:
9小时
发帖:
49
只看该作者 7楼 发表于: 2011-08-17
純小白一隻。

@mawen1250 既然10bit可以提升壓縮率+防Banding,那為何還要用高碼去壓呢?高碼的話8bit也可以。可以的話順便壓個同參數的8bit出來,這樣也好對比。然後qpmin和qpmax我個人是推薦默認的,手動設置的話飆碼還不容易對比。

@06_taro 朋友壓Hi10(1080p)用--preset placebo,世界更清靜。。。

DT...
级别: 骑士
注册时间:
2008-10-06
在线时间:
115小时
发帖:
319
只看该作者 8楼 发表于: 2011-08-17
回 6楼(mawen1250) 的帖子
Hi10的壓制經驗不足,直接留空不設好了,反正x264自己的rc很靠譜的……

其實我個人壓8bit時只有在確定不設置qpmax時出來的單幀qp最高不超過28才會去加--qpmax 28,所以一般這參數根本不是拿來限制x264的,而是給其他喜歡蛋疼看參數的人圍觀用的……

如果還是想知道x264給每幀分配的qp值的話,開--verbose,然後2>>"sample.log"輸出編碼記錄,或者在我的編譯版裡用--log-file "sample.log" --log-file-level debug來看……

Follow me: @06_taro

MediaFire links to:
Taro's tools (avs plugins & other useful tools' builds)
Taro's x264 builds (Latest build: x264 core:129 r2245+704_tMod (&tMod+10bit/MixAQ/OreAQ), Win & MacOS, built on 10 Jan 2012, gcc: 4.7.2)

nmm牆內鏡像(部分工具)
级别: 风云使者
注册时间:
2004-01-20
在线时间:
633小时
发帖:
549
只看该作者 9楼 发表于: 2011-08-18
记得去年10月x264刚刚支持10bit编码时,d9上有篇帖子说10bit下qp大致相当于8bit下qp+12的


引用
引用第8楼06_taro于2011-08-17 16:33发表的 回 6楼(mawen1250) 的帖子 :
Hi10的壓制經驗不足,直接留空不設好了,反正x264自己的rc很靠譜的……

其實我個人壓8bit時只有在確定不設置qpmax時出來的單幀qp最高不超過28才會去加--qpmax 28,所以一般這參數根本不是拿來限制x264的,而是給其他喜歡蛋疼看參數的人圍觀用的……

如果還是想知道x264給每幀分配的qp值的話,開--verbose,然後2>>"sample.log"輸出編碼記錄,或者在我的編譯版裡用--log-file "sample.log" --log-file-level debug來看……

qpmax不仅仅限制单帧,如果AQ开着的其实限制的是MacroBlock的量化值(所以qpmin由10改成0了),这个用x264 verbose应该也看不出来吧...

求资源,欢迎PM告知:
Xbox360 Clannad OP原版(WMV格式)
PS3 圣恩传说F / Tales of Graces F OP原版(BIK格式)


CLANNAD游戏OP/ED + TOMOYO after OP 无二次Credits内嵌字幕清晰版
BiliBili站点     AcFun站点

--- Direct264 自编译版 ---

碧之轨迹Nightmare VS风之剑圣 第1战(均无水印):6cn(六间房)   56(我乐)
BGM: Inevitable Struggle (Super Arrange Ver.)

Rockman 9 Rock Medley
级别: 骑士
注册时间:
2008-10-06
在线时间:
115小时
发帖:
319
只看该作者 10楼 发表于: 2011-08-19
mb的qp拿h264visa去研究吧= =

Follow me: @06_taro

MediaFire links to:
Taro's tools (avs plugins & other useful tools' builds)
Taro's x264 builds (Latest build: x264 core:129 r2245+704_tMod (&tMod+10bit/MixAQ/OreAQ), Win & MacOS, built on 10 Jan 2012, gcc: 4.7.2)

nmm牆內鏡像(部分工具)
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 11楼 发表于: 2011-08-24
配上各种超级无敌慢的极限参数,再配上巨高的码率,分别用了10小时,压出了这么2段1分31秒的视频。视频码率降为原盘的大约一半
=================
笑而不语

级别: 小荷初露
注册时间:
2011-08-01
在线时间:
13小时
发帖:
50
只看该作者 12楼 发表于: 2011-08-27
8月27日已蛋疼更新大量内容……这次码率没那么高了,1st pass主要用CRF16和14
级别: 新手上路
注册时间:
2010-06-20
在线时间:
9小时
发帖:
49
只看该作者 13楼 发表于: 2011-08-27
回 12楼(mawen1250) 的帖子
以前拿過某個OP特效ASS字幕,36MB而已。

DT...
级别: 小荷初露
注册时间:
2011-08-01
在线时间:
13小时
发帖:
50
只看该作者 14楼 发表于: 2011-08-27
回 13楼(nuomi1) 的帖子
很想知道是什么
快速回复

限150 字节
上一个 下一个