added mpv config
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,78 @@
|
||||
# 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()
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user