Advertisement
ArtyomR0Bot

deint.vpy

May 26th, 2020
1,324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.58 KB | None | 0 0
  1. import vapoursynth as vs
  2. import functools
  3. from havsfunc import QTGMC
  4.  
  5. core = vs.core
  6. resize = core.resize
  7. std = core.std
  8.  
  9. def loadfieldsfm(filename):
  10.     fmap = {}
  11.     arr = []
  12.     with open(filename, 'r') as f:
  13.         for line in f:
  14.             parts = line.split()
  15.             arr.append(parts)
  16.     last_frame = 0
  17.     last_fields = [0]
  18.     last_cycle = 1
  19.     for e in sorted(arr, key=lambda e: e[0]):
  20.         frame = int(e[0])
  21.         fields = [int(f) for f in e[1:]]
  22.         cycle = len(fields)
  23.         for i in range(last_frame, frame):
  24.             field = (i - last_frame) % last_cycle
  25.             fmap[i] = last_fields[field]
  26.         fmap[frame] = fields[0]
  27.         last_frame = frame + 1
  28.         last_fields = fields
  29.         last_cycle = cycle
  30.     return fmap
  31.  
  32. def deinterlace(v, fmap):
  33.     dec = std.FrameEval(v, functools.partial(decimate, v=v, fmap=fmap))
  34.     ref = core.nnedi3cl.NNEDI3CL(dec, 1, nns=4, qual=1)
  35.     return core.tdm.TDeintMod(dec, 1, edeint=ref)
  36.  
  37. def decimate(n, v, fmap):
  38.     cycle = 5
  39.     skip = fmap[n] if n in fmap else 0
  40.     frames = []
  41.     for i in range(cycle):
  42.         if i != skip:
  43.             frames.append(i)
  44.     v = std.SeparateFields(v, True)
  45.     v = std.SelectEvery(v, cycle, frames)
  46.     v = std.DoubleWeave(v, True)
  47.     v = std.SelectEvery(v, 2, skip % 2)
  48.     #v = core.text.Text(v, '{} {}'.format(skip, n))
  49.     return v
  50.  
  51. inp = core.d2v.Source(d2v)
  52. fmap = loadfieldsfm(mapfile)
  53. deint = deinterlace(inp, fmap)
  54. deint = std.AssumeFPS(deint, fpsnum=24000, fpsden=1001)
  55. deint = QTGMC(deint, InputType=1)
  56. deint.set_output()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement