~/.config/mpv/vapoursynth/ivtcdeinterlace.vpy
# vim: set ft=python:
import vapoursynth as vs
import functools
core = vs.get_core()
#clip = core.ffms2.Source(source=in_filename) # 48fps -> ffmpeg -vf framerate 24000/1001 -> scene score:8.2 interpolate
clip = core.lsmas.LWLibavSource(source=in_filename, format="YUV420P8", cache=0)
def conditionalDeint(n, f, orig, deint):
if f.props._Combed:
return deint
else:
return orig
def conditionIVTC(clip):
# inverse telecine filter for Avisynth
#clip = core.std.BlankClip(format=vs.YUV420P8, color=[40,60,240], fpsnum=30000, fpsden=1001)
#clip = core.it.IT(clip)
# VIVTC – field matching, inverse telecine and decimation, in the source tree
# field match, inverse telecine
clip = core.vivtc.VFM(clip, 1)
#clip=core.yadifmod.Yadifmod(clip, clip, order=1, field=-1, mode=0)
# nnedi3 deinterlace
deint = core.tdm.TDeintMod(clip, order=1, edeint=core.nnedi3.nnedi3(clip, field=1))
combProps = core.tdm.IsCombed(clip)
clip = core.std.FrameEval(clip, functools.partial(conditionalDeint, orig=clip, deint=deint), combProps)
# decimation
clip = core.vivtc.VDecimate(clip)
return clip
# ivtc + deinterlace
clip = conditionIVTC(clip)
# resize
#clip = core.resize.Bicubic(clip,1280,720,filter_param_a=0,filter_param_b=0.75)
clip.set_output()