Advertisement
kriNon

Untitled

Dec 4th, 2017
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.13 KB | None | 0 0
  1. import vapoursynth as vs
  2. import functools
  3. import numpy as np
  4.  
  5. import nnedi3_resample
  6. import fag3kdb
  7. import havsfunc as haf
  8. import adaptivegrain as adg
  9. import kagefunc as kgf
  10. import vsTAAmbk as taa
  11. import fvsfunc as fvf
  12. import mvsfunc as mvf
  13. import knnfunc
  14. import debandshit
  15. import BMToolkit
  16. import hysteria
  17.  
  18. core = vs.get_core()
  19. clip1 = core.d2v.Source(r"I:\[Kare Kano]\vol1.d2v")
  20. clip2=haf.QTGMC(clip1,Preset="placebo", MatchPreset="placebo", MatchPreset2="placebo", EdiMode="nnedi3", Lossless=0, SourceMatch=3, TR2=3, ChromaMotion=False, NNSize=3, NNeurons=2, EdiQual=1, MatchTR2=2, Border=True, TFF=True)#.std.Trim(46540)
  21. #clip2=core.wwxd.WWXD(clip=clip2)
  22. Top2 = clip2.std.SelectEvery(cycle=2,offsets=0)
  23. Bottom2 = clip2.std.SelectEvery(cycle=2,offsets=1)
  24. clip2=core.misc.SCDetect(core.std.Merge(Top2,Bottom2),threshold=0.1)
  25. def transfer_property(n, f):
  26.    fout = f[1].copy()
  27.    fout.props['_SceneChangePrev'] = f[0].props['_SceneChangePrev']
  28.    fout.props['_SceneChangeNext'] = f[0].props['_SceneChangeNext']
  29.    return fout
  30.  
  31. Top2=core.std.ModifyFrame(clip=Top2, clips=[clip2, Top2], selector=transfer_property)
  32. Bottom2 = core.std.ModifyFrame(clip=Bottom2, clips=[clip2, Bottom2], selector=transfer_property)
  33. clip2 = core.std.Interleave([Top2,Bottom2])
  34. OPPColourspace = core.std.PlaneStats(kgf.retinex_edgemask(core.fmtc.resample(clip2, csp=vs.YUV444P16)))#core.std.PlaneStats(core))
  35. Top = OPPColourspace.std.SelectEvery(cycle=2,offsets=0)
  36. Bottom = OPPColourspace.std.SelectEvery(cycle=2,offsets=1)
  37. Top2 = clip2.std.SelectEvery(cycle=2,offsets=0)
  38. Bottom2 = clip2.std.SelectEvery(cycle=2,offsets=1)
  39. #Diff = core.std.PlaneStats(kgf.getY(core.std.Expr([Top2,Bottom2], ["x 128 - abs y 128 - abs < x 128 - abs x y + 256 - abs < and x 128 - abs x 128 - abs 0.5 pow - 2 pow y 128 - abs x y + 256 - abs < y 128 - abs y 128 - abs 0.5 pow - 2 pow x y + 256 - abs x y + 256 - abs 0.5 pow - 2 pow ? ? x 128 - y 128 - * 0 > -1 1 ? * 128 +"])))
  40. #Top = core.std.PlaneStats(core.std.Expr([Top, Diff.std.Binarize(threshold=1,v1=1).std.Maximum()],"x y *").rgvs.RemoveGrain(mode=4))
  41. #Bottom = core.std.PlaneStats(core.std.Expr([Bottom, Diff.std.Binarize(threshold=1,v1=1).std.Maximum()],"x y *").rgvs.RemoveGrain(mode=4))
  42.  
  43.  
  44. def Selector(n, Top, Bottom, clip2):
  45.     #Eventually upgrade the script to be multithreaded
  46.     global AAABB
  47.     global BAAAB
  48.     global BBAAA
  49.     global ABBAA
  50.     global AABBA
  51.     global BBXAA
  52.     global ABBXA
  53.     global AABBX
  54.     global XAABB
  55.     global BXAAB
  56.     global i
  57.     clip2 = core.std.SetFrameProp(clip2,"myRatio",floatval=((Top.get_frame(n/2).props.PlaneStatsAverage+ 6.10351562*10**-5) / (Bottom.get_frame((n - 1) / 2).props.PlaneStatsAverage)+ 6.10351562*10**-5))
  58.     if clip2.get_frame(n*2).props._SceneChangePrev==1 or n==0:
  59.         i = 1
  60.         Diff = 0.001#abs(1-clip2.get_frame(n).props.myRatio)
  61.         Field = 0 if clip2.get_frame(n).props.myRatio < 1 else 1 #0 is top, 1 is bottom
  62.  
  63.  
  64.         AAABB = Diff if Field == 0 else 0
  65.         BAAAB = 0 if Field == 0 else Diff
  66.         BBAAA = 0 if Field == 0 else Diff
  67.         ABBAA = Diff if Field == 0 else 0
  68.         AABBA = Diff if Field == 0 else 0
  69.         BBXAA = 0 if Field == 0 else Diff
  70.         ABBXA = Diff if Field == 0 else 0
  71.         AABBX = Diff if Field == 0 else 0
  72.         XAABB = 0
  73.         BXAAB = 0 if Field == 0 else Diff
  74.         while clip2.get_frame(n+i).props._SceneChangePrev != 1:
  75.             if((n+i)%5)==0:
  76.                 AAABB = AAABB + Diff if Field == 0 else AAABB
  77.                 BAAAB = BAAAB if Field == 0 else BAAAB + Diff
  78.                 BBAAA = BBAAA if Field == 0 else BBAAA + Diff
  79.                 ABBAA = ABBAA + Diff if Field == 0 else ABBAA
  80.                 AABBA = AABBA + Diff if Field == 0 else AABBA
  81.                 #New
  82.                 BBXAA = BBXAA if Field == 0 else BBXAA + Diff
  83.                 ABBXA = ABBXA + Diff if Field == 0 else ABBXA
  84.                 AABBX = AABBX + Diff if Field == 0 else AABBX
  85.                 XAABB = XAABB
  86.                 BXAAB = BXAAB if Field == 0 else BXAAB + Diff
  87.             if((n+i)%5)==1:
  88.                 AAABB = AAABB + Diff if Field == 0 else AAABB
  89.                 BAAAB = BAAAB + Diff if Field == 0 else BAAAB
  90.                 BBAAA = BBAAA if Field == 0 else BBAAA + Diff
  91.                 ABBAA = ABBAA if Field == 0 else ABBAA + Diff
  92.                 AABBA = AABBA + Diff if Field == 0 else AABBA
  93.                 #New
  94.                 BBXAA = BBXAA if Field == 0 else BBXAA + Diff
  95.                 ABBXA = ABBXA if Field == 0 else ABBXA + Diff
  96.                 AABBX = AABBX + Diff if Field == 0 else AABBX
  97.                 XAABB = XAABB + Diff if Field == 0 else XAABB
  98.                 BXAAB = BXAAB
  99.             if((n+i)%5)==2:
  100.                 AAABB = AAABB + Diff if Field == 0 else AAABB
  101.                 BAAAB = BAAAB + Diff if Field == 0 else BAAAB
  102.                 BBAAA = BBAAA + Diff if Field == 0 else BBAAA
  103.                 ABBAA = ABBAA if Field == 0 else ABBAA + Diff
  104.                 AABBA = AABBA if Field == 0 else AABBA + Diff
  105.                 #New
  106.                 BBXAA = BBXAA
  107.                 ABBXA = ABBXA if Field == 0 else ABBXA + Diff
  108.                 AABBX = AABBX if Field == 0 else AABBX + Diff
  109.                 XAABB = XAABB + Diff if Field == 0 else XAABB
  110.                 BXAAB = BXAAB + Diff if Field == 0 else BXAAB
  111.             if((n+i)%5)==3:
  112.                 AAABB = AAABB if Field == 0 else AAABB + Diff
  113.                 BAAAB = BAAAB + Diff if Field == 0 else BAAAB
  114.                 BBAAA = BBAAA + Diff if Field == 0 else BBAAA
  115.                 ABBAA = ABBAA + Diff if Field == 0 else ABBAA
  116.                 AABBA = AABBA if Field == 0 else AABBA + Diff
  117.                 #New
  118.                 BBXAA = BBXAA + Diff if Field == 0 else BBXAA
  119.                 ABBXA = ABBXA
  120.                 AABBX = AABBX if Field == 0 else AABBX + Diff
  121.                 XAABB = XAABB if Field == 0 else XAABB + Diff
  122.                 BXAAB = BXAAB + Diff if Field == 0 else BXAAB
  123.             if((n+i)%5)==4:
  124.                 AAABB = AAABB if Field == 0 else AAABB + Diff
  125.                 BAAAB = BAAAB if Field == 0 else BAAAB + Diff
  126.                 BBAAA = BBAAA + Diff if Field == 0 else BBAAA
  127.                 ABBAA = ABBAA + Diff if Field == 0 else ABBAA
  128.                 AABBA = AABBA + Diff if Field == 0 else AABBA
  129.                 #New
  130.                 BBXAA = BBXAA + Diff if Field == 0 else BBXAA
  131.                 ABBXA = ABBXA + Diff if Field == 0 else ABBXA
  132.                 AABBX = AABBX
  133.                 XAABB = XAABB if Field == 0 else XAABB + Diff
  134.                 BXAAB = BXAAB if Field == 0 else BXAAB + Diff
  135.  
  136.             i = i + 1
  137.     BBXAA = BBXAA * 1.2
  138.     ABBXA = ABBXA * 1.2
  139.     AABBX = AABBX * 1.2
  140.     XAABB = XAABB * 1.2
  141.     BXAAB = BXAAB * 1.2
  142.     maxValue = max(AAABB,BAAAB,BBAAA,ABBAA,AABBA,BBXAA,ABBXA,AABBX,XAABB,BXAAB)
  143.     if AAABB==maxValue:
  144.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[0, 2, 4, 7, 9]),"AAABB")
  145.     elif BAAAB==maxValue:
  146.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[1, 2, 4, 6, 9]),"BAAAB")
  147.     elif BBAAA==maxValue:
  148.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[1, 3, 4, 6, 8]),"BBAAA")
  149.     elif ABBAA==maxValue:
  150.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[0, 3, 5, 6, 8]),"ABBAA")
  151.     elif AABBA==maxValue:
  152.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[0, 2, 5, 7, 8]),"AABBA")
  153.     elif BBXAA==maxValue:
  154.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[1, 3, 3, 6, 8]),"BBXAA")
  155.     elif ABBXA==maxValue:
  156.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[0, 3, 5, 5, 8]),"ABBXA")
  157.     elif AABBX==maxValue:
  158.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[0, 2, 5, 7, 7]),"AABBX")
  159.     elif XAABB==maxValue:
  160.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[2, 4, 7, 9, 9]),"XAABB")
  161.     elif BXAAB==maxValue:
  162.         return core.text.Text(clip2.std.SelectEvery(cycle=10, offsets=[1, 1, 4, 6, 9]),"BXAAB")
  163.     else:
  164.         return clip2.std.SelectEvery(cycle=10, offsets=[0, 2, 4, 7, 9])
  165.     #Make sure the calculations for AAABB etc are using both fields, not half
  166.     #Make sure scene detection occurs in both fields, however in the case of two scene changes in a row, second one is ignored
  167.     #Account for when we have Top Field First and Bottom Field First changing during a scene
  168.     #Optimise for multithreading
  169.     #Make sure metrics are being calculated properly by applying them as frame props
  170.     #Use Better scene detection, something more sensitive to scene changes
  171.  
  172.     if abs(Top.get_frame(n).props.PlaneStatsAverage - Bottom.get_frame(n).props.PlaneStatsAverage) < 0:
  173.         return haf.srestore(clip2,frate=30000/1001,speed=-25)
  174.     else:
  175.         if Top.get_frame(n).props.PlaneStatsAverage > Bottom.get_frame(n).props.PlaneStatsAverage:
  176.             return core.text.Text(clip2.std.SelectEvery(cycle=2,offsets=1),"Bottom")
  177.         else:
  178.             return core.text.Text(clip2.std.SelectEvery(cycle=2,offsets=0),"Top")
  179. decimated = core.std.FrameEval(clip2.std.SelectEvery(cycle=2,offsets=0), functools.partial(Selector, Top=Top, Bottom=Bottom, clip2=clip2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement