基于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

太悲剧了,今天才刚刚发现MPC-HC支持WASAPI音频输出

啊啊啊,我太悲剧了!用了这么久居然没发现有这个功能!

MPC-HC设置中输出项里,右下的DirectShow音频里选择MPC Audio Renderer,这样MPC就会使用WASAPI独占输出了。这样就避免了Win7那个共享模式采样率带来的重采样问题了呀!

而且我更加悲剧的发现,从r1297开始就添加了这个功能了。我靠我究竟是在干什么啊,这么久都没注意到。

T T

常用渲染器品质测试

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

测试前先稍微讲一下影响渲染器品质的几个主要因素。
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,还要各位自己决定了。

高品质渲染器madVR更新至v0.11

好久没有关注madVR这个东西了,刚刚才发现发布了0.11版本。

madVR v0.11

* 修复: 亮度重采样设置无法正确的读取/保存
* 修复: 在某些电脑上开始播放视频前会停滞若干秒
* 升级 cr3dlut 至 v2.2

从0.11的changelog中可以发现,那个无法保存Resample算法的该死bug终于被修复了。

接下来我稍微对0.11进行了一下简单的测试,使用的视频源都是我自己的Rip,以下为简单的测试结果。

系统:Win7 Pro x64
播放器:MPC-HC 1.3.1335.0
显卡:GeForce 9800GT

1、Resample算法无法保存的Bug确实被修复了
2、播放DVD会出现「Query unknown PropSet」的错误提示,但是可以继续播放下去,菜单可选
3、interlaced视频无法启用硬件Deinterlacer
4、MPC-HC内建字幕引擎不起作用,需要使用VobSub或者ffdshow来挂载字幕

目前测试的结果就这样。就品质来说madVR仍旧在我用过的渲染器中排第一,但是说到兼容性和功能,就不那么乐观了。对于希望搭建HTPC平台的朋友,这个渲染器不会是一个明智的选择。首先它对显卡的要求很高,其次它现在不支持并且将来也不会支持DXVA硬解,最后他也当然不支持显卡对视频的硬件处理效果(比如nVidia的PureVideo Deinterlacer)。

对于那些不追求功能只要求品质的发烧友来说,madVR还是可以尝试一下的。

关于上一篇文中MPC的设置问题

在我的《纯手工搭建基于MPC-HC的简易播放平台》一文中,我推荐大家勾上mpc设置中的[在.ini中保存设置],这样重装系统也能保留设置。

但是,这会带来一个问题,而且这个问题困扰了我很久……囧。

症状表现:在任务管理器中可以看到mpc进程,关闭mpc程序,可是mpc进程要过好几秒之后才会消失。

原因:NOD32对ini文件进行了高启扫描,导致mpc关闭很慢。

所以:使用NOD32的同学,请在NOD32的[高级设置]->[排除]中把mpc的.ini文件添加进去,就可以解决这个问题了。

纯手工搭建基于MPC-HC的简易播放平台

现在有很多解码用的Package,比如完美解码。这种Package对于懒人真的是很方便,装一个基本上就万事无忧了。不过有些情况下我们需要自己手动搭建而不是使用这种Package,比如压制人员。

很多朋友曾经问过我,如果要手动搭建该怎么做。说实话,现在的几款主流播放器,自己都内置了很多滤镜,基本做到了不需要安装任何解码器就能通吃所有格式了。不过这篇文并非完全使用MPC-HC的内部滤镜,而是和安装第三方系统滤镜相结合。

本文仅针对需要手动搭建播放平台的解码用户,不考虑编码情况。

 

准备工作

主播放器:

Media Player Classic – Homecinema 1.3.1249
http://mpc-hc.sourceforge.net

视频滤镜:

Haali Media Splitter 1.9.42.1
http://www.free-codecs.com/download/Haali_Matroska_Splitter.htm
FFDShow
http://sourceforge.net/projects/ffdshow-tryout/files/
Real Alternative 1.90 Lite
http://www.free-codecs.com/download/Real_Alternative.htm

音频滤镜:

AC3Filter 1.63b
http://www.free-codecs.com/download/AC3_Filter.htm
CoreAAC 1.2.0.575 rev.3
http://www.free-codecs.com/download/CoreAAC_Directshow_filter.htm
CoreFLAC 0.4
http://www.free-codecs.com/download/CoreFLAC_Decoder_Encoder.htm
CoreVorbis 1.1.0.79
http://www.free-codecs.com/download/CoreVorbis.htm

其他工具:

AVISynth 2.5.8
http://www.free-codecs.com/download/AviSynth.htm
DirectVobSub(VSFilter)2.39
http://www.codecs.com/download/DirectVobSub.htm

 

方案

[分离器]:使用Haali分离MP4 MKV OGM,使用系统分离器分离MPG AVI。
[解码器]:软解 视频编码主要依靠ffdshow进行解码。硬解 H264 VC-1使用MPC-HC内置DXVA解码器。

 

安装

*首先确保系统内比较干净,如果装了其他Package和解码器请先全部卸载。没有特别说明均安装在默认路径。

1、安装AVISynth 2.5.8,一路Next即可。

2、安装Haali Media Splitter。设置如下图。(*1)

haali

3、安装FFDShow。设置如下图。一路下一步。

ffdshow

4、安装Real Alternative 1.90 Lite,一路Next即可。

5、安装上述所有音频滤镜和VobSub,均为一路Next。

6、安装MPC-HC(压缩版请解压),由于MPC-HC本身算是绿色软件,所以可以放到其他位置。

 

设置

1、配置MPC。
运行mpc-hc,选择菜单的View –> Language –> Chinese (simplified)把界面语言调节到简体中文
视图菜单 –> 选项
[播放器]:勾上右侧的在.ini中保存设置,这样所有的设置会保存在ini里,就算重装系统也不会丢失。
[格式]:单击右下方的Video按钮,关联所有视频文件。
[播放]:勾上自动装载字幕。
[输出]:DirectShow视频,XP/2003用户请选择VMR9(未渲染),Vista/Win7用户请选择EVR自定义设置。RealMedia视频和QuickTime视频都选择DirectX 9。VMR7/9(未渲染)与EVR CP设置中,表面选择3D surfaces,重设尺寸选择Bicubic A=-0.60 (PS 2.0)。
[内部滤镜]:源滤镜里只选择DVD Video Title Set与MPEG PS/TS/PVA。转换滤镜中选择LPCM。(*2)
[字幕]:要缓冲的子图像数量输入0,最大纹理分辨率选择Desktop。
[默认风格]:相对于视频帧的字幕位置前面打成对勾。
确定之后重启MPC,右键单击主界面,在右键菜单里选择渲染器设置 –> 重置 –> 优化值。Vista/Win7用户还需要去掉 渲染器设置 –> 展示 –> 禁止桌面混合 前的勾,否则播放视频的时候会关闭Aero效果。
右键菜单 –> 着色器 –> YV12 Chroma Upsampling,如果选项是灰色的话,就在播放视频的时候设置。

2、配置FFDShow
找到开始菜单内的FFDShow组,打开ffdshow 视频解码器设置。
[编码解码器]:这里面是选择让ffshow解码什么格式的地方。绝大部分保持默认即可,需要调整的如下。H.264/AVC用ffmpeg-mt,MPEG1和MPEG2用libmpeg2,MPEG2把下方的DVD解码勾上。WMV 1/7 2/8 3/9 VC-1都用wmv。
[DirectShow控制]:右面总共有三个勾,都勾上。(*3)
[输出]:勾上NV12。勾上HW反交错。(*4)
打开开始菜单内的ffdshow 音频解码器设置。
[编码解码器]:这里除了AVIS用AviSynth之外,其他通通选择未启用,我们不用ffdshow来做音频解码。

3、配置AC3Filter
在开始菜单内找到AC3Filter组,打开AC3Filter Config,会出现一个Warning,确定即可。
[System标签]:左侧只勾AC3 DTS DVD。

 

到此为止,基本上大功告成。以上只是软解方案,如果想使用硬解的话,就把ffdshow里的H264与VC1设置为未启用,然后打开MPC-HC内部的这两个滤镜DXVA版即可。

本文只是起一个抛砖引玉的作用,并不是说按照本文设置之后就能够顺利的播放所有格式。比如蓝光Remux中可能有EAC3或者TrueHD音轨,按照本文的设置,是无法播放这些次世代高清音频格式的。本文的主要目的是告诉大家一个自己手动搭建的方法,根据自己的需要寻找合适的解码器,选择合适的解码方案。

本文大部分为我本人的经验之谈,如果有错误请指正。

 

*1 这样设置,即不使用Haali分离MPG和AVI。我的个人经验,很多游戏的动画是用MPG封装的,如果在这里选了MPEG,那么系统默认MPG的分离器为Haali,很大几率会造成不兼容的问题。具体表现是游戏的OP播不了,或者播放出错之类的,所以不建议用Haali分离MPG,AVI同理。

*2 Haali的分离器无法分离m2ts文件内的LPCM音频,而MPC内建的则可以,所以源滤镜里要选上MPEG,并且转换滤镜里勾上LPCM。

*3  FFDShow内建了一批支持正常调用ffdshow做解码的程序名字。默认情况下,ffdshow看到如果是这些程序调用自己,就会通过。把所有的勾都勾上之后的效果,是当有ffdshow不认识的程序要调用自己的时候,ffdshow会弹出提示框让用户选择是否使用ffdshow。有些游戏在播放动画的时候,用ffdshow解码会出错,所以在玩游戏的时候弹出ffdshow请尽量选择永远不使用。

*4  GeForce8系列及以上和HD 2XXX系列及以上提供了一套硬件Deinterlace算法,品质是现有的算法所无法比拟的,通过这样设置,当在播放Pure interlaced视频的时候,就能够开启硬件反交错。