madVR渲染器教程-进阶篇

这篇教程主要是对入门篇的补充解释,主要整合几篇其他大神写的文章,再加入一些我自己的理解。

阅读下文之前,请务必确保你基本理解了科普三科普五科普六

本教程主要针对画面处理、缩放算法、OSD菜单信息、渲染设置、规则自动切换进行介绍。

1、processing

这个菜单中我比较推荐设置的是”deinterlacing”和“artifact removal”

deinterlacing

这页,建议如图设置:这边是关于是否启动去交错的一些判断原则,我们让madVR自己判断,并选择在怀疑时不启动去交错。

我们知道对于这类隔行扫描的影片必须对其作IVTC让它还原成24p(60i→24p),但实际上我们有时候会发现录了一部电视播放的电影或动画下来,电视台常常在四边打上跑马灯或台标之类的东西,而这个跑马灯或台标却是video型式的interlaced信号(真正的60i 无法IVTC),因此我们要作IVTC时如果是对整个画面的像素作侦测,遇到这种情形时就很容易产生误判。因此勾选这个选项时就只会对画面中央部分的像素作侦测,避开那些跑马灯或台标可能出现的位置以免作IVTC时产生误判,但缺点就是这样侦测的效率较低,遇到动画这类常常有静止画面的影片在侦测是哪一类pulldown时就会花比较久的时间。

当然现在多数Rip组会把交错等问题直接处理好

image enhancements

这个选项是针对影片本身锐利度不足的片源,经由勾选的算法进行锐利化处理,其处理是在放大演算之前(pre-processing),所以对于1:1呈现的影像也有效果。在这边,不论选择哪一种算法,锐化的效果都相当显著,但相对的,片源中的缺陷(杂讯)也很容易被凸显出来,故不建议开启锐化算法当作常驻选项。有需要的读者可以自行设置。

artifact removal

勾选”reduce banding artifact”,这个选项就是之前madshi在Doom9上放出测试的debanding(去色阶断层)功能,ffdshow video decoder里面也有个”去断层”,跟这个基本上是一样的作用,但madVR的debanding因为处理的精度更高,侦测像素变化的机制更好,故效果会比ffdshow video decoder里面的去断层更好,使用这个的话就不需要再使用ffdshowvideo decoder的去断层了。

第一个选项是一般画面的debanding强度,第二个选项是光影淡入淡出时的debanding强度,建议设置如下,保持在low就有不错的效果,或是第二个选项可以选择medium或high,因为光影淡入淡出是比较容易出现banding的地方,但基本上还是看片源而定。越高的设置有越好的debanding效果,不过相对的也可能损失一些画面细节。

这个选项会吃掉一些显卡性能,但不会太多,显卡不差的话建议常时保持在low,有一定的debanding效果,而且几乎不会吃到画面细节。

举个例子:

madVR无开启debanding,可发现男主脸上有明显条纹(看不清的话放大看)

打开debanding选择low

可见low就有不错的效果了,诸如此类各位可自行测试,针对不同的片源,善用热键或是profile来设置必要的debanding强度。

2、Scaling algorithms

由于madVR设置中对画面改善最为明显的是图像缩放算法,因此第二部分我叙述Scalingalgorithms 即缩放算法设置。

前提:已了解科普六中锯齿(aliasing)、晕轮/振铃(ringing/haloing)

打开madVR设置-> Scaling algorithms 我们可以看到chroma upscaling、image doubling、image upscaling、image downscaling和upscaling refinement五种不同的运算方案设定。

1.     chromaupscaling是指色度拉伸,即色度平面放大

2.     image doubling是指影像翻倍。

3.     imageupscaling就是指影像拉伸,也就是影像放大,只要目标分辨率大于原始分辨率就会用到这部分的算法。

4.     imagedownscaling就是指影像缩放,也就是影像缩小,只要目标分辨率小于原始分辨率就会用到这部分的算法。

5.     upscalingrefinement这部分是锐化算法,其目的在于改善放大运算后造成的模糊,作用在放大运算之后,属于post-processing。如果是1:1无放大的影像,这部分勾选了也不会有作用。

首先,madVR会使用chroma upscaling中设定的算法拉伸色度平面,使其分辨率与亮度平面的相同,达到YCbCr 4:4:4。若源视频分辨率与显示分辨率不符,madVR会对其进行缩放处理。假如放大系数达到了image doubling中设定的条件,madVR会再将RGB转换成YCbCr 4:4:4,对亮度和色度平面分别用image doubling中的算法进行放大,再进行缩放处理达到显示分辨率。

综合上文,这边我们可以得到一个简单的结论,播放分辨率跟屏幕分辨率相同的影片时,对显卡的负担是最小的,一旦需要用到影像缩放运算时,对显卡的负担就加重了,而当分辨率差异大到动用到image doubling的时候,对显卡的负担是最重的(当然我们可以自行选择要不要开启image doubling)。

 

我们在自己调节设置的时候特别要注意右上角的表格,每种算法有不同的数值,通常绿色是优点(sharpness = 锐利度),越高越好,红色部分是失真,缺陷(aliasing = 锯齿、ringing = 振铃效应),越低越好。如果不了解锯齿、振铃效应,可以看一下vcb-s之前的几篇科普文。

以各算法的消耗性能来说,Nearest Neighbor、bilinear、DXVA这几种消耗的性能最低(DXVA这项运算优劣直接受显卡影响,目前只建议intel的核显使用,因为i家核显这部分有优化),再来是Mitchell-Netravali、Catmull-Rom、Bicubic、Softcubic这几种,消耗性能其次,再来是Lanczos、Spline,消耗性能又高一点,再来是Jinc,消耗性能更高,不过效果也比前面几种都好,再来是super-xbr,消耗跟Jinc差不多,略高一些,但效果好不少,最后是NNEDI3,消耗的性能跟效果都居冠。此外,勾选”activate anti-ringing filter”(配置中的AR)能够有效的抑制振铃效应,相对的也会增加一些性能消耗。当你的显卡使用bilinear都无法正常播放的时候,建议尝试EVR自定义呈现器。EVR设置参见http://vcb-s.com/archives/4384  或者http://vcb-s.com/archives/4407

借用一下其他人大量测试并对显卡分级的结果。

[CR]:Catmull-Rom

[AR]:activate anti-rining filter

[SC]:scale in linear light

放大的话,显示器的分辨率为FHD的情况下

我推荐SD设置为Level5(有比GTX750TI更强显卡的能尝试更高的等级)

FHD与HD设置为level4

首先谈一下chroma upscaling。

由处理流程可知,这一步得先保证不出什么问题,不然后面的做得再好也没用。

chroma upscaling最好的设置是NNEDI3 16或32(chroma upscaling这里开到NNEDI3 64以上几乎没什么意义,肉眼分辨不出),对显卡性能的消耗,是影像拉伸消耗更大,色度拉伸开销较小。不过在对视觉感受的影响上,影像缩放算法的影响比色度升频运算的影响要大得多。也就是说,改变影像缩放的算法,你比较容易感觉的到差别,改变色度拉伸的算法比较难感受到差别。总的来说,如果显卡不是很好的话,可以设置super-xbr 125,或是Jinc + AR,效果也很不错。

接下来image downscaling部分

madshi跟Doom9版友都公认的最佳演算法组合(resize后最接近原本的画面),使用Catmull-Rom,并勾选””activate anti-ringing filter”(简称AR)跟”scale in linear light”(简称SC)。如果显卡OK的话这部分推荐如此设置。想尝试其他设置的,建议勾选SC以减小亮度的失真。

https://www.nmm-hd.org/newbbs/viewtopic.php?f=5&t=1286

 

image doubling,图像倍增。

由于使用image doubling效果比直接用image upscaling好很多,所以说能开的话还是开一下吧。对显卡很有自信的可以开NNEDI3,至于neurons当然是越高越好(当然开销也是越来越大),但64和256的效果差别不大,所以这里最好的设置还是NNEDI3 64 neurons。不过显卡一般的没必要开这么高,可以用NEDI或super-xbr。而据测试观察super-xbr会产生更多的ringing,所以我推荐NEDI。而在图像放大倍数很大时,你也可以通过设置下面quadruple luma/chroma resolution来减小对显卡的负担。例如double中设置是NNEDI3 64 neurons,在quadruple中可以设成16或32 neurons,使得放大4倍时不会直接用两次NNEDI3 64 neurons,减小开销。

最后是image upscaling,图像放大。

假如你已经在image doubling中使用NNEDI3,chroma upscaling和image upscaling都可以使用较节省开销的算法,没有必要坚持使用开销大效果好的算法,因为综合效益并不大,这时建议是chroma upscaling使用Bicubic 75+AR,image upscaling使用Lanczos 3 taps+AR甚至是Bicubic 50+AR。没开启image doubling的推荐用上图的设置(Jinc+AR),显卡吃不消的可以考虑Lanczos 4+AR甚至是Bicubic 50+AR。

需要注意的是在这里不推荐使用SC,因为这样会出现比较明显的aliasing和ringing。

总体上来说,我们应该在播放不卡顿的前提下选择尽可能高的设置。可以通过查看GPU占用率(例如GPU-Z等软件),只要不到90%就应该没什么问题了。

3、OSD菜单

既然上文提到了各种算法的优劣,那么如何判断我们是不是能够用这种算法呢。那么我们可以借助Ctrl+J(MPC-HC)调出的OSD菜单来看。

1.目前的屏幕刷新率。

2.WIN7的AERO作用时会出现此项,类似垂直同步。

3.显示smoothmotion FRC功能是否启用。

4.显示目前为D3D9或是D3D11模式;窗口模式、全屏幕窗口模式(fullscreen windowedmode)、或是全屏幕独占模式(fullscreen exclusive mode)。

5.来源文件的编码、bitdepth和色度信息以及解码器解码完传给madVR的色彩空间、bitdepth和色度信息。

6.影片的帧率。

7.每隔多久会掉1格,这与影片帧数和屏幕更新率的同步程度有关。

8.影片的原始分辨率,以及宽高比

9.源分辨率,和输出分辨率。有四组数字,分别是”left, top, right, bottom”,必须把第三组减第一组 第四组减第二组才是分辨率的”width, height”。

10.当前使用的chroma与image的缩放算法显示。”>”代表放大”<”代表缩小。

11.各个queue是否充满通常能反应硬件是否能负荷,例如decoder queue很低的话表示CPU负荷不了了,render queue很低的话表示显卡负荷不了了。

12.droppedframes与delayed frames为掉帧计数器,若数字一值增加表示硬件无法负荷,请降低设置或找出原因。

根据以上OSD菜单我们可以更客观的判断我们的硬件能否使用上文的配置档,也可以根据OSD菜单找到更适合自己的配置方案。

4、rendering

1.generalsetting

1.”delayplayback start until render queue is full”建议勾选,可减少开启影片时的掉帧现象,下面的”delayplayback start after seeking”不建议勾选,勾了拉时间轴会变慢,但是如果跳转后出现掉帧现象,请勾选此项。

2.”enablewindowed overlay”N卡跟I卡可勾可不勾,这功能A卡并不支持勾了也没用。

3.”enableautomatic fullscreen exclusive mode”这个选项勾了会在进入全屏幕时使用独占模式(FSE)。

4.”disabledesktop composition (Vista and newer)”和底下的”only when mediaplayer is in fullscreen mode”,如果有使用全屏幕独占模式的话,就两个都一起勾选;如果没使用全屏幕独占模式的话,就不要勾选(这个选项是播放时或者全屏幕时把win7的AERO关掉)

5.useDirect3D 11 for presentation,勾了会使用D3D11模式,必须显卡跟操作系统支持才能用,而madVR的10bit输出也必须在D3D11跟FSE模式底下才能达成,此外D3D 11模式下从窗口切换到FSE模式速度比较快一些,效率较好。D3D 11模式必须使用AERO,故这里勾选的话”disable desktopcomposition (Vista and newer)”会自动失效。下面的”presenta frame for every VSync”建议勾选,可减少presentationglitches的增加,反之若不勾则能节省一点点性能但有可能presentation glitches会变多。

6.”usea separate device for presentation (Vista and newer)”建议勾选,不过如果N卡勾了发生问题的话可以取消勾选看看有没有改善,另N卡驱动为 301.42 版以前的话不要勾选。

7.”usea separate device for DXVA processing (Vista and newer)”,勾或不勾都可。(此项只有在用到DXVA的场合,如硬件去交错或硬件解码时才有影响)

