基于MPC-HC的10bit播放全攻略 v1.1

目前10bit风头正劲,包括我在内的我周围的好多朋友已经全面转向了10bit压制制程,而且这个季度的新番,也有一些字幕组开始尝试10bit压制。技术总是要向前发展的,正如我们开始大刀阔斧地淘汰rmvb一样,10bit这种新技术也到了开始普及的阶段。普及10bit的理由?码率更低,画质更好,足够具有说服力了。不过很多人可能对10bit的解码播放感到很棘手,问我如何搞定10bit的朋友就已经不下4个了,每次都要把同样的话重复说一遍实在是浪费的一种体现。于是写个文,一可以直接发给搞不定10bit播放的人,二可以当个备忘,一举两得。
(向对本文撰写提供测试帮助的304童鞋表达感谢)
本文谢绝转载,如果有疏漏之处,欢迎留言。

最近来留言提问的朋友越来越多,非常感谢大家捧场。不过现在已经多到我有点处理不过来的地步了,而且WP的留言嵌套回复功能好是好,但是套的一多就容易乱,弄的我经常漏看评论。为了能给大家更好的解决问题,关于播放的提问请到NMM论坛回帖提问,这里的评论关闭,谢谢~

Changelog:

v1.1:
修改NORMAL END部分设置,减小资源消耗,支持外挂字幕(ssnake)

v1.0:
本文诞生

继续阅读基于MPC-HC的10bit播放全攻略 v1.1

[补充]渲染器品质测试

之前的测试,被aki指出并不是很精确(aki联动帖),所以重新制作了一个测试用的图片。虽然不能100%还原实际观看视频时的情况,但是还是希望这个测试得到的结果能更加精确一些。

Source测试用原图

重新制作的图片包含了4个部分。最上方是黑色、红色、绿色、蓝色分别到白色的渐变。为了测试的精确,每个渐变的宽度为256px,正好是0-255阶。
第二部分为AVS生成的color_bar。
第三部分为我制作的随机颜色彩色条纹。每个条纹的宽度越往右越窄,最右边的条纹宽度为1px。
最后一部分则是普通的文字。

ImageSource(“Color_Test.bmp”,end=59)
Assumefps(“ntsc_video”)
ConverttoYV12(matrix=”rec601″)

EVR Haali
EVR                                                                 Haali

madVR VMR9
madVR                                                              VMR9

ffdshow
补充一张ffdshow的高品质RGB32输出

图片可点击放大进行肉眼判断。
输出图已经交给aki,等待他的数学计算结果。

常用渲染器品质测试

今天闲来无事,决定对常见的渲染器进行一下品质的测试。

测试前先稍微讲一下影响渲染器品质的几个主要因素。
1、Resize算法
2、Upchroma算法
我的测试并没有涉及到Resize之后的品质,所以第一条就略过不谈了,我们重点来说第二条。

众所周知,视频文件并非使用RGB,而是YUV。在YUV当中,使用的最多的则是YV12,也就是YUV4:2:0。对于YV12来说,它的亮度分辨率为1,色度分辨率为1/2。举例来说,对于一个720P的视频,它的亮度分辨率是1280×720,但是色度分辨率仅为640×360。这也就是为什么把一个RGB转到YV12之后,体积会变小的原因。再往深里说,为什么YV12要抛弃一半的色度数据而保留全部的亮度数据呢?这是由于人眼的特性是对亮度敏感,对色度不敏感而决定的。那么再顺便说个题外话,从RGB转到YUV,是要经过一系列计算的,那么这个计算的方式,也就是算法的不同,会导致结果的不同。我们常说的BT.601、BT.709等等指的就是RGB <-> YUV转换时不同的算法。在国际标准中,对于SD以及SD以下的视频,是使用601,而HD以及更高分辨率则使用709。换句话说,DVD应该用601,720和1080应该用709。

扯的有点远了,回到主题上来。由于YV12的色度分辨率仅有1/2,所以在播放的时候,需要把这1/2变成1才行。那么这个从1/2变到1的过程就是“无中生有”了。这个“无中生有”指的就是第二条Upchroma算法,这个算法在很大程度上影响了视频的播放质量。

那么测试开始
系统:Win7 Pro x64
显卡:GeForce 9800GT
播放器:MPC-HC 1.3.1337.0
解码器:ffdshow
色彩输入:YV12
色彩输出:YV12

我们首先需要一个用来测试的原始视频。我拜托风儿做了一个分辨率是1280×720的测试用图片,然后将这个图片作为原始素材导入AVS生成了一段测试用视频。

COLOR 原始图片 点击放大

ImageSource(“COLOR.bmp”,end=59)
Assumefps(“ntsc_video”)
ConverttoYV12(matrix=”rec709″)

以上内容为AVS脚本。
大概内容是,将Color.bmp文件作为图像,生成60帧。然后将帧率指定为NTSC制式的标准video帧率,也就是29.97,最后将RGB转换到YV12,使用709并将色彩范围压缩到16-235。
之后我使用VDM打开这个AVS脚本,把原始的YV12视频流直接保存出来,没有经过任何压缩。这样我们就得到了一个内容是YV12的测试用视频,接下来就要用这个视频来看各个渲染器的效果了。

VMR9 VMR9

EVREVR

Haali Haali

madVRmadVR

通过观察可以发现,在灰阶显示效果上,madVR以绝对的优势胜过其他的渲染器,Haali的表现也强于VMR和EVR。madVR的SoftCubic100带来的效果真不是盖的,难怪madshi一直在讲,madVR使用了效果最牛X的Upchroma算法。不过在彩色过度上,我的眼睛还真没看出什么太大的差别来……囧
排名的话,madVR > Haali > EVR ≈ VMR

madVR的确给了我们无与伦比的回放品质,但是正如我前面文章中讲过的一样,madVR的缺点也同样明显。在提供了高品质的同时,它无法给我们带来便利的功能。而且它对显卡性能要求也很高。是否要坚持使用madVR,还要各位自己决定了。

NV控制面板的颜色范围测试(啊啊啊我快疯了!)

image

这个这个这个就是这个东西!这个东西到底是怎么起作用的我完全搞不清楚啦!总之我进行了一系列的测试!

上面的单选,默认是选择的第一个,就是[通过视频播放器设置],选这个的时候下面的一切都是不可调整的,这样就看视频播放器那边要怎么办了。如果选了[通过NVIDIA设置],则下面的选项变成可选状态,视频将通过这里进行颜色等等的调整。

然而!对于不同的渲染器,结果会是什么样子呢!

进行测试的渲染器有两个,一个是VMR9,一个是EVR。然后根据我前文的理论,VMR9在XP下测试,EVR在Win7下测试。测试的标准,是我的眼睛,有异议的先闭嘴 XD

好吧现在开始,先进行VMR9的测试。测试播放器一律使用MPC-HC

VMR9 无渲染:
选择[通过视频播放器设置],画面颜色为[16-235]
选择[通过NVIDIA设置],下面的[动态范围]调节有效,调整到[完全 (0-255)]可以得到正确颜色

EVR:
选择[通过视频播放器设置],画面颜色为[0-255]
选择[通过NVIDIA设置],下面的[动态范围]调节有效,调整到[完全 (0-255)]可以得到正确颜色

结论:
在XP的VMR9下,这个渲染器自己是不会干把颜色扩张到0-255这个活的,要让它有正确颜色有两种方法。1是控制面板里这么调,2是用MPC的shader功能。
在Win7的EVR下,EVR是会自动进行颜色扩张的,当然你也可以通过NV的控制面板这样指定得到正确的颜色。

记得之前和茉莉曾经讨论过TMT是用的什么渲染器,我当时的意见是,因为NV控制面板里的这个选项对TMT的画面造成了影响,所以TMT用的应该是Overlay,而且TMT不能直接被QQ截图。但是现在看来这个观点可能有点站不住脚了,NV控制面板里的这个选项对VMR9和EVR同样会有效果(Overlay是必然有效果的,Haali和MadVR我没有测试,不过应该是无效),我太lag了,才发现这个……

所以说,如果打算用微软提供的VMR9或者EVR,我个人还是推荐把NV驱动面板这里调节到完全。

madVR很强大,最近又纠结Resizer了……

之前纠结渲染器,最后我自己得出的结论是在XP下还是老老实实的用VMR9。

用VMR9的时候,推荐的Resizer设置是3D表面 Bicubic 0.6,但是我是对这个东西越来越看不顺眼。

具体原因很简单,Resize之后的品质差,线条纵向有明显的类似锯齿状竖纹

上图!

原画面为704×480的DVDRip,我自己压的,用了AR,然后截图是全屏播放模式下截取下来的。

1_VMR_Custom_Bicubic_0.6 2_EVR_Custom_Bicubic_0.6 3_madVR_SoftCubic50 4_madVR_Lanczos3

四个图依次是:VMR Bicubic , EVR Bicubic , madVR SoftCubic50 , madVR Lanczos3,点击可以放大哦~

我自己的肉眼对比结果,Bicubic可以去死了,画面模糊,线条锯齿,总之就是各种不能行。SoftCubic50倒是没有锯齿了,不过相比Lanczos3来说,比较模糊一点,不过好处就是没有Lanczos3那么明显的亮边。无论怎么看,都是Bicubic完败了。

之前aki也在群里说了,Resizer领域,Lanczos3已经是一锤定音的最强了,嗯嗯。

再来说说这个madVR,根据madshi自己的说法,这东西是为了追求品质的极限而不去考虑速度的渲染器,所以叫madVR嘛,很mad哦。号称使用了最强的Chroma Upsampling算法,提供最牛X的品质。还内置了很多其他的scaling算法,可以根据自己的需要选择。

试用了之后,品质确实赞的没话说,不过也有一些问题。在我这里DVD是无法正常播放的,而且DXVA肯定无法使用,madshi也说了,DXVA在将来也不会支持。然后就是这个渲染器只吃YV12的数据,所以在ffdshow里开了硬件Deinterlacer便无法使用madVR,因为开了那个的话,ffdshow的YV12输出就不能用咯~

还有一个问题,就是在播放器里自定义了madVR的Scaling算法后,再次打开播放器的时候,这些算法都会回到默认状态,让我很是头大了一阵。最后只能跑到doom9上用我蹩脚的英语询问了一下,得到的回复是这是一个已知的bug,需要等待madshi来修复了。

总之,如果喜欢全屏看片,然后又对品质有要求的人,可以考虑使用madVR哦~