-
Notifications
You must be signed in to change notification settings - Fork 222
3_K7sfunc
mpv专用的vs包装器
模块化各vs滤镜 ——
简化脚本内调用的方式,降低仓库内已公开的vapoursynth滤镜的使用门槛;
便于在单个vpy脚本中快速合并多个效果,减少串联多个vf产生的多余性能损失。
大致分为五个组:“格式控制” “超分”(SR) “运动补偿”(MEMC) “降噪”(NR) “其它”(ETC)
每组可用的具体模块说明跳转后方的详细介绍。
- 安装前置环境 Python + VapourSynth ,此步骤的教程可参考 mpv通用教程(#vapoursynth) / mpv通用教程补充 / 从零部署
(使用 mpv-lazy 可跳过此步) -
k7sfunc.py 为常规的python脚本,下载后放入python path即可被自动读取。(以mpv-lazy的预设方式,放在
python.exe同路径下即可)
执行完此步骤即视为“安装完毕”。 - 依据自己要使用的模块下载对应的依赖,此步骤的教程可参考步骤1
(使用 mpv-lazy 可直接下载release页面的 Lite Cuda 包) - 根据此包装器编写自己的滤镜组合脚本,然后通过mpv的
vf=vapoursynth="X/path/to/test.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👉 从减少命名冲突的角度出发,使用另一种“安全方法”导入更好(示例),不过会影响后续的写法(参见Tips):
import k7sfunc as k7f第四行将 video_in (这是由mpv提供的)即视频,赋值给自己定义的变量 step01 ;
第五行使用模块 FMT_CTRL (这是由K7sfunc导入的),处理 step01 ,转换为常规的8位视频,并将结果赋值给 step02 ;
第六行使用另一个模块 MVT_LQ (这也是由K7sfunc导入的),处理 step02 , container_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()👉 如果你使用了“安全方法”进行导入,模块名在使用的时候要修改(第六行的示例):
step03 = k7f.MVT_LQ(input=step02, fps_in=container_fps, fps_out=display_fps)更多示例可参考仓库内的vpy脚本
对应版本 0.1.5
-
带
_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(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(input=clip, fps_in=24.0, fps_out=60.0, vs_t=?)用于转换帧率(不支持VFR)。
-
fps_in浮点值。指定输入源的帧率 -
fps_out浮点值。指定输出的帧率
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的值
所需依赖: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
所需依赖: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(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制
在禁用 lt_hd 的情况下,使用动态引擎时的首选优化分辨率为1280x720,启用该选项后,优化分辨率则为1920x1080。
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<0|2|5000|5001|5002|5003|5004> 使用的模型,0为realesr-animevideoxs,2为realesr-animevideov3,5000-5004分别为janai的最快和最好质量型号 -
scale<1|2|3|4> 放大倍率,1为不放大。animevideoxs模型原生放大2倍,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(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制
在禁用 lt_hd 的情况下,使用动态引擎时的首选优化分辨率为1280x720,启用该选项后,优化分辨率则为1920x1080。
所需依赖: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(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(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制
所需依赖: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模式
所需依赖:MVTools
MVT_STD(input=clip, fps_in=23.976, fps_out=59.940, vs_t=?)补帧至任意帧率(不支持VFR)。
-
fps_in浮点值。指定输入源的帧率 -
fps_out浮点值。指定输出帧率
所需依赖:MVTools
MVT_POT(input=clip, fps_in=23.976, fps_out=59.940, vs_t=?)用mvtools的block或flow模式补帧至任意帧率(不支持VFR;移植自Potplayer)。
-
fps_in浮点值。指定输入源的帧率 -
fps_out浮点值。指定输出帧率
所需依赖:MVTools
MVT_MQ(input=clip, fps_in=23.976, fps_out=59.940, qty_lv=1, block=True, blksize=8, thscd1=360, thscd2=80, vs_t=?)用mvtools的block或flow模式补帧至任意帧率(不支持VFR;修改自xvs)。
-
fps_in浮点值。指定输入源的帧率 -
fps_out浮点值。指定输出帧率 -
qty_lv<1|2|3> 质量等级 -
block<True|False> 是否使用Block模式 -
blksize<4|8|16|32> 块尺寸 -
thscd1整数,块阈值1 -
thscd2<0~255> 整数,块阈值2
所需依赖: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> 指定显卡线程数
所需依赖: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(自动为动态引擎进行双倍处理),设为低于此数的值即为不限制
所需依赖:Miscellaneous_Filters + MVTools + vsmlrt
RIFE_NV_ORT(input=clip, sc_mode=1, fps_num=2, cudnn=False, ext_proc=False, gpu=0, gpu_t=2, vs_t=?)用 rife v4.6 补帧至固定整数倍。(尽量改用 RIFE_STD ,因为此模块的效率比它还低)
-
sc_mode<0|1|2> 场景切换检测的模式,0为禁用 -
fps_num<2|3|4> 补帧倍率 -
cudnn<True|False> 是否使用cudnn(提速但会导致跳转变慢与瞬时的高显存消耗) -
ext_proc<True|False> 是否使用外部的填充裁切处理 -
gpu<0|1|2> 指定显卡,0为排序一号 -
gpu_t<1|2|3> 指定显卡线程数
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(input=clip, fps_in=23.976, fps_out=1, cpu=0, 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(input=clip, fps_in=23.976, fps_dp=1, cpu=0, 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为排序一号
SVP_PRO(input=clip, fps_in=23.976, fps_num=2, fps_den=1, abs=False, cpu=0, nvof=False, gpu=0, vs_t=?)用svpflow算法(修改自mvtools的flow模式)补帧(修改自 BlackMickey 的方案)。
-
fps_in浮点值。指定输入源的帧率 -
fps_num整数值 -
fps_den整数值 -
abs<True|False> 当为True时,fps_num/fps_den 的计算结果为输出的帧率;否则为输出的倍率 -
cpu<0|1> 是否只使用CPU,0为启用显卡加速 -
nvof<True|False> 是否使用nvdia optical flow(启用时需要启用显卡加速) -
gpu<0|11|12|21> 指定显卡,0为排序一号
所需依赖: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为排序一号
所需依赖:akarin
CCD_STD(input=clip, nr_lv=20.0, vs_t=?)降低彩噪。
-
nr_lv浮点值。降噪强度
所需依赖: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整数。使用的处理器线程
所需依赖: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为排序一号
所需依赖: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> 指定显卡线程数
所需依赖:EEDI2CUDA
AA_NV(input=clip, gpu=-1, gpu_t=2, vs_t=?)用eedi2算法抗锯齿。
-
gpu<-1|0|1|2> 指定显卡,0为排序一号,-1为自动 -
gpu_t<1|2|3> 指定显卡线程数
所需依赖: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> 最终输出的色深
所需依赖: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(input=clip, fps_in=23.976, ivtc_m=1, vs_t=?)反转错误的帧率变换(仅限伪25/30帧转24帧)。
-
fps_in浮点值。指定输入源的帧率 -
ivtc_m<1|2> ivtc模式,分别对应 vivtc tivtc
所需依赖:Miscellaneous_Filters + MVTools + RemoveGrain + TemporalSoften2
STAB_STD(input=clip, vs_t=?)镜头防抖(此类问题常见于胶片转录作品)
所需依赖:Miscellaneous_Filters + MVTools + RemoveGrain
STAB_HQ(input=clip, vs_t=?)镜头防抖(此类问题常见于胶片转录作品)
所需依赖:vsmlrt
UAI_NV_TRT(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/ 。