Skip to content

3_K7sfunc

hooke007 edited this page Apr 25, 2023 · 136 revisions

K7sfunc

mpv专用的vs包装器

主要特点

模块化各vs滤镜 ——
简化脚本内调用的方式,降低仓库内已公开的vapoursynth滤镜的使用门槛;
便于在单个vpy脚本中快速合并多个效果,减少串联多个vf产生的多余性能损失。

可用模块

大致分为五个组:“格式控制” “超分”(SR) “运动补偿”(MEMC) “降噪”(NR) “其它”(ETC)

每组可用的具体模块说明跳转后方的详细介绍。

使用引导

  1. 安装前置环境 Python + VapourSynth ,此步骤的教程可参考 mpv通用教程(#vapoursynth) / mpv通用教程补充 / 从零部署
    (使用 mpv-lazy 可跳过此步)
  2. k7sfunc.py 为常规的python脚本,下载后放入python path即可被自动读取。(以mpv-lazy的预设方式,放在 python.exe 同路径下即可)
    执行完此步骤即视为“安装完毕”。
  3. 依据自己要使用的模块下载对应的依赖,此步骤的教程可参考步骤1
    (使用 mpv-lazy 可直接下载release页面的 Lite Cuda 包)
  4. 根据此包装器编写自己的滤镜组合脚本,然后通过mpv的 vf=vapoursynth="X/path/to/test.vpy" 启用它。

创建自定义vpy脚本

示例如下 ——

import vapoursynth as vs
from vapoursynth import core
from k7sfunc import *
step01 = video_in
step02 = FMT_CTRL(input=step01, fmt_pix=1)
step03 = MVT_LQ(input=step02, fps_in=container_fps, fps_out=display_fps)
step03.set_output()

前两行为固定内容(如果你只使用K7sfunc模块内的功能,可以不写)。第三行为导入K7sfunc的所有模块,如果你只想导入指定的模块,则此处改写为(示例):

from k7sfunc import FMT_CTRL, MVT_LQ

第四行将 video_in (这是由mpv提供的)即视频,赋值给自己定义的变量 step01 ;

第五行使用模块 FMT_CTRL (这是由K7sfunc导入的),处理 step01 ,转换为常规的8位视频,并将结果赋值给 step02 ;

第六行使用另一个模块 MVT_LQ (这也是由K7sfunc导入的),处理 step02container_fps display_fps (也都是由mpv提供的)分别表示源帧率和显示刷新率,即补帧到显示器的等值帧率,并将结果赋值给 step03 ;

最后一行即输出 step03 ,如果无误,即正常输出补帧后的视频。

TIPS:

在向模块内传递参数的时候,可以省略为(第六行的示例):

step03 = MVT_LQ(step02, container_fps, display_fps)

简略的前提是顺序要和模块内一一对应,也可以简略和完整混合,即:

step03 = MVT_LQ(step02, fps_in=container_fps, fps_out=display_fps)

使用完整写法的参数可以改变顺序,即:

step03 = MVT_LQ(step02, fps_out=display_fps, fps_in=container_fps)

为了进一步方便,会使用同名变量不断更新赋值,即:

import vapoursynth as vs
from vapoursynth import core
from k7sfunc import *
clip = video_in
clip = FMT_CTRL(clip, fmt_pix=1)
clip = MVT_LQ(clip, fps_in=container_fps, fps_out=display_fps)
clip.set_output()

更多示例可参考仓库内的vpy脚本

模块说明

对应版本 0.0.10

  • _NV 后缀的模块为nvidia RTX显卡专用。

  • 各模块的参数 input 都是必填项,其它见各自的介绍。示例即默认值。
    各模块的末尾参数 vs_t 是特殊项,表示该模块使用的vs线程数量(如无特殊需求就不要设置它),其值通常默认自动处理且最大不超过16,你可以手动指定到其它的固定值。

如需启用全部功能需要下载外部依赖。只需要指定模块的则只下载模块对应的依赖即可。(注意依赖链接的说明里可能会进一步要求你安装更多前置/附属依赖)

全部依赖汇总 展开查看

Anime4KCPP
akarin
BM3DCUDA_RTC
Bwdif
EEDI2CUDA
EEDI3 FFT3DFilter
fmtconv
KNLMeansCL
libfftw3f-3.dll
Miscellaneous_Filters
mvsfunc
MVTools
Neo_f3kdb
Neo_FFT3D
nnedi3_resample
NNEDI3CL
RemoveGrain
RIFE
TDeintMod
TemporalSoften2
TIVTC
SVPflow1
SVPflow2
VIVTC
VMAF
vs-nlm-ispc
vs-nlm-cuda
vsmlrt
Yadifmod
znedi3

格式控制


FMT_CTRL

FMT_CTRL(input=clip, h_max=0, h_ret=False, fmt_pix=0, vs_t=?)

用于检测或限制尺寸、像素格式。

  • h_max 整数值。表示检测的最大高度限制
  • h_ret <True|False> 当为 True 时,中断后续执行。否则转换输入源到 h_max 指定的高度
  • fmt_pix <0|1|2|3> vs的像素格式,0表示自动,其它几个值分别对应 yuv420p8 yuv420p10 yuv444p16

P.S. 简易的使用 FMT_CTRL(input=clip) 来限制或转换输入源在YUV10位内


FPS_CHANGE

FPS_CHANGE(input=clip, fps_in=24.0, fps_out=60.0, vs_t=?)

用于转换帧率(不支持VFR)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_out 浮点值。指定输出的帧率

FPS_CTRL

FPS_CTRL(input=clip, fps_in=23.976, fps_max=32.0, fps_out=None, fps_ret=False, vs_t=?)

用于检测或限制帧率。

  • fps_in 浮点值。指定输入源的帧率
  • fps_max 浮点值。指定检测的最大帧率
  • fps_out (可选)浮点值
  • fps_ret <True|False> 当为 True 时,中断后续执行。否则转换输入源到 fps_out 指定的帧率,如果 fps_out 未填写则使用 fps_max 的值

超分


ACNET_STD

所需依赖:Anime4KCPP

ACNET_STD(input=clip, nr=1, nr_lv=1, gpu=0, gpu_m=1, vs_t=?)

使用acnet算法固定放大两倍,附带降噪(只适合Anime风格)。
追求速度应使用着色器版本,例如 ACNet_HDN_L1.glsl

  • nr <0|1> 是否降噪,0为禁用
  • nr_lv <1|2|3> 降噪强度
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_m <1|2> 选择其中一种显卡加速模式,分别对应 opencl cuda

CUGAN_NV

所需依赖:vsmlrt

CUGAN_NV(input=clip, lt_hd=False, nr_lv=-1, gpu=0, gpu_t=2, st_eng=False, ws_size=0, vs_t=?)

用 Real-CUGAN (pro) 固定放大两倍,附带降噪(只适合Anime风格)。

  • lt_hd <True|False> 是否对超过HD分辨率(720P)的源进行处理
  • nr_lv <-1|0|3> 降噪强度,-1为不降噪
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数
  • st_eng <True|False> 是否使用静态引擎(需要对不同分辨率的源各进行预处理);动态引擎自适应不同分辨率(64²→DCI2K)
  • ws_size 大于0的整数。约束显存(MiB),静态引擎的最小值为128(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制

ESRGAN_NV

所需依赖:fmtconv + vsmlrt

ESRGAN_NV(input=clip, lt_hd=False, model=5000, scale=2, gpu=0, gpu_t=2, st_eng=False, ws_size=0, vs_t=?)

用 Real-ESRGAN 固定放大整数倍(只适合Anime风格)。

  • lt_hd <True|False> 是否对超过HD分辨率(720P)的源进行处理
  • model <2|5000|5001|5002|5003|5004> 使用的模型,2为realesr-animevideov3,5000-5004分别为janai的最快和最好质量型号
  • scale <1|2|3|4> 放大倍率,1为不放大。animevideov3模型原生放大4倍,janai模型原生放大2倍
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数
  • st_eng <True|False> 是否使用静态引擎(需要对不同分辨率的源各进行预处理);动态引擎自适应不同分辨率(64²→DCI2K)
  • ws_size 大于0的整数。约束显存(MiB),静态引擎的最小值为128(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制

NNEDI3_STD

所需依赖:fmtconv + mvsfunc + nnedi3_resample + NNEDI3CL + znedi3

NNEDI3_STD(input=clip, ext_proc=True, nsize=4, nns=3, cpu=True, gpu=-1, vs_t=?)

用nnedi3算法固定放大两倍。
追求速度应使用着色器版本,例如 nnedi3_nns128_win8x4.glsl

  • ext_proc <True|False> 是否使用外部的格式转换处理(提速)
  • nsize <0|4> 分别对应 8x6 8x4
  • nns <2|3|4> 分别对应 64 128 256
  • cpu <True|False> 分别对应使用cpu还是gpu
  • gpu <-1|0|1|2> 指定显卡,0为排序一号,-1为自动

WAIFU_NV

所需依赖:fmtconv + vsmlrt

WAIFU_NV(input=clip, lt_hd=False, nr_lv=1, scale=2, gpu=0, gpu_t=2, st_eng=False, ws_size=0, vs_t=?)

用 waifu2x (upconv_7_anime_style_art_rgb) 固定放大整数倍(只适合Anime风格)。

  • lt_hd <True|False> 是否对超过HD分辨率(720P)的源进行处理
  • nr_lv <-1|0|1|2|3> 降噪强度,-1为不降噪
  • scale <1|2|3|4> 放大倍率,1为不放大,原生放大倍率为2倍
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数
  • st_eng <True|False> 是否使用静态引擎(需要对不同分辨率的源各进行预处理);动态引擎自适应不同分辨率(64²→DCI2K)
  • ws_size 大于0的整数。约束显存(MiB),静态引擎的最小值为128(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制

运动补偿


MVT_LQ

所需依赖:MVTools

MVT_LQ(input=clip, fps_in=23.976, fps_out=59.940, recal=True, block=True, vs_t=?)

补帧至任意帧率(不支持VFR)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_out 浮点值。指定输出帧率
  • recal <True|False> 是否使用二次分析
  • block <True|False> 是否使用Block模式

MVT_STD

所需依赖:MVTools

MVT_STD(input=clip, fps_in=23.976, fps_out=59.940, vs_t=?)

补帧至任意帧率(不支持VFR)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_out 浮点值。指定输出帧率

MVT_POT

所需依赖:MVTools

MVT_POT(input=clip, fps_in=23.976, fps_out=59.940, vs_t=?)

用mvtools的block或flow模式补帧至任意帧率(不支持VFR;移植自Potplayer)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_out 浮点值。指定输出帧率

RIFE_STD

所需依赖:Miscellaneous_Filters + MVTools + RIFE + VMAF

RIFE_STD(input=clip, sc_mode=1, stat_th=60.0, fps_num=2, fps_den=1, gpu=0, gpu_t=2, st_eng=False, ws_size=0, vs_t=?)

用 rife v4.6 补帧至任意倍率。

  • sc_mode <0|1|2> 场景切换检测的模式,0为禁用
  • stat_th 浮点值。静止帧的检测阈值,不对该类帧进行补偿计算
  • fps_num 整数
  • fps_den 整数。fps_num/fps_den 的值即帧率倍数(计算结果可为浮点)
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数

RIFE_NV

所需依赖:Miscellaneous_Filters + MVTools + vsmlrt

RIFE_NV(input=clip, lt_d2k=False, sc_mode=1, fps_num=2, t_tta=False, ext_proc=True, gpu=0, gpu_t=2, vs_t=?)

用 rife v4.6 补帧至固定整数倍。

  • lt_d2k <True|False> 是否对超过DCI2K分辨率的源进行补帧
  • sc_mode <0|1|2> 场景切换检测的模式,0为禁用
  • fps_num <2|3|4> 补帧倍率
  • t_tta <True|False> 是否使用ensemble版模型
  • ext_proc <True|False> 是否使用外部的填充裁切处理(禁用将强制锁定为静态引擎)
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数
  • st_eng <True|False> 是否使用静态引擎(需要对不同分辨率的源各进行预处理);动态引擎自适应不同分辨率(QVGA→DCI4K)
  • ws_size 大于0的整数。约束显存(MiB),静态引擎的最小值为128(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制

SVP_LQ

所需依赖:SVPflow1 + SVPflow2

SVP_LQ(input=clip, fps_in=23.976, fps_num=2, cpu=0, gpu=0, vs_t=?)

用svpflow算法(修改自mvtools的flow模式)补帧至固定整数倍。

  • fps_in 浮点值。指定输入源的帧率
  • fps_num <2|3|4> 补帧倍率
  • cpu <0|1> 是否只使用CPU,0为禁用
  • gpu <0|11|12|21> 指定显卡,0为排序一号

SVP_STD

所需依赖:SVPflow1 + SVPflow2

SVP_STD(input=clip, fps_in=False, fps_out=1, cpu=2, gpu=0, vs_t=?)

用svpflow算法(修改自mvtools的flow模式)补帧至任意帧率(不支持VFR)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_out 浮点值。指定输出的帧率
  • cpu <0|1> 是否只使用CPU,0为禁用
  • gpu <0|11|12|21> 指定显卡,0为排序一号

SVP_HQ

所需依赖:SVPflow1 + SVPflow2

SVP_HQ(input=clip, fps_in=False, fps_dp=1, cpu=2, gpu=0, vs_t=?)

用svpflow算法(修改自mvtools的flow模式)补帧至60(不支持VFR;移植自 natural-harmonia-gropius 的旧脚本)。

  • fps_in 浮点值。指定输入源的帧率
  • fps_dp 浮点值。指定显示器刷新率
  • cpu <0|1> 是否只使用CPU,0为禁用
  • gpu <0|11|12|21> 指定显卡,0为排序一号

降噪


BM3D_NV

所需依赖:BM3DCUDA_RTC

BM3D_NV(input=clip, nr_lv=[5,1,1], bs_ref=8, bs_out=7, gpu=0, vs_t=?)

用bm3d算法降噪。

  • nr_lv 整数组。每平面的降噪强度
  • bs_ref <1|2|3|4|5|6|7|8> 参考帧的block_step
  • bs_out <1|2|3|4|5|6|7|8> 处理帧的block_step,应小于 bs_ref 的值
  • gpu <0|1|2> 指定显卡,0为排序一号

CCD_STD

所需依赖:akarin

CCD_STD(input=clip, nr_lv=20.0, vs_t=?)

降低彩噪。

  • nr_lv 浮点值。降噪强度

FFT3D_STD

所需依赖:FFT3DFilter + libfftw3f-3.dll + Neo_FFT3D

FFT3D_STD(input=clip, mode=1, nr_lv=2.0, plane=[0], frame_bk=3, cpu_t=6, vs_t=?)

用fft3d算法降噪。

  • mode <1|2> fft3d内核,分别对应 FFT3DFilter Neo-FFT3D
  • nr_lv 浮点值。降噪强度
  • plane 整数组。降噪处理的平面,全平面即 [0, 1, 2]
  • frame_bk <-1|0|1|2|3|4|5> -1=仅锐化和去光晕 // 0=Temporal Kalman // 1=2D (spatial) Wiener // 2 --- 5 =N帧的3D Wiener
  • cpu_t 整数。使用的处理器线程

NLM_STD

所需依赖:KNLMeansCL + RemoveGrain + vs-nlm-ispc

NLM_STD(input=clip, blur_m=2, nlm_m=1, frame_num=1, rad_sw=2, rad_snw=2, nr_lv=3.0, gpu=0, vs_t=?)

用NL-means算法降噪。
追求速度应使用着色器版本,例如 ../shaders/nlmeans.glsl

  • blur_m <0|1|2> 分离模式。0为不使用
  • nlm_m <1|2> 降噪核心,分别对应 OpenCL cpu
  • frame_num 整数。降噪帧数
  • rad_sw 整数。搜索窗口半径
  • rad_snw 整数。近邻窗口半径
  • nr_lv 浮点值。降噪强度
  • gpu <0|1|2> 指定显卡,0为排序一号

NLM_NV

所需依赖:RemoveGrain + vs-nlm-cuda

NLM_NV(input=clip, blur_m=2, frame_num=1, rad_sw=2, rad_snw=2, nr_lv=3.0, gpu=0, gpu_t=2, vs_t=?)

用NL-means算法降噪。
追求速度应使用着色器版本,例如 ../shaders/nlmeans.glsl

  • blur_m <0|1|2> 分离模式。0为不使用
  • frame_num 整数。降噪帧数
  • rad_sw 整数。搜索窗口半径
  • rad_snw 整数。近邻窗口半径
  • nr_lv 浮点值。降噪强度
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数

其它


AA_NV

所需依赖:EEDI2CUDA

AA_NV(input=clip, plane=[0], gpu=-1, gpu_t=2, vs_t=?)

用eedi2算法抗锯齿。(存在问题:不能跳转,不可撤销。)

  • plane 整数组。抗锯齿处理的平面,全平面即 [0, 1, 2]
  • gpu <-1|0|1|2> 指定显卡,0为排序一号,-1为自动
  • gpu_t <1|2|3> 指定显卡线程数

DEBAND_STD

所需依赖:Neo_f3kdb

DEBAND_STD(input=clip, bd_range=15, bdy_rth=48, bdc_rth=48, grainy=48, grainc=48, spl_m=4, grain_dy=True, depth=8, vs_t=?)

用f3kdb算法去色带。

  • bd_range 整数。色带检测范围
  • bdy_rth 整数。色带检测阈值 —— Y平面
  • bdc_rth 整数。色带检测阈值 —— CbCr平面
  • grainy 整数。最后阶段添加的颗粒数 —— Y平面
  • grainc 整数。最后阶段添加的颗粒数 —— CbCr平面
  • spl_m <1|2|3|4> 采样模式,分别对应 Column Square Row Average(Column&Row)
  • grain_dy <True|False> 是否使用动态颗粒
  • depth <8|10> 最终输出的色深

DEINT_STD

所需依赖:Bwdif + EEDI3 + NNEDI3CL + TDeintMod + Yadifmod + znedi3

DEINT_STD(input=clip, ref_m=1, gpu=-1, deint_m=1, vs_t=?)

反交错。输出帧率为双倍

  • ref_m <1|2|3> 参考模式,分别对应 nnedi3(cpu) nnedi3(opencl) eedi3(opencl)
  • gpu <-1|0|1|2> 指定显卡,0为排序一号,-1为自动
  • deint_m <1|2|3> 去隔行的执行核心,分别对应 bwdif yadifmod tdm

IVTC_STD

所需依赖:TIVTC + VIVTC

IVTC_STD(input=clip, fps_in=23.976, ivtc_m=1, vs_t=?)

反转错误的帧率变换(仅限伪25/30帧转24帧)。

  • fps_in 浮点值。指定输入源的帧率
  • ivtc_m <1|2> ivtc模式,分别对应 vivtc tivtc

STAB_STD

所需依赖:Miscellaneous_Filters + MVTools + RemoveGrain + TemporalSoften2

STAB_STD(input=clip, vs_t=?)

镜头防抖(此类问题常见于胶片转录作品)


STAB_HQ

所需依赖:Miscellaneous_Filters + MVTools + RemoveGrain

STAB_HQ(input=clip, vs_t=?)

镜头防抖(此类问题常见于胶片转录作品)


UAI_TRT_NV

所需依赖:vsmlrt

UAI_TRT_NV(input=clip, model_pth="", res_opt=None, res_max=None, opt_lv=3, fp16=False, gpu=0, gpu_t=2, st_eng=False, ws_size=0, vs_t=?)

使用自定义的ONNX模型

  • model_pth 模型路径,当前仅支持读取在同内建模型路径的模型,示例 "test/yourmodel.onnx"
  • opt_lv <0|1|2|3|4|5> 构建优化等级
  • fp16 <True|False> 是否使用半精度浮点
  • gpu <0|1|2> 指定显卡,0为排序一号
  • gpu_t <1|2|3> 指定显卡线程数
  • st_eng <True|False> 是否使用静态引擎(需要对不同分辨率的源各进行预处理);动态引擎自适应不同分辨率( 64x64 → res_max 的值)
  • res_opt (如果使用静态引擎则不写,即填None)模型的首选优化分辨率,示例 [1920, 1080]
  • res_max (如果使用静态引擎则不写,即填None)模型的最大支持的分辨率,示例 [3840, 2160]
  • ws_size 大于0的整数。约束显存(MiB),静态引擎的最小值为128(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制

如果你使用的是 mpv-lazy ,则内建模型的路径为 ...mpv-lazy/vapoursynth64/plugins/models/


Clone this wiki locally