分享可以流畅播放电影的音效滤镜-Reclock,附设置参数方法教程

2020-03-13 09:47发布

今天要介绍的Reclock这个东西,为DirectShow Filter的一种,在MPC的架构里面它会作为Audio renderer被呼叫,它是SlySoft论坛上的James所开发,主要有两大特色,其一为强大的音讯输出功能,支援XP的Kernel Streaming或WIN7的WASAPI输出,Bitstream的数位输出,以及各种位元率和取样率的转换;其二就是同步功能,这个同步是指萤幕更新率跟影片速率(FPS)的同步,透过小幅度的对音讯和视讯串流做加减速让其跟萤幕更新率完全同步,以达至最流畅的影像播放。

不装Reclock对播放影片有没有什么影响呢?老实说并没有什么太大的影响,在前面的系列文之中,我们该有的解码器都装了,渲染器部分也设定好了,字幕的问题也解决了,播放各式各样的影音格式都不成问题,但如果您眼睛够利,也许会发现画面的呈现有一点点的"奇怪",而这个"奇怪",在于画面的移动,似乎不是那么的平滑,有点抖动的感觉,不是那么的"顺",亦或是画面的变换或拉动忽快忽慢,不是用一种平稳的速度呈现,或是偶尔给你跳个一下......我举的这些例子,其实我敢说大部分的人平常在电脑上看影片都不会注意到,但是当你看过"正确呈现",真正平滑顺畅的影像,再回过头来检视这些以前这些没有正确呈现的影片,你或许会惊觉自己以前竟然能容忍那么多糟糕的播放效果而不自知!

这就是我要写文介绍Reclock的原因,Reclock能帮助影片正确的呈现出它原本该有的效果,而且这软体并不消耗资源,就算不使用madVR或只使用MPC-BE内建的解码器解码,也可以搭配Reclock使用。事实上我强烈建议安装这个软体,对我而言看影片时已经到没有它不行的程度了。

这边简单解说一下何谓同步,以及Reclock的运作方式及它会遇到的一些限制:

我们知道所谓的萤幕更新率,代表萤幕每一秒钟呈现多少画面,以一般的LCD电脑萤幕而言,大多为60Hz,也就是一秒更新60个画面。但其实60Hz并不是精确的数字,实际上它的更新率会多一点或少一点,像我两个LCD萤幕显卡设置里皆为60Hz,但实际测出来一个60.00779Hz,另一个是59.88230Hz,最后面两位数字还会跳动。

而所谓的影片速率,或影片帧数,或影片格数,指的是影片每一秒钟有几个画面,单位为fps(frames per second),一般常见的电影或动画帧数为24fps,电视剧为30fps(60场并为30帧计算),但实际上在电脑上播放时它的视讯串流也不会是整数,而是23.976 fps(更精确来说是24/1.001=23.976023976.... ..)和29.970 fps(30/1.001)。
这个微小的差异有没有影响呢?其实是有的,后面我们会做实验证明。

接下来要讲同步或非同步,所谓的同步,即是萤幕更新率为影片帧数的整数倍,反之则为非同步。例如在60Hz上播放30fps的影像,即为同步,播放24fps的影像,即为非同步。影片如果在同步的状况下播放,每一个帧在画面上停留的时间都相同,影片帧数能完美配合萤幕更新,像上面的例子,60Hz更新率的萤幕上播放30fps的影像,帧的呈现为1122334455667788......依此类推,如此在一秒内呈现了60个影像(因更新率为帧数两倍,故每个帧都呈现两次)。而非同步的状况就不同了,萤幕更新率并非影片帧数的整数倍,故每个帧在画面上停留的时间就不相同,某些帧必须重复比较多次,像上面的例子,60Hz更新率的萤幕上播放24fps的影像,帧的呈现就会变成11122333445556677788......,依此类推,以3:2的比例在一秒内呈现了60个影像(有点类似前面讲交错式影像时提到的3:2 pulldown,但注意这边全部是指循序式影像的处理),而这个做法造成的影响是在观赏时影像会有轻微的颤动感(judder),尤其在横向拉动的画面最为明显,播放几个有类似场景的24p影片看看是否感觉得出来,另外我们也可以试着暂时把MPC的渲染器改成EVR-CP,然后播放影片时按"Ctrl+T"打开抖动测试,看看那两条红线的移动中是否能感觉得到所谓的"judder",如果感觉不出来,可以先播一个有同步的,再播一个没同步的,应该就能感觉到红线在跑时有一点 一样了吧。


但这边有一点我要强调的是,Reclock并不能让本来就完全非同步的影像变成同步 (其实并不是不行,但那么做的话会造成音质严重损失,故不建议),而是让本来看似同步实际上并没有真正同步的影像达到真正完美的同步。例如前面提到的60Hz更新率的萤幕上播放30fps的影像,看起来好像是同步,实际上我们从精确的数字来看并没有真正的同步,我们之前有提过真正的萤幕更新率可能为59.882 ,而影片播放时真正的速率也不是30fps而是29.970fps,我们做个简单的计算,59.882/29.97=1.998......,并非刚好整数倍,而为什么会有这种情形呢?那是因为两者的速率是依据不同的装置时钟决定的,萤幕更新率是由系统时钟(system clock)来决定,而影片的播放速率则是由音效装置时钟来决定(audio hardware clock),两者并非完全的契合,存在一个偏移量(audio clock deviation),而这是造成一切问题的根源。
影片播放一段时间后,影片的速率超过萤幕的更新率,而必须drop掉一个frame;或是影片的速率跟不上萤幕的更新率,而必须repeat(重复)一个frame,如此才能维持声音和影像的同步,而这样周期性的掉格或重复画格正是让我们视觉产生影片速率不一致,卡顿感,忽快忽慢或是颤动感的主因。

在EVR-CP渲染底下播放一个本来应该要同步的影像,按Ctrl+J打开OSD,可看到那个类似心电图的东西,红线是萤幕更新率,绿线是影片速率,两条线一开始平行,然后绿线会慢慢飘升(或降低)到一个程度又拉回去,而那个转折表示有drop或repeat一个帧,我们视觉上会觉得影像有奇怪的感觉也正是这个时候。


而本来非同步的影像更不用说了,红绿线呈现锯齿状,而且也有周期性的跳动


而Reclock做的,是把影片速率做小幅度的加减速,例如把29.970fps加速到30fps,并对声音做重取样(例如原本48000Hz,重取样为48048Hz),如此在保持影音同步的情况下让影片速率跟萤幕更新率能够达到完全的同步。我们来看看上面的例子用了Reclock同步后会变怎样。

萤幕更新率60Hz,播放29.970fps的影片,使用Reclock,可以发现红线跟绿线现在恒为平行线,绿线经过很长的时间也不会飘升或降低,不会有转折出现,意即完全同步,没有任何drop或repeat的帧。


萤幕更新率60Hz,播放23.976fps的影片,使用Reclock,可以发现Reclock并无法自动让完全不同步的影像变成同步(手动可以,但先前提过如此大幅度的强行同步极损音质,因为声音重取样的幅度过大),不过Reclock依然能做到稳定帧率的作用,这边可以观察到红绿性呈现稳定的锯齿状,而不会产生周期性的大跳动。


我们换回madVR,一样播放时开启OSD来观察帧率资讯,首先为萤幕更新率60Hz,播放29.970fps的影片,不使用Reclock的情况,可以看到其显示"1 frame drop every 16.57 seconds",表示其计算出每16.57秒左右可能会掉一帧,并且下方的"dropped frames"也的确会有周期性的增加。


再来看看萤幕更新率60Hz,播放29.970fps的影片,使用Reclock的情况,可以看到其显示"1 frame repeat every 1.65 hours",可见帧率明显稳定了,达到完全同步,不再产生掉格或重复帧。


萤幕更新率60Hz,播放23.976fps的影片,不使用Reclock的情况:


萤幕更新率60Hz,播放23.976fps的影片,使用Reclock的情况,可以发现在不同步的情况下,对稳定帧率依然有一定的作用,这对画面表现有一定程度的改善,但并无法完全消除judder就是,因为其画面呈现依然是111223334455566......这类3:2重复的模式。


事实上我们平常会播放的影片可能有很大一部分都是23.976fps这种帧率的影片(大部分的电影、动画、还有一些纪录片都是1秒24格拍摄的),要如何让其达到同步播放呢?大致上有两种路径可行,第一种是从显示装置下手,使用支援48Hz、72Hz、96Hz、或120Hz这种24fps整数倍萤幕更新率的的CRT萤幕、液晶/电浆电视、或投影机并搭配Reclock来播放,如此就可以得到有如原生24格影片在电影院播放那种原汁原味又顺畅的播放体验。而nvidia的显示卡据说可以以自订解析度的方式让60Hz的LCD以72Hz来显示,不过我并没有用过N卡,无法提供太多的心得,我本身是用A卡,也曾以PowerStrip这类软体改过更新率,不过会有一些小问题,并不是很推荐就是,建议还是使用直接支援以上更新率的显示装置方为上策。第二种路径,是使用之后会介绍的SVP这个补帧软体,直接将24fps的影片插补到60fps,如此配合Reclock也可以完全同步,不过这种方式是会有一些副作用在的,留待SVP的篇章再做解释。
madVR v0.86之后的版本,有第三种路径可以选择,即madVR新增的"smooth motion FRC"这个功能,也能让24p@60Hz的情形达到完全同步。

下面提供一张范例是23.976fps的影片在我的CRT开120Hz上播放的结果,这种情况下影片是以111112222233333444445555566666......这种每个帧重复5次来达到每秒120个画面的更新率并完全同步。


讲完影像的部分,也顺便来谈谈声音的部分,Reclock对于声音的输出也是有正面帮助的,前面提到Reclock支援XP的Kernel Streaming或WIN7的WASAPI输出,这东西可以让你声音输出时绕过Win底下的混音层直接送给音效驱动,可以确保声音讯号的低延迟及减少失真,我们来看看以下的图解,用红线标出的路径即为Reclock走WASAPI的Exclusive Mode(独占模式)的传输路径。



前面讲了那么多的废话,希望大家不要介意,接下来正式介绍Reclock的安装及设置方法:

首先先到官方讨论页下载:

https://forum.slysoft.com/showthread.php?56678-ReClock- 1-8-8-0

安装时勾选前两个就好,如果电脑里有安装TMT或PowerDVD也可依版本一并勾选,不过须注意Reclock必须是最后安装的


安装好后到WIN的控制台>声音>音效装置内容>进阶里,确认独占模式下面两个选项都勾选,取样率和位元深度,如果要用Reclock的DirectSound输出而非WASAPI的话,看音效驱动有支援到多大就选最大的那个


从程式集(所有程式)或桌面打开Reclock的设定页,如下图,下方依代号来解释各个选项:


  1. 声音讯号输出的模式,建议选择WASAPI Exclusive(WIN7)或Kernel Streaming(XP),但如果不喜欢影片播放时音效被独占,就选择DirectSound(default),DirectSound为WIN预设的音效输出。WASAPI Exclusive是让音效使用WASAPI的独占模式,播放时WIN7底下的音量控制会失去作用(因为被绕过了),软体层面只能从播放程式本身调整音量,不过如果有外接扩大机的话,建议将播放程式音量调至100%输出,在扩大机上面控制音量即可,如此可以得到最低失真的音讯输出。

  2. 调整缓冲区的大小,预设是500ms,这个值建议越小越好,不过小到一个程度可能会产生爆音,所以要依自身系统去调出一个可以接受的最小数值,像我的系统大概300ms左右,再小就很容易爆音了。

  3. Sampling rate选择"Same as input"即可,除非遇到音效驱动不支援的取样率才指定一个驱动支援的取样率让它重取样。Quality的部分选择"Best Sinc Interpolation"。Format的部分建议选择"24 bit int padded to 32",并勾选"16 bit integer for 16 bit source"。这边解释一下,经由音讯解码器(例如LAV audio decoder)解码出来的PCM讯号,其位元深度可能有16bit整数、24bit整数、32bit整数、32bit浮点数这几种形式,大部分音效驱动都支援16bit整数和32bit整数的讯号输入,但不一定支援24bit整数和32bit浮点数,而上面这样设定遇到24bit整数的讯号会将其后面几位填0变成32bit整数的讯号输出,32bit浮点数则转成32bit整数输出,16bit整数维持16bit整数输出,也就是这样设定相容性比较高且不失品质。当然如果你确定你的音效驱动全都支援的话也可以选择"Same as input"。如果只支援16bit整数也可以选择"16 bit int",这样Reclock都会帮你转换成驱动可接受的形式,而且据说Reclock的转换有使用dither的算法,可以维持一定的转换品质。

  4. 一般状况下这四个选项都不用勾选,解释一下,第一个选项是把单声道讯号拓展成立体声。第二个选项"Set matching speakers configuration"如果勾选的话WIN的音效输出会去对应输入的讯号,例如你有7.1声道喇叭,如果影片音效是7.1声道讯号就会用7.1的喇叭输出,而如果是2声道的讯号就会用2声道的设定让7.1声道的喇叭输出,也就是只有前方左右两支喇叭有声音而非把2声道扩展到全部的喇叭都有声音(这点并不是很确定,如果有误欢迎指正),如果有使用多声道喇叭,或者有用HDMI输出PCM讯号才有必要勾选此选项,一般两声道的喇叭输出不必勾选此项。第三个选项"Time Streching"是指影片在做加减速时进行时间展延以维持声音的原本音高,一般小幅度的加减速并不需要这个动作,有需要的是我前面提过的强行大幅度的加减速动作,不过就算维持原音高还是会造成声音的严重失真,故这个选项也不建议勾选。第四个选项是用S/PDIF或HDMI做数位输出时才有需要勾选,一般也不用勾选。



到"video settings"这个分页,建议如下图设定,用红线框起来的"Assumed frame rate when not found"指定一个帧率,选自己最常看的影片帧率即可,播放时就算跟播放的影片不合Reclock也会在几秒钟后自动校正成正确的帧率,所以不用担心。左下角的"Clean-up manual frame rates database",每次更新过显卡驱动后请按一下这选项清除资料库的资料让它重抓,我的经验是这样比较不会出问题。


到"Advanced settings"这页,建议如下图设定,左下角的"Clean-up video clock timings database",一样每次更新过显卡驱动后最好按一下这选项清除资料库的资料让它重抓


打开MPC-BE,到设定选项>音讯里面,把Audio Renderer改成"ReClock Audio Renderer",就可以在播放影片时让其自动被调用了


设定到此告一段落,现在试着播放影片,会发现右下角工作列出现Reclock的时钟小图示,通常使用Reclock第一次开影片时速度会较久,因为Reclock在抓取萤幕更新率资料,并在其资料库中建档,之后再开就不会拖慢速度了。而工作列的Reclock时钟小图示有三种颜色,红色、黄色、跟绿色,红色表示还没抓取到影片帧率资讯,黄色表示影片帧率跟萤幕更新率不同步,绿色则表示影片帧率跟萤幕更新率同步。



在时钟小图示上点一下左键,可叫出Reclock状态选单,以下依代号解说


  1. 影片的视讯串流跟音讯串流资讯,视讯:帧率、解析度、扫描形式、色彩空间、位元深度;音讯:原取样率、声道数、位元深度

  2. 影片播放的萤幕之更新率和解析度

  3. 视讯渲染器和音讯渲染器的资讯,例如其显示目前为WASAPI独占模式输出

  4. 视讯加减速的方式,预设是AUTO,会自动执行小幅度加减速,不用去改,若要使用我前面提过的强行同步就是去下拉式选单指定一个可以同步的帧率。另外下面也会显示音讯重取样的结果,一般AUTO的话重取样的结果并不会差原取样率太多。那个"Locked"选项勾了就是把下拉式选单锁住而已,如果有指定帧率,勾了的话开别的影片就不会自动变回AUTO而是锁在你选择的那个帧率,如果是用AUTO的话,勾不勾都可以,没什么差别。

  5. 将欧规PAL(25fps)的视讯减速到24fps,这个是搭配madVR那篇提到过的PAL帧率转换功能时才需要勾选的,一般不需要勾选。

关于Reclock的重取样(resample),DOOM9上也有网友提供一个SSRC resampler,这个是旧版的Reclock所使用,CPU使用率会稍微增加一点点,不过提供比较好的重取样品质,最新版的Reclock使用的是Libresample resampler,CPU使用率较低不过取样品质比SSRC稍微差一点点,下面提供该网友的发帖,里面有载点跟说明:

http://forum.doom9.org/showthread.php?p=1610883#post1610883

http://forum.doom9.org/showthread.php?p=1610921#post1610921

载点分流:
http://www.mediafire.com/?4om183nv6rakfgx

只需将下载的"resampler.dll"这个档案放到Reclock的安装资料夹里并覆盖原有档案即可,最后再到Reclock的设定第一页,Quality的部分重新设置为"Best Sinc Interpolation"。

不过也有一派人士认为(包括madVR的开发者madshi)如果影片观赏过程中没有很明显的掉帧或重复帧的现象,就没有必要去使用Reclock让帧率跟萤幕更新率达到高精确的同步,毕竟Reclock为了达到同步而对音讯串流做的重取样动作还是多少会对音质有一些负面的影响,如果你的耳朵十分敏锐并且也同意这种看法的话,透过下图的设定就会取消Reclock的同步功能,而仍能够使用Reclock来进行WASAPI输出

如图,勾选"Slave reference clock to audio",Speed的选单选择"Original speed"并勾选"Locked",这样设定的话以后开启影片都会预设不使用Reclock的同步功能,如果觉得有需要就这样设定吧!


    谢谢大家看完我成串的废话,enjoy it!


    2013/01/26新增内容:

    关于时间展延功能的使用方法,其可以在影片加速或减速播放的时候,维持影片的原来音高而不会让声音变得让唐老鸭一样。如果有需要用到这个功能的话,可将Reclock设定页第一页如下设定(如果只会快进的话也可只勾"when speeding up")


    MPC-BE让影片快进或慢进的热键是"Ctrl+Up"或"Ctrl+Down",每按一次就增加加减速幅度,如下图是2倍速播放,不过请注意,这个动作跟在上面文章提到的从下拉式选单选择帧率让其强置同步的原理是完全一样的(2倍数播放其实就是帧率变两倍),所以对音质有一定程度负面影响



    2014/02/23补充说明:

    目前最新的版本为1.8.8.3,但比较不建议更新到此版本,因为开发者降低了帧率自动侦测的优先权,所以只要设定页第二页有先设定帧率的话播放时都会用该帧率强制覆写,如果要让1.8.8.3版的Reclock自动侦测帧率的话就必须先在设定页第二页帧率那边改成"unknown",并且点一下左下角"Clean-up manual frame rates database"清除之前的资料库,播放时才会自动参测帧率,但如此一来会变成大部份影片(例如23.976、29.970、59.970都会)播放开始前几秒侦测到影片帧率时都会有一个小爆音,如不介意者当然没有影响,但我会推荐用回1.8.8.0版照我文中之前的设定先预选常看的影片帧率然后再让它自动侦测,就比较没有这个问题.....

    1.8.8.3的话必须如此设定

    赞赏支持