CPU queue与GPU queue,决定播放时占用的RAM的大小,太大的queue会占用很多的RAM空间,但是太低的queue可能会造成某些渲染耗时较多的画面出现渲染队列帧数骤减到0产生丢帧现象。至于这里的平衡需要大家自己掌握。

我的建议是如果没有使用smooth motion功能的话,这部分维持缺省即可,如果有使用smoothmotion的话,这边可以设到CPU queue 20跟GPUqueue 12,甚至要更大也可以(在我以前的测试中,使用smoothmotion时如果queue不够大有时候会有不顺畅或顿顿的情形发生。

2.trade qualityfor performance

这页的选项都是降低品质以换取性能,如果显卡性能够高的话尽可能都不要勾选,如果显卡负载不了的话就从最上面开始勾选。有时候你使用某些算法在播放逐行扫描视频或是软解时没问题,播放隔行扫描开启硬件去交错时或是硬解时显卡却负载不了,这时就可以勾选那几个DXVA(deinterlacing or decoding)的选项,如此显卡就只有在用到DXVA运算时才会降低质量,总之这边的选项低级显卡可以依需要勾选

这边的选项由上到下依序来看的话:

第1项是跟外挂字幕渲染器xy-SubFilter相关,有使用才有影响。

第2项是使用硬解(DXVA)时,同时使用DXVA的chroma upscaling算法

第3项是使用硬件去交错时,同时使用DXVA的chroma upscaling算法

第4项是跟播放器的自订pixel sharder功能相关,有使用才有影响。

第5项勾选的话dithering运算会用gammalight取代linear light(gamma light在0.87.7之前的版本是缺省使用),取消勾选的话就是使用linear light,linear light能提供较好的色彩还原度。

第6项跟第7项是跟debanding的运作有关,勾选的话会取消一些侦测机制。

第8项是去掉影片的BTB(比黑更黑 指0~15这段)和WTW(比白更白 指236~255这段)的黑位范围信息

第9项是跟smooth motion有关。

第10项跟第11项跟madVR本身的处理精度有关。

第12项跟放器的自订pixel sharder功能相关,一样有使用才有影响。

第13项是跟屏幕校色选项里的yCMS和3DLUT相关,有使用才有影响。

第14项是跟DXVA deinterlacing有关,勾了就不会把60i去交错倍帧成60p而是变成30p

第15项也跟DXVA有关

5、profile

madVR的Profile功能是在0.87版加入的一项重要功能,对于madVR陆续加入的一堆新功能、算法,我们不太可能在用单一种设置去应付所有不同种类的影片在所有不同状况下的播放,当然用热键勤劳的切换设置是一种解法,但我想这样看影片也太辛苦了,我们会希望有一种一劳永逸的方法,让我们只要设置一次就行了。在已经了解自己显卡合适的配置并且对配置单一配置文件有所了解后,我们就可以尝试使用一定的规则让madVR自动的帮我们选择预先写好的配置方案。

逻辑分支语句和运算符号:

陈述句:                                           “if”,”else if”, “elseif”, “elsif”, “else”

逻辑运算符号:                                 “and”,”or”, “&&”, “||”  (第三项就是and,第四项就是or)

等于:                                              “==”, “=”

不等于:                                           “!=”,”<>”, “#”

大于小于:                                      “<“,”>”, “<=”, “>=”    (后两项是”小于或等于”、”大于或等于”)

布尔值”not”(否定)运算:                   “not”,”!”

支持的数值变量:

片源宽、高:                                  srcWidth  、   srcHeight

片源帧率、片源色深、片源比例:      srcFps 、 srcBits 、 srcAR

目标分辨率宽、高:                        targetWidth、  targetHeight

放大比例宽/高:                               scalingFactor.x/y

去交错后之帧率:                             deintFps

屏幕比例宽/高、屏幕更新率:           displayMode.x/y、  refreshRate

支持的布尔值变量:

片源是否为该种像素格式?              4:2:0、4:2:2、 4:4:4、RGB

是交错式片源吗?                            srcInterlaced

filmmode(IVTC)是否作用?            filmMode

片源是否为该种编码?                     MPEG2、 VC-1、 h264

是该种rendering mode吗?            fseMode、 overlay、 windowed

工作的是该种GPU吗?                    AMD、 nVidia、 Intel

支持的字符串数值:

播放器exe文件的名称                      mediaPlayer

文档的扩展名                                    fileExt

文档名                                              fileName

文档路径                                           filePath

后三者可搭配两个wild char(通配符号)使用    “?” , “*”

星号”*”匹配0个或以上的字符,问号”?”匹配1个字符,字符可以是26个英文本母和10个数字之一

利用以上规则我们可以编写种规则。

例如:

 

if (srcWidth <= 1050) and (srcHeight <= 768) and (deintFps < 31) "SD 24fps" 
#在同时满足视频源宽度<=1050高度<=768交错后帧率<31帧/秒时,调用名为"SD 24fps"的配置档
else if (srcWidth <= 1050) and (srcHeight <= 768) "SD 60fps" 
#当不满足上述"SD 24fps"配置文件启用条件且视频源宽度<=1050高度<=768(即交错后帧率>=31帧/秒)时,调用"SD 60fps"配置档
else if (deintFps < 31) "HD 24fps" 
#当不满足上述两种情况时(即视频源宽度>1050或者视频源高度>768时)并且满足交错后帧率<31帧/秒时 调用"HD 24fps"配置档
else "HD 60fps" 
#当上述三种情况均无法满足时,调用"HD 60fps"配置档

 

从上面的例子我们可以看出大体的规则。类似于其他编程语言,if 布尔表达式“你的配置档名称”

对于数值变量       例如(srcWidth <= 1050)

对于布尔值           例如 (Intel==true)、(not nVidia)

对于字符串           例如 (filePath = “C:Videos*”)

接下来我介绍一下相关配置档、profile组的建立方式。

madVR设置界面中左侧三大群组点击后,右侧会出现”createprofile group”按钮

点击按钮,选择你需要创建的群组

点击已经创建好的群组,右侧出现设置界面,点击”add profile”即可创建配置文件

下方的”profile auto select rules”就是自动切换规则,前文提到的规则就是在这里启用的,右侧有绿色的勾,代表策略语法正确,如果出现语法错误则显示感叹号

点击刚才创建的配置档我们就可以对相应配置档名称进行修改,并且可以逐个修改具体配置内容。

这些都只是范例,具体的规则需要你的创造力和大量的实验,找到最适合自己的配置方案。这边也要小提醒一个地方,如果跟帧率或是屏幕更新率有关的比较条件,不要用”=”,而应该使用”>” “<” “>=”  “<=”,因为这两个数值都是有小数点的,而且末位会常常变动,所以用”=”当做条件的话大概永远都不会启用,必须注意。

教程内容参考:

http://vcb-s.com/archives/1216

http://vcb-s.com/archives/4567

http://lysandria1985.blogspot.sg/2013/01/3-madvr.html

http://lysandria1985.blogspot.sg/2014/01/2madvr-profile.html

http://blog.goo.ne.jp/heiseikiseki/e/25d378b063df4332710686f8dfaa4846

http://bbs.vcb-s.com/thread-1043-1-2.html

, , ,
上一篇文章
madVR渲染器教程-入门篇
下一篇文章
穿透DDNS进阶用法(一)-App穿透控制

2条评论. Leave new

  • 网上示范的Profile全都有重大逻辑缺陷:为何非高清视频就就要降低画质播放呢??
    用madVR的目的就是尽可能地提高回放效果,只要显卡能流畅播放。
    所以,编写这个Profile的时候,只需要关心显卡的支持程度,与视频的尺寸码率帧率都没关系。

    回复
    • 这些配置应当满足的最基本的要求就是流畅的播放视频。播放中出现严重丢帧,画面撕裂,那么再高的缩放算法都是没有意义的,就像你说的,’只要能流畅播放’; 显卡针对不同分辨率,帧率,码率的视频渲染压力有非常大的区别,对于一些超高分辨率帧率,或者放大倍数特别高的视频,都会让显卡的计算开销成倍增加,对于非高清视频放大到高清甚至4k分辨率,往往需要相当的算力,那么适当降低算法开销就是一种不错的妥协方式。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Fill out this field
Fill out this field
请输入正确的电子邮件地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

菜单