Advertisement
Zastin

descale stuff (resource)

Dec 24th, 2017
623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.60 KB | None | 0 0
  1. from vapoursynth import core
  2. import vapoursynth as vs
  3. import kagefunc as kgf
  4. import fvsfunc as fvf
  5. import mvsfunc as mvf
  6.  
  7. w, h = 1280, 720
  8. b, c = 1/3, 1/3
  9.  
  10. # Input clip
  11. src8 = core.lsmas.LWLibavSource(r'C:\00000.m2ts')
  12.  
  13. # Normal luma downscale
  14. res = src8.resize.Spline16(w, h, format=vs.GRAY16)
  15.  
  16. # Descale clips
  17. srcy = src8.resize.Point(format=vs.GRAYS)
  18. deb = srcy.descale.Debicubic(w, h, b, c)
  19. reb = deb.resize.Bicubic(1920, 1080, filter_param_a=b, filter_param_b=c)
  20. dif = srcy.std.MakeDiff(reb)
  21. deb = fvf.Depth(deb, 16)
  22.  
  23. """ Mask error - change the Binarize threshold or amount of Maximum/Inflate calls
  24. msk = dif.std.Expr('x abs')
  25. msk = msk.std.Binarize(10/219)
  26. msk = msk.fmtc.bitdepth(bits=8, fulld=1, dmode=2)
  27. msk = msk.resize.Bilinear(w, h)
  28. msk = msk.std.Binarize(4)
  29. msk = kgf.iterate(msk, core.std.Maximum, 1)
  30. msk = kgf.iterate(msk, core.std.Inflate, 2)
  31. msk = msk.std.Expr('x 257 *', vs.GRAY16)
  32. deb = deb.std.MaskedMerge(res, msk)
  33. """
  34.  
  35.  
  36. """ Mask lines
  37. msk = deb.std.Prewitt().std.Binarize(24 << 8)
  38. if c >= 0.75:
  39.    msk = msk.std.Maximum(coordinates=[0,1,0,1,1,0,1,0])
  40. msk = msk.std.Convolution([1]*9)
  41. deb = res.std.MaskedMerge(deb, msk)
  42. """
  43.  
  44.  
  45. """ Runtime filtering - just change "conditionalfilter" to do whatever you want
  46. err = dif.std.Crop(5,5,5,5)
  47. err = err.rgsf.RemoveGrain(1)
  48. err = err.std.Expr('x abs {e} <= 0 x 0 > x {e} - x {e} + ? ? 0.5 +'.format(e=1/219))
  49. err = fvf.Depth(err, 8, range=1)
  50. err = err.hist.Luma()
  51. err = err.std.PlaneStats()
  52.  
  53. #mvf.ShowAverage(err).set_output() # the number shown is f.props.PlaneStatsAverage / 255
  54.  
  55. def conditionalfilter(n, f, thr=0.05/255):
  56.    if f.props.PlaneStatsAverage < thr:
  57.        return deb
  58.    else:
  59.        alpha = (f.props.PlaneStatsAverage - 0.05/255) * 510 + 0.2
  60.        alpha = min(0.2, max(0.5, alpha) )
  61.        return taa.TAAmbk(deb, aatype='Eedi3', alpha=alpha, mclip=msk)
  62. deb = deb.std.FrameEval(conditionalfilter, prop_src=err)
  63. """
  64.  
  65. srcy = deb
  66.  
  67. # Merge chroma
  68.  
  69. """ Keep 4:2:0
  70. srcuv = src8.fmtc.resample(w, h, planes=[1,3,3])
  71. out = core.std.ShufflePlanes([srcy,srcuv], [0,1,2], vs.YUV)
  72. """
  73.  
  74. """ Convert to 4:4:4
  75. def chroma_upscale(clip, w, h):
  76.    nnedi3 = core.znedi3 if hasattr(core, 'znedi3') else core.nnedi3
  77.    clip = nnedi3.nnedi3(clip.std.Transpose(), 1, 1, 0, 0, 3, 2)
  78.    clip = nnedi3.nnedi3(clip.std.Transpose(), 1, 1, 0, 0, 3, 2)
  79.    return clip.resize.Spline36(w, h, src_top=-0.5)
  80. srcuv = src8.fmtc.bitdepth(bits=16, planes=[1,2])
  81. srcu, srcv = kgf.split(srcuv)[1:]
  82. srcu, srcv = [chroma_upscale(clip, w, h) for clip in (srcu, srcv)]
  83. out = core.std.ShufflePlanes([srcy,srcu,srcv], [0]*3, vs.YUV)
  84. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement