Video

~/.config/mpv/vapoursynth/ivtcdeinterlace.vpy

Rina Kawakita 2020. 1. 8. 18:43
~/.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()