翻译自 avisynth 文档
1 | src = haf.QTGMC(src, Preset="slow", SourceMatch=1, Lossless=2, TFF=True) |
注意下面很多代码都是 avs 的代码,主要用于参考功能
基础
大多数用户仅需使用预设选项。"预设"功能会为指定编码速度选择合理配置。可选预设包括:
"Placebo"(实验性) • "Very Slow"(极慢) • "Slower"(较慢) • "Slow"(慢速) • "Medium"(中等) • "Fast"(快速) • "Faster"(更快) • "Very Fast"(极快) • "Super Fast"(超快) • "Ultra Fast"(终极速) • "Draft"(草稿)
默认预设为"Slower"(较慢)。请勿盲目追求最慢设置,其画质提升可能微乎其微却需耗费大量时间。特别提示:高清素材使用极端设置效果提升有限。高清(HD)素材的处理速度比标清(SD)慢6到8倍。
核心参数设置
要点提示:最实用的参数是TR2,用于控制输出画面的平滑度。
TR0 (1,2) 用于生成运动搜索画面的时间二项式平滑半径。通常:2=画质优先,1=速度优先
TR1 (1,2) 对插值生成的初始输出画面应用的时间二项式平滑半径。通常:2=画质优先,1=速度优先
TR2 (0,1,2,3) 用于最终画面稳定/降噪的时间线性平滑半径。数值越高,输出画面越平滑
Rep0 (int) 修复运动搜索画面(0=关闭):修正因TR0时间平滑导致的非预期模糊
Rep1 (int) 修复初始输出画面(0=关闭):修正因TR1时间平滑导致的非预期模糊
Rep2 (int) 修复最终输出画面(0=关闭):修正因TR2时间平滑导致的非预期模糊(若未启用Rep1,也会修复TR1导致的模糊)
RepChroma (bool) 修复模式是否影响色度。默认值:True(启用)
RepX语法说明:
第一位数字(0-5):控制可消除的细密闪烁线条的最大宽度(1像素至约3像素)
第二位数字(0-3):控制在检测到的线条边缘略微恢复细节
若仅输入单数字,则视为第一位数字(例如 "5" 等同于 "50")
算法原理详解
核心流程:
- 对源素材片段进行 Bob 处理(场分离)。对 Bob 处理(场分离)后的结果进行时域平滑以消除闪烁 (shimmer),然后分析其运动。
- 更精确地对源素材片段进行插值(例如使用 NNEDI3)。利用上一步的运动分析结果,通过运动补偿对这个插值结果进行时域平滑处理。这样可以在保留细节的同时消除闪烁。对结果进行重新锐化以抵消可能产生的模糊。
- 最后进行一次轻度的时域平滑,以优化最终效果(在视频处理语境下,通常指去除残留的噪点、瑕疵或不稳定因素,使画面更纯净。)
阶段说明:
阶段0 & 1:使用二项式平滑(类高斯分布)消除去隔行闪烁,对应参数TR0(运动分析阶段)和TR1(初始输出阶段)
阶段2:使用线性平滑进行最终优化,对应参数TR2
技术要点:
TR0/TR1建议≥1以确保消闪效果,TR0=2可提升运动匹配精度
TR1/TR2值越大画面越稳定且降噪更强,但会牺牲细节并可能加剧运动分析错误导致的伪影
锐化参数可部分补偿平滑导致的模糊
消闪原理
算法专攻"场分离闪烁"(隔行信号插值产生的水平线闪烁)。修复模块Rep0/Rep1/Rep2通过只允许水平方向的修正变化,有效防止时间平滑导致的运动模糊。
运动分析参数
要点提示:预设已优化参数组合,非必要请勿修改。调整前请详阅MVTools2文档
| 参数 | 取值范围 | 说明 |
|---|---|---|
| SrchClipPP | 0-3 | 运动搜索画面预过滤:0=无,1=简易模糊,2=高斯模糊,3=高斯模糊+边缘柔化 |
| SubPel | 1/2/4 | 运动分析亚像素精度:1=整像素,2=1/2像素,4=1/4像素 |
| SubPelInterp | 0-2 | 亚像素插值算法:0=双线性(柔化),1=双立方(锐利),2=维纳(极锐) |
| Blocksize | 4-32 | 运动匹配块尺寸 |
| Overlap | 0-块尺寸/2 | 运动分析块重叠量(提升块边缘平滑度但增加计算量) |
| Search | 0-5 | 运动匹配搜索算法(详见MVTools2文档) |
| PelSearch | - | 最细亚像素层级的搜索参数 |
| ChromaMotion | bool | 是否分析色度运动(关闭可提速但可能误判) |
| Lambda | 0+ | 运动矢量场一致性系数(需按公式缩放) |
| LSAD | 0+ | 复杂运动区域降低一致性需求参数 |
| PNew | 0+ | 新运动矢量选择惩罚系数 |
| GlobalMotion | bool | 是否估计全局(摄像机)运动辅助分析 |
默认参数组合:
TrueMotion=false时:Lambda=(1000*块尺寸²)/64, LSAD=400, PNew=25
TrueMotion=true时:Lambda=(100*块尺寸²)/64, LSAD=1200, PNew=50
插值参数
要点提示:预设已优化插值方案,推荐使用NNEDI3系算法
| 参数 | 说明 |
|---|---|
| EdiMode | 插值算法:可选NNEDI3(推荐)、EEDI3、Yadif等 |
| NNSize | NNEDI3预测区域尺寸(非线性质级关系,详见NNEDI3文档) |
| NNeurons | NNEDI神经元数量(0-4,值越大质量越优) |
| EdiMaxD | EEDI系算法的空间搜索距离 |
| EdiThreads | 多线程数(0=自动=逻辑处理器数) |
| 示例配置: |
1 | QTGMC( Preset="Slow", EdiMode="EEDI3", EdiMaxD=16 ) # 指定EEDI3算法+16像素搜索半径 |
锐化参数
要点提示:建议始终根据实际效果调整Sharpness参数(默认1.0偏锐,使用源匹配时默认0.2)
| 参数 | 说明 |
|---|---|
| Sharpness | 锐化强度(0.0为原始画面) |
| SLMode | 锐化限制模式:0=关闭,[1/3=空间限制],[2/4=时间限制] |
| SLRad | 限制半径(时间模式仅支持0/1/3) |
| SOvs | 时间限制模式下允许的过冲量(微量过锐化许可) |
| SVThin | 单像素线细化强度(修复插值导致的线条膨胀) |
| 技术细节: |
时间限制模式(SLMode=2/4)防过锐效果更强但更吃性能
后期限制模式(SLMode=3/4)可保留更多锐度但可能产生伪影
Sbb参数可混合锐化前后画面提升细节保真度
源匹配 / 无损 (Source Match / Lossless)
注意:此功能的效果既微妙又精确,仅用于追求极致细节。请先确保您能够分辨出这些极致的细节。
核心要点 (Key Points):
源匹配 (Source-match) 通过额外的处理来创建保真度更高的输出。
通过设置 SourceMatch = 1, 2 或 3 来启用。数值越高,速度越慢,但精度也越高。
可与 无损 (Lossless) 设置(尤其是 Lossless=2)结合使用,以获取更多细节。
使用 MatchPreset(类似于 Preset)来调整速度。
该功能会保留源中的瑕疵 (artefacts),因此最适合用于高质量的源素材。
默认情况下,Sharpness(锐度)会变为 0.2,且锐度限制 (SLMode) 会被关闭,因此请谨慎调整锐度。
快速入门 (Quickstart):
以下模板的质量依次提高,但处理速度也依次变慢。请根据需要选择预设,但请注意,那些处理速度非常快的预设并不适合(与此功能搭配使用)。默认 Sharpness 为 0.2,但您可能希望稍微将其调高。
对于干净的源素材,设置 TR2=1。
如果需要更强的降噪效果,设置 TR2=2 或 TR2=3(速度更慢),或者使用(其他的)噪点处理功能。
1 | QTGMC( Preset=XXXX, SourceMatch=1, Sharpness=XXX, TR2=X ) # Basic mode, fastest |
直观上,一个反交错器应该只是在源视频中插入新的“场”(field),并保持原始像素不变。然而,本脚本中的时间模糊/锐化处理意味着上述情况并不会发生——源像素在输出中被改变了。(可选的)源匹配 (source-match) 步骤就是为了修复这个问题,让处理结果更接近源视频。其工作原理是:在算法的不同阶段检查输出与源的差异,并对这些差异进行校正。
匹配源视频可以捕捉更多源细节,并减少过度锐化/光晕(haloing)现象。需要注意的是: 默认算法会进行时间平滑处理,但源匹配模式下的平滑效果则要弱得多(这是其原理和设计所决定的)。源匹配可能会忠实地再现源视频中的瑕疵(例如色块、色带和一些噪点),因此更适合用于高质量的源素材。SourceMatch 设置用于设定模式:0=关闭(标准的 [Q]TGMC 算法),1、2、3 的精度和处理耗时依次递增。模式 2 和 3 能恢复几乎完全一样的源细节,但对噪点敏感,且偶尔会引入锯齿(aliasing)(模式 3 受影响较小)。模式 1 是一个更保守的折中方案,极少会引入瑕疵。
由于源匹配本身会恢复锐度,因此 Sharpness(锐度)的默认值被降低到了 0.2。源匹配模式起初可能看起来不如标准处理锐利,因为它不会进行过度锐化。然而,如果您要提高锐度,请务必小心,因为锐度限制功能默认是关闭的。这是因为锐度限制会降低这些(源匹配)模式的精确度。您可以使用 MatchEnhance 设置来增强模式 2 和 3 找回的额外细节。这会带来一种锐化/细节增强的效果,在合理的数值下效果很好——但这是一种取巧的手段,需要谨慎使用,因为它也很容易增强噪点。由于源匹配对源噪点很敏感,您可能需要将 TR2 设置为 2 或 3,和/或使用一些噪点处理(见下文)。
额外的无损 (Lossless) 模式旨在将源匹配的理念推向其逻辑终点:无损模式 1 会将源的精确像素恢复到输出中(前提是 NoiseRestore=0)。这种模式能恢复更多一点的源细节,但也可能引入闪烁(shimmering)、轻微拉丝(combing)、噪点等问题。请注意,Sharpness 和 MatchEnhance 设置在无损模式 1 中几乎没有效果。无损模式 2 则是在进行锐化和最终的时间平滑之前,使剪辑达到无损状态。这能消除大部分无损模式带来的瑕疵,并且也允许进行锐度控制。该模式不会提供完全无损的输出,但能获取到更多一点的细节。
源匹配设置会引入额外的处理流程。SourceMatch 模式 1 需要进行第二次插值(例如 NNEDI3),但它可以使用比主处理阶段质量更低的设置。SourceMatch 模式 2 需要再进行一次插值,但仅使用 bob 插值就能有效工作(不过使用更好的插值器可以减少偶尔出现的锯齿)。模式 3 只增加了少量额外处理,但通常是值得的,因为它能减少瑕疵。用户无法精确控制这些插值所用的具体参数(因为需要的设置项太多),作为替代,提供了 MatchPresets 预设,其工作方式与主 Preset 预设类似。额外的处理流程听起来会让速度慢很多,但实际上,将源匹配与高速预设(MatchPreset 和 Preset 两者)结合使用,其效果可以媲美不开启源匹配时的慢速预设。话虽如此,源匹配带来的额外细节非常微妙,对于那些速度极快的主预设来说,其效果可能并不显著。
| 参数 (Parameter) | 可选值 (Values) | 描述 (Description) |
|---|---|---|
SourceMatch |
(0,1,2,3) |
0 = 关闭源匹配 (标准算法), 1 = 基础源匹配, 2 = 精细匹配, 3 = 二次精细匹配。 |
Lossless |
(0,1,2) |
将源的精确场 (field) 放入结果中并清理任何瑕疵。0=关闭, 1=在最终时间平滑后, 2=在重新锐化前。此模式会增加一些额外细节,但:模式 1 会产生闪烁/轻微拉丝,模式 2 更稳定、可调性更高,但并非严格无损。默认值:0 |
以下参数仅当 SourceMatch = 1, 2, 3 时生效 |
||
MatchPreset |
(字符串) |
用于基础源匹配处理的速度/质量预设,可选:"Placebo", "Very Slow", "Slower", "Slow", "Medium", "Fast", "Faster", "Very Fast", "Super Fast", "Ultra Fast" (无 "Draft")。理想选择是与主 Preset 预设相同,但也可以选择一个更快的设置(但不能更慢)。默认值:比主 Preset 快 3 档。 |
MatchEdi |
(字符串) |
覆盖基础源匹配的默认插值方法。默认方法与主 EdiMode 设置相同(通常是 NNEDI3)。仅当主插值使用慢速方法(如 EEDI3)而您希望为源匹配使用一个更快的方法时,才需要覆盖此项。默认值:EdiMode 的值。 |
以下参数仅当 SourceMatch = 2, 3 时生效 |
||
MatchPreset2 |
(字符串) |
用于精细源匹配处理的速度/质量预设,可选值同上。通常使用较快的设置就足够了,但如果出现额外的锯齿,使用较慢的设置会很有用。默认值:比 MatchPreset 快 2 档。 |
MatchEdi2 |
(字符串) |
覆盖精细源匹配的插值方法。为了提升速度,选择 MatchEdi2="Bob" 是个好主意。默认值:NNEDI3 |
MatchTR2 |
(0,1,2) |
用于精细源匹配的时间半径。2=更平滑, 1=更快/更锐利, 0=不推荐。效果差异非常微小。基础源匹配不需要此设置,因为其时间半径必须与核心设置 TR1 匹配(即不存在 MatchTR1)。默认值:1 |
MatchEnhance |
(0.0...) |
增强源匹配模式 2 和 3 找回的细节。这是一种取巧的手段——如果设置过高会增强噪点。最好设置在 1.0 以下。默认值:0.5 |
JET
https://github.com/Jaded-Encoding-Thaumaturgy/vs-jetpack/issues/135
1 | src = core.std.SetFrameProp(src, prop="_FieldBased", intval=0) |
上面的 issue 需要这个代码
对于 vs-jetpack
可以使用 deepwiki
https://deepwiki.com/search/-qtempgaussmcinputtyperepair-d_5c969c27-a961-47e9-8d11-9d9f99fefbfd
上面需要注意是 sharpen 那块里面都是 float,里面的数值有问题会导致报错。