TIVTC/TFM

来自NMM Doc
Dgwxx讨论 | 贡献2011年6月30日 (四) 08:21的版本 →‎基本参数
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

本页贡献者:Diseac、dgwxx

概 述
作者 tritical
版本 1.0.5
下载地址 TIVTCv105.zip
分类 Deinterlacers
需求
授权

TFM(int order, int field, int mode, int PP, string ovr, string input, string output, string outputC, bool debug, bool display, int slow, bool mChroma, int cNum, int cthresh, int MI, bool chroma, int blockx, int blocky, int y0, int y1, int mthresh, PClip clip2, string d2v, int ovrDefault, int flags, double scthresh, int micout, int micmatching, string trimIn, int hint, int metric, bool batch, bool ubsco, bool mmsco, int opt)

Description

TFM是TIVTC滤镜包的组件之一,负责完成IVTC步骤中场匹配的这个步骤。

参数

基本参数

order - 场序(int,整数型)

-1: 自动(使用avisynth内部默认值)
 0: 偶数场先(BFF, bottom field first)
 1: 基数场先(TFF, top field first)
 默认:-1

如果发生极端的低匹配成功率,或者图像的运动出现不正常的抖动,有可能是场序错误。 要确定场顺序,需要建立一个不对片源进行任何处理的 AVS 脚本。首先照下面建立一个AVS 脚本来分离TopField:

#调用MPEG2 解码器
LoadPlugin("DGDecode.dll")
#导入片源
mpeg2source("source.d2v")
#进行场分离
AssumeTFF().SeparateFields()

现在,用VirtualDubMod(简称VDM,下同)打开上面AVS 脚本,然后找到一段包含运动物体的影片并步进向前(一帧一帧地向前),注意运动物体是一直朝它该去的方向运动,还是在运动过程中突然向回运动。比如,如果场顺序错了,本来应该一直朝右侧运动的物体在运动过程中突然向左跳一下,然后继续朝右运动;如果场顺序正确,那么它会平稳的一直向右运动。 如果使用 AssumeTFF().SeparateFields()的时候物体运动正常,则该段影片的场顺序是TopField 先,需要设定order=1;如果运动不正常,则是偶数场先,需要设定order=0。如果你想进一步确认是否是偶数场先,使用AssumeBFF().SeparateFields()。 在部分用Interlace编码Pulldown的动画的BD片源中,需要在IVTC之前加入AssumeTFF(或AssumeBFF),否则无法获得正确的(或是高质量的)场匹配结果。如《true tears》和《圣痕のクェイサー》。

DGMultiSource("source.dgi")
AssumeTFF()
Destripe(360, 6, 4, 3, mode=10)
tfm(mode=5)

mode - 匹配模式(int,整数型)

TIVTC一共有五种场匹配手段:

p 向上一帧匹配
c 向当前帧匹配(用当前帧作为匹配后的帧)
n 向下一帧匹配
b 用另一场向上一帧匹配
u 用另一场向下一帧匹配

mode参数是将这五重匹配模式进行附带条件的组合之后,由用户依据片源特性选择效率、准确率最好的一种:

0: 进行p/c匹配。
1: 进行p/c匹配,如交错,则承认n匹配。
2: 进行p/c匹配,如交错,则承认u匹配。
3: 进行p/c匹配,如交错则进行n匹配,如再交错则进行u/b匹配并承认u/b匹配。
4: 进行p/c/n匹配。
5: 进行p/c/n匹配,如交错则进行u/b匹配并承认u/b匹配。
6: 进行p/c匹配,如交错,则进行u匹配,再交错进行n匹配,再交错进行b匹配并且承认b匹配。
7: 进行p/c匹配,并且参照前面做过的帧,需要线性编辑。
默认:1

这里以mode=5为例来讲述一下TIVTC的处理流程。

  1. 将用户给出的cthresh值代入公式,分别计算p/c/n的值。
  2. 以优先c为前提,比较MI值,采用MI值最小的匹配。
  3. 如果p/c/n的MI值全部大于80(默认MI值),进行u/b匹配。
  4. 将用户给出的cthresh值代入公式,分别计算u/b的值。
  5. 比较u/b的MI值,采用MI值最小的匹配并且输出匹配结果。
  6. 后处理:将用户给出的cthresh值代入公式计算,检查匹配过的帧是否交错。(如PP=0则放弃从此开始的操作)
  7. 如匹配后的帧为交错,则进行后处理,将帧交给PP或clip2参数指定的函数。
  8. 检查用户给出的PP值。PP=1:只检测但不做后处理;PP=2/3/4:将交错帧送去后处理;PP=5/6/7:将交错帧内的运动象素送去后处理。
  9. 承认后处理结果,输出后处理后的帧。

从字面上来看,尝试的匹配方式越多,获得非交错帧的可能性越大。但在很多时候,特别是重复帧较多的卡通动画中,非交错帧并不一定就是正确结果。在一些情况下,p/c/n/b/u五种匹配方式中会有一种以上的匹配方式能够输出非交错帧,如果两种(或以上)匹配出的结果恰好动态不同,可能造成最终画面播放的时候一顿一顿的(输出了不该输出的非交错帧)。所以,最好能够结合动画的具体情况设定,尽量用p/c两种匹配方式,如果发生大量匹配失败的情况,可以使用n/b/u。

PP - 后处理方式(int,整数型)

如果tfm没有通过场匹配找到无交错匹配,则需要对该帧单帧进行deinterlace处理来消除交错。该操作有0~7共8种模式。

0: 关闭后处理,完全不考虑场匹配结果是否交错,直接输出
1: 仅尝试判断场匹配结果是否交错,但不进行deinterlace处理
2: 单帧Blend Deinterlace
3: 单帧三次插补Deinterlace
4: 单帧ELA(Edge-based Line Average) Deinterlace
5: 基于运动补偿的Blend Deinterlace
6: 基于运动补偿的三次插补Deinterlace
7: 基于运动补偿的ELA Deinterlace
默认:6