From 1c69351b14482fbb6d8aab7ffffd32898f59cac0 Mon Sep 17 00:00:00 2001 From: fennek182 Date: Thu, 11 Jun 2026 18:45:07 +0200 Subject: [PATCH] readded mpv vapoursynth filter after renaming, whoopsie --- .../filters/motioninterpolation-mvtools.vpy | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .config/mpv/filters/motioninterpolation-mvtools.vpy diff --git a/.config/mpv/filters/motioninterpolation-mvtools.vpy b/.config/mpv/filters/motioninterpolation-mvtools.vpy new file mode 100644 index 0000000..8cd8245 --- /dev/null +++ b/.config/mpv/filters/motioninterpolation-mvtools.vpy @@ -0,0 +1,45 @@ +# vim: set ft=python: + +import vapoursynth as vs + +core = vs.core +core.std.LoadPlugin( + path="/usr/lib/python3.14/site-packages/vapoursynth/plugins/mvtools.so" +) +clip = video_in + +dst_fps = display_fps +# Interpolating to fps higher than 60 is too CPU-expensive, smoothmotion can handle the rest. +while dst_fps > 60: + dst_fps = 60 + +dst_fps = 144 + +# Skip interpolation for > 4K or 60 Hz content due to performance +if not (clip.width > 3840 or clip.height > 2160 or container_fps > 59): + src_fps_num = int(container_fps * 1e8) + src_fps_den = int(1e8) + dst_fps_num = int(dst_fps * 1e4) + dst_fps_den = int(1e4) + # Needed because clip FPS is missing + clip = core.std.AssumeFPS(clip, fpsnum=src_fps_num, fpsden=src_fps_den) + print( + "Reflowing from ", + src_fps_num / src_fps_den, + " fps to ", + dst_fps_num / dst_fps_den, + " fps.", + ) + + sup = core.mv.Super(clip, pel=2, hpad=16, vpad=16) + bvec = core.mv.Analyse( + sup, blksize=16, isb=True, chroma=True, search=3, searchparam=1 + ) + fvec = core.mv.Analyse( + sup, blksize=16, isb=False, chroma=True, search=3, searchparam=1 + ) + clip = core.mv.BlockFPS( + clip, sup, bvec, fvec, num=dst_fps_num, den=dst_fps_den, mode=3, thscd2=12 + ) + +clip.set_output()