Advertisement
Zastin

monisha

Aug 31st, 2017 (edited)
748
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.87 KB | None | 0 0
  1. import vapoursynth as vs
  2. import havsfunc as haf
  3. import mvsfunc as mvf
  4. import debandshit as db # https://github.com/LightArrowsEXE/debandshit/blob/master/debandshit.py
  5. import rgvs # https://github.com/Irrational-Encoding-Wizardry/RgToolsVS/blob/master/rgvs.py
  6.  
  7. from vsutil import *
  8. from functools import partial
  9. from math import log2
  10.  
  11. core = vs.core
  12.  
  13.  
  14.  
  15. FSRCNNX = r'C:\Users\Zastin\AppData\Roaming\mpv\shaders\FSRCNNX_x2_56-16-4-1.glsl'
  16.  
  17. BDMV = r'C:\Users\Zastin\Desktop\cartoons\[BDMV] Monster Girl Doctor Volume 1\MON_ISHA_I\BDMV\STREAM\00002.m2ts'
  18.  
  19.  
  20.  
  21. both = dict(coordinates=[0,1,0,1,1,0,1,0])
  22.  
  23. def show(*clips): return core.std.Interleave(clips, mismatch=1).resize.Spline36(format=vs.RGB24, dither_type='error_diffusion',matrix_in=1)
  24.  
  25. def median(*clips): return core.std.Expr(clips, 'x y z min max y z max min')
  26.  
  27. def csharp(flt, src, blur=lambda x: x.rgvs.RemoveGrain(20)):
  28.     pre = rgvs.MinBlur(flt, 0)
  29.     return core.std.Expr([flt,src,pre,blur(pre)], 'x z + a - x y min max x y max min')
  30.  
  31. def unsharp(clip, radius=1, strength=log2(3), custom=None):
  32.     if callable(custom):
  33.         return clip.std.MergeDiff(clip.std.MakeDiff(custom(clip)))
  34.    
  35.     strength = max(1e-6, min(strength, log2(3)))
  36.    
  37.     weight = 0.5 ** strength / ((1 - 0.5 ** strength) / 2)
  38.    
  39.     # find matrix with least rounding error when using integer clips
  40.     if clip.format.sample_type == 0:
  41.         all_matrices = [[x] for x in range(1, 1024)]
  42.         for x in range(1023):
  43.             while len(all_matrices[x]) < radius * 2 + 1:
  44.                 all_matrices[x].append(all_matrices[x][-1] / weight)
  45.         error = [sum([abs(x - round(x)) for x in matrix[1:]]) for matrix in all_matrices]
  46.         matrix = [round(x) for x in all_matrices[error.index(min(error))]]
  47.     else:
  48.         matrix = [1]
  49.         while len(matrix) < radius * 2 + 1:
  50.             matrix.append(matrix[-1] / weight)
  51.    
  52.     matrix = [matrix[x] for x in [(2,1,2,1,0,1,2,1,2), (4,3,2,3,4,3,2,1,2,3,2,1,0,1,2,3,2,1,2,3,4,3,2,3,4)][radius-1]]
  53.    
  54.     return clip.std.MergeDiff(clip.std.MakeDiff(clip.std.Convolution(matrix)))
  55.  
  56. def pre_aa(clip, radius=1, strength=log2(3), pp=None, **nnedi3_params):
  57.  
  58.     sharp = unsharp(clip, radius=radius, strength=strength)
  59.  
  60.     nedi = clip.znedi3.nnedi3(2, **nnedi3_params).std.SeparateFields(True).std.SelectEvery(4, [0, 3]).std.DoubleWeave()[::2]
  61.  
  62.     if callable(pp):
  63.         nedi = pp(nedi)
  64.  
  65.     return core.std.Expr([sharp, clip, nedi], 'x y z max min y z min max')
  66.  
  67. def placebo_yuv(clip, iterations, threshold, radius):
  68.     planes = split(clip)
  69.     return join([planes[x].placebo.Deband(1, iterations[x], threshold[x], radius[x], 0) for x in range(3)])
  70.  
  71. def MDegrain(clip, clipint):
  72.     dft = clip.dfttest.DFTTest(tbsize=1, slocation=[0.0,4.0, 0.2,9.0, 1.0,15.0], sbsize=16, sosize=12)#.std.MaskedMerge(clip, clip.std.Expr(f'x {59/219} >= 0 x {59/219} - {1/(0-(59/219))} * ?'))
  73.     med1 = depth(clipint.std.Median(), 32)
  74.     med2 = depth(clipint.ctmf.CTMF(2), 32)
  75.     blur1 = rgvs.removegrain(clip, 20)
  76.     blur2 = rgvs.blur(clip, 2)
  77.     minblur1 = median(clip, med1, blur1)
  78.     minblur2 = median(clip, med2, blur2)
  79.     diff = clip.std.MakeDiff(blur2)
  80.     sbr2 = rgvs.MedianDiff(clip, diff, rgvs.blur(diff, 2))
  81.     pre3 = median(clip, dft, sbr2)
  82.     pre2 = median(clip, pre3, minblur2)
  83.     pre1 = median(clip, pre2, minblur1)
  84.     asup = clip.mvsf.Super(32, 32, 1, rfilter=4)
  85.     rsup1= pre1.mvsf.Super(32, 32, 1, 1)
  86.     rsup2= pre2.mvsf.Super(32, 32, 1, 1)
  87.     rsup3= pre3.mvsf.Super(32, 32, 1, 1)
  88.     msup = clip.mvsf.Super(32, 32, 1, 1)
  89.     vec = core.mvsf.Analyze(asup, 3, 32, 32, search=3, truemotion=False, overlap=16, overlapv=16, badrange=-24, trymany=True)
  90.     vec = core.mvsf.Recalculate(rsup1, vec, thsad=100, blksize=16, blksizev=16, search=3, truemotion=False, overlap=8, overlapv=8)
  91.     vec = core.mvsf.Recalculate(rsup2, vec, thsad= 50, blksize=8, blksizev=8, search=3, truemotion=False, overlap=4, overlapv=4)
  92.     vec = core.mvsf.Recalculate(rsup3, vec, thsad= 25, blksize=4, blksizev=4, search=3, truemotion=False, overlap=2, overlapv=2)
  93.     mdg = core.mvsf.Degrain(clip, msup, vec, thsad=200)
  94.     return core.std.Expr([mdg, clip, dft, med1, med2, blur1, blur2, sbr2], 'x y z a b c d e min min min min min min max y z a b c d e max max max max max max min')
  95.  
  96. def mergechroma(*clips): return core.std.ShufflePlanes(clips, [0, 1, 2], vs.YUV)
  97.  
  98.  
  99.  
  100. o = core.lsmas.LWLibavSource(BDMV)
  101.  
  102. clip = depth(o, 16)
  103. y = get_y(clip)
  104. y0=y
  105.  
  106. mask = y.std.Prewitt().std.Maximum()
  107. lo, hi = 15<<8, 25<<8
  108. aamask1a= mask.std.Binarize(20<<8)
  109. aamask1b= mask.std.Binarize(30<<8)\
  110.               .std.Maximum().std.Maximum().std.Maximum().std.Maximum()\
  111.               .std.Minimum().std.Minimum().std.Minimum()
  112.              
  113. aamask1 = core.std.Expr([aamask1a, aamask1b], 'x y min')
  114. aamask2 = mask.std.Binarize(50<<8)
  115. mclip = aamask1.std.Maximum().resize.Point(1920*2, 1080*2)
  116. nemask = aamask2.std.Maximum().resize.Point(1920*2, 1080*2)
  117. lo, hi = 4<<8, 6<<8
  118. masknr = mask.std.Expr(f'x {lo} <= 0 x {hi} >= 65535 x {lo} - {65535/(hi-lo)} * ? ?').std.Convolution([1]*9)
  119. masknrc = mask.std.Binarize(2500).resize.Bicubic(960, 540, src_left=-0.5, filter_param_a=1, filter_param_b=0)
  120. gmask = core.std.Expr([masknr, mask.std.Binarize(30<<8).std.Maximum().std.Maximum().std.BoxBlur(0,2,1,2,1)], 'x y max')
  121.  
  122. pre = pre_aa(y,pscrn=1)
  123. pre = pre.std.Transpose()
  124. pre = pre_aa(pre,pscrn=1)
  125. fsr = get_y(join([pre]*3).placebo.Shader(shader=FSRCNNX, filter='box', height=1920*2, width=1080*2))
  126.  
  127. thr = 85
  128. expr = f'x y - x z - * 0 < x x y - abs x z - abs > z z y {thr} + min y {thr} - max ? ?'
  129. aa = fsr
  130. nn = aa.znedi3.nnedi3(0,0,0,0,4,2,0,1)
  131. ee = aa.eedi3m.EEDI3(0,0,0, .2, .5, 69, sclip=nn, mclip=mclip.std.Transpose())
  132. ne = core.std.Expr([aa,nn,ee], expr)
  133. aa = ne.std.MaskedMerge(ee, nemask.std.Transpose())
  134. aa = aa.std.Transpose()
  135. nn = aa.znedi3.nnedi3(0,0,0,0,4,2,0,1)
  136. ee = aa.eedi3m.EEDI3(0,0,0, .2, .5, 69, sclip=nn, mclip=mclip)
  137. ne = core.std.Expr([aa,nn,ee], expr)
  138. aa = ne.std.MaskedMerge(ee, nemask)
  139. aa = aa.resize.Spline36(1920,1080)
  140. bil = aa.bilateral.Bilateral(sigmaS=2, sigmaR=4 / 255, algorithm=0)
  141. aa = core.std.Expr([bil, aa, pre.std.Transpose(), y], 'x y z a max max min y z a min min max')
  142.  
  143. y = y.std.MaskedMerge(aa, aamask1.rgvs.RemoveGrain(20))
  144. pstat = y.std.PlaneStats()
  145.  
  146. uv = clip.knlm.KNLMeansCL(3,2,4,.3,'UV').std.MaskedMerge(clip, clip.std.Prewitt(planes=[1,2]).std.Binarize(5<<8,planes=[1,2]).std.Inflate(planes=[1,2]), planes=[1,2])
  147.  
  148. rgb = y.resize.Spline16(format=vs.RGB48, dither_type='error_diffusion', matrix_in=1)
  149.  
  150. opp = rgb.bm3d.RGB2OPP(sample=0)
  151. opp_y = get_y(opp)
  152.  
  153. basic = core.bm3d.VBasic(opp_y, sigma=[2,0,0], radius=2, matrix=100, profile="fast").bm3d.VAggregate(radius=2, sample=0)
  154.  
  155. mdg = MDegrain(depth(y, 32), y)
  156. mdg = mdg.resize.Spline16(format=vs.RGB48, dither_type='error_diffusion', matrix_in=1).bm3d.RGB2OPP(sample=0).std.ShufflePlanes(0, vs.GRAY)
  157.  
  158. ref = median(opp_y, mdg, basic)
  159.  
  160. flt = core.bm3d.VFinal(opp_y, ref, sigma=[2,0,0], radius=2, matrix=100, profile="fast").bm3d.VAggregate(radius=2, sample=0)
  161. flt = csharp(flt, opp_y)
  162. flt = median(opp_y, flt, ref)
  163. flt = core.std.ShufflePlanes([flt,opp], [0,1,2], vs.YUV)
  164. flt = core.bm3d.OPP2RGB(flt, sample=1)
  165. flt = flt.resize.Point(format=vs.YUV444P16, dither_type='error_diffusion', matrix=1)
  166. flt = get_y(flt)
  167. flt0 = flt
  168. flt = flt.std.MaskedMerge(y, core.adg.Mask(pstat).std.Deflate().std.Expr('x 45000 min'))
  169. flt = median(y, y.deblock.Deblock(quant=21), flt)
  170. flt = flt.rgvs.Repair(y, 13)
  171. flt = mvf.LimitFilter(flt, y, elast=4)
  172. flt = flt.std.MaskedMerge(y, masknr)
  173.  
  174. clip = mergechroma(flt, uv)
  175.  
  176. mask = db.rangemask(mergechroma(flt0, uv), 2, 2).std.Binarize([420,384])
  177. maskpp = mask.std.Deflate()
  178. masku, maskv = [core.std.Expr([x, masknrc], 'x y max') for x in split(maskpp)[1:]]
  179. lo, hi = 65536 * 0.2, 65536 * 0.5
  180. maskb = get_y(mask).std.BoxBlur(0,8,1,8,1).std.Expr(f'x {lo} - {65535/(hi-lo)} *')
  181. maskb = core.std.Expr([maskb, maskb.std.BoxBlur(0,4,1,4,1)], 'x y min')
  182. mask1 = get_y(maskpp)
  183. mask2 = db.rangemask(flt0,15,2).std.Binarize(6 * 256)
  184. mask2 = haf.mt_inpand_multi(mask2, sw=15 * 3 // 4, sh=15 * 3 // 4, mode='ellipse').std.BoxBlur(0,15//4,1,15//4,1)
  185. mask = core.std.Expr([maskb,mask1,mask2], 'x y z max max')
  186. mask = join([mask, masku, maskv])
  187.  
  188. debn = placebo_yuv(clip, [1,1,1], [2.5,2,2], [16,10,10]).std.MaskedMerge(db.f3kdb(clip, 15, 32, 0, 0, 0, 0), mask)
  189. final = debn.grain.Add(0.2, constant=True).std.MaskedMerge(debn, gmask, 0)
  190.  
  191. depth(final, 10).set_output()
  192.  
  193. #vspipe "C:/Users/Zastin/Desktop/WIP/monisha/final.vpy" -y - | "C:\Users\Zastin\Desktop\WIP\x264_x64.exe" --demuxer y4m -f -2 --psy-rd 0.92 --preset veryslow --subme 11 --stitchable --fade-compensate 0.5 --no-dct-decimate -b 16 --crf 15 --chroma-qp-offset -1 --threads 8 --aq-mode 3 --aq-strength 0.9 --qcomp 0.75 --output-depth 10 --colormatrix bt709 --colorprim bt709 --transfer bt709 --range tv -o "C:\Users\Zastin\Desktop\WIP\monisha\01.h264" -
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement