minor mpv config cleanup

This commit is contained in:
2026-06-11 18:43:11 +02:00
parent 795cf18368
commit d4241fc61c
5 changed files with 7 additions and 218 deletions
@@ -1,28 +0,0 @@
# vim: set ft=python:
import vapoursynth as vs
from vapoursynth import core
clip = video_in
#You can change the desired framerate here
dst_fps = display_fps
#BlockSize can be changed to 16 for better performance
BlockSize=8
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.")
#Pel can be changed to 4 for better accuracy or 1 for better speed
sup = core.mv.Super(clip, pel=2, hpad=BlockSize, vpad=BlockSize)
bvec = core.mv.Analyse(sup, blksize=BlockSize, isb=True , chroma=True, search=3, searchparam=1)
fvec = core.mv.Analyse(sup, blksize=BlockSize, 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()
@@ -1,78 +0,0 @@
# vim: set ft=python:
# see the README at https://gist.github.com/phiresky/4bfcfbbd05b3c2ed8645
# source: https://github.com/mpv-player/mpv/issues/2149
# source: https://github.com/mpv-player/mpv/issues/566
# source: https://github.com/haasn/gentoo-conf/blob/nanodesu/home/nand/.mpv/filters/mvtools.vpy
import vapoursynth
core = vapoursynth.core
# ref: http://avisynth.org.ru/mvtools/mvtools2.html#functions
# default is 400, less means interpolation will only happen when it will work well
ignore_threshold = 400
# if n% of blocks change more than threshold then don't interpolate at all (default is 51%)
scene_change_percentage = 51
dst_fps = 144
# Interpolating to fps higher than 60 is too CPU-expensive, smoothmotion can handle the rest.
while dst_fps > 60:
dst_fps /= 2
if "video_in" in globals():
# realtime
clip = video_in
# Needed because clip FPS is missing
src_fps_num = int(container_fps * 1e8)
src_fps_den = int(1e8)
clip = core.std.AssumeFPS(clip, fpsnum=src_fps_num, fpsden=src_fps_den)
else:
# run with vspipe
clip = core.ffms2.Source(source=in_filename)
dst_fps = float(dst_fps)
# resolution in megapixels. 1080p ≈ 2MP, 720p ≈ 1MP
mpix = clip.width * clip.height / 1000000
# Skip interpolation for >1080p or 60 Hz content due to performance
if not (mpix > 2.5 or clip.fps_num / clip.fps_den > 59):
analParams = {
"overlap": 0,
"search": 3,
"truemotion": True,
#'chrome': True,
#'blksize':16,
#'searchparam':1
}
blockParams = {
"thscd1": ignore_threshold,
"thscd2": int(scene_change_percentage * 255 / 100),
"mode": 3,
}
# default 1.5 or so
if mpix > 4.5:
# can't handle these on Full HD with Intel i5-2500k
# see the description of these parameters in http://avisynth.org.ru/mvtools/mvtools2.html#functions
analParams["search"] = 0
blockParams["mode"] = 0
quality = "low"
else:
quality = "high"
dst_fps_num = int(dst_fps * 1e4)
dst_fps_den = int(1e4)
print(
"Reflowing from {} fps to {} fps (quality={})".format(
clip.fps_num / clip.fps_den, dst_fps_num / dst_fps_den, quality
)
)
sup = core.mv.Super(clip, pel=2)
bvec = core.mv.Analyse(sup, isb=True, **analParams)
fvec = core.mv.Analyse(sup, isb=False, **analParams)
clip = core.mv.BlockFPS(
clip, sup, bvec, fvec, num=dst_fps_num, den=dst_fps_den, **blockParams
)
clip.set_output()
-45
View File
@@ -1,45 +0,0 @@
# 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()
+2 -2
View File
@@ -3,8 +3,8 @@
# needs this in mpv's input.conf: # needs this in mpv's input.conf:
# f run "/bin/sh" "-c" "hyprctl dispatch fullscreen toggle"; cycle fullscreen # f run "/bin/sh" "-c" "hyprctl dispatch fullscreen toggle"; cycle fullscreen
# using mvtools frame interpolation vapoursynth filter - needs mvtools python package:
ü vf toggle format=yuv420p,vapoursynth="~/.config/mpv/filters/mvtools.vpy":4:4 ü vf toggle format=yuv420p,vapoursynth="~/.config/mpv/filters/motioninterpolation-mvtools.vpy":4:4
### cool profiles function: ### cool profiles function:
# _ set profile FrameInterpolation #menu: Profiles > profile FrameInterpolation # _ set profile FrameInterpolation #menu: Profiles > profile FrameInterpolation
+5 -65
View File
@@ -1,55 +1,21 @@
# profile=svp
# profile=smoothmotion
# written by fennek182 # written by fennek182
# version 1 # version 2
# last change: Wed 2026-01-21 # last change: Thu 2026-06-11
#[smoothmotion]
# see 2.1.2 High quality configurations
# https://wiki.archlinux.org/title/mpv#High-quality-configurations
#profile=high-quality
#video-sync=display-resample
#interpolation
#tscale=oversample
# vf=vapoursynth="~/.config/mpv/filters/mvtools.vpy":buffered-frames=4:concurrent-frames=4
# video-sync=display-resample
# interpolation = yes
# tscale = box
# tscale-clamp = 0.0
# tscale-radius = 1.0
# tscale-window = sphinx
# ========== PROFILES ==========
# [svp]
# input-ipc-server=/tmp/mpvsocket
input-ipc-server=/tmp/mpvsocket
hr-seek-framedrop=no hr-seek-framedrop=no
# watch-later-options-remove=vf
hwdec=auto-copy hwdec=auto-copy
hwdec-codecs=all hwdec-codecs=all
# [FrameInterpolation]
# vf=vapoursynth="~/.config/mpv/filters/mvtools.vpy"
# profile-restore = copy
# ============================================
resume-playback=no resume-playback=no
volume-max=200 volume-max=200
cache=yes cache=yes
cache=auto cache=auto
keep-open keep-open
ytdl-format=bestvideo+bestaudio/best
# set max cache size to 20 Gigabytes # set max cache size to 20 Gigabytes
demuxer-max-bytes=21474836480 demuxer-max-bytes=21474836480
# ============== YT-DLP ==============
# limit yt-dlp to 1440p60
# ytdl-format=bestvideo[height<=?1440]+bestaudio/best
ytdl-format=bestvideo+bestaudio/best
# ============== YT-DLP ==============
# open window immediately (not waiting for yt-dlp) # open window immediately (not waiting for yt-dlp)
force-window=immediate force-window=immediate
@@ -64,34 +30,8 @@ demuxer-lavf-o=activation_bytes=162dfd19
# then mpv's built-in osc must be disabled # then mpv's built-in osc must be disabled
# osc=no # osc=no
# =============== TEST HDR 2026-01-21 ==============
# Renderer:
# gpu-next requires the latest (unreleased) git version of libplacebo and the latest (unreleased) git version of mpv.
# It's still in testing/fixing/development stages and isn't recommended unless people want to test unfinished, bleeding-edge code.
# The main benefits of GPU-Next are that it has much more efficient rendering code, and that it supports HDR tonemapping, including HDR/DV, and including HDR/DV to SDR (useful for Linux users since Linux lacks HDR support).
# differences gpu/gpu-next: https://github.com/mpv-player/mpv/wiki/GPU-Next-vs-GPU
# vo=gpu-next
# target-colorspace-hint=yes
# get apis by "mpv --gpu-api=help":
# gpu-api=vulkan
# gpu-context=waylandvk
# =============== TEST HDR 2026-01-21 ==============
# ----------- old - delete # ----------- old - delete
# --keepaspect-window (the default) will lock the window size to the video aspect.
# --no-keepaspect-window disables this behavior, and will instead add black bars if window aspect and video aspect mismatch.
# Whether this actually works depends on the VO backend. (Ignored in fullscreen mode.)
# no-keepaspect-window
# target-colorspace-hint=yes
# --tone-mapping=spline
# profile=gpu-hq
# always open a new instance of mpv instead of replacing currently playing video
#process-instance=multi
# use yt-dlp instead of youtube-dl since it's slow now (Oct 21) # use yt-dlp instead of youtube-dl since it's slow now (Oct 21)
# script-opts=ytdl_hook-ytdl_path=/usr/bin/yt-dlp # script-opts=ytdl_hook-ytdl_path=/usr/bin/yt-dlp