Advertisement
Guest User

Advanced Denoising

a guest
Apr 1st, 2017
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Advanced Denoising and anime bob v1.43
  2.  
  3. # MotionThresh by mf, mod by A.SONY
  4. # Simple scenechange-proof motion threshold
  5. # Tile outputs 16x16 clip for speed
  6. # Use tile=true for conditional filtering, tile=false for masking
  7.  
  8. function MotionThresh(clip input, float thresh, bool "tile", bool "fast", int "cache") {
  9. fast = Default(fast, false)
  10. tile = Default(tile,  fast)
  11. cache= default(cache,10)
  12.  
  13. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  14.  
  15. sislumaonly = !(VersionNumber() < 2.60) ? ssispmt ? input.isy() : input.isy8() : nop()
  16.  
  17. input = fast && !sislumaonly ? ssispmt ? input.converttoy() : input.converttoy8() : input
  18. black = !fast ? BlankClip(input, width=16, height=16               ) : BlankClip(input, width=16, height=16, Color_yuv=color_black)
  19. white = !fast ? BlankClip(input, width=16, height=16, color=$FFFFFF) : BlankClip(input, width=16, height=16, Color_yuv=color_white)
  20. cond1 = fast ? nop() : ConditionalFilter(input, white, black, "YDifferenceFromPrevious()", "greaterthan", String(thresh))
  21. cond2 = fast ? nop() : ConditionalFilter(input, white, black, "YDifferenceToNext()", "greaterthan", String(thresh))
  22. fast ? eval("""
  23. global MotionThreshblack = black
  24. global MotionThreshthresh = thresh
  25. global MotionThreshinput = input
  26. global mtcav=0
  27. global mtnav=0
  28. """) : nop()
  29. fast ? white.ScriptClip("""
  30. MotionThreshwhite = last
  31. input = MotionThreshinput
  32. cfr=current_frame
  33.  
  34. mtpav=cfr<3 ? 0 : mtcav
  35. global mtcav=cfr<2 ? 0 : mtnav
  36. global mtnav=input.trim(1,0).AverageLuma()
  37.  
  38. cond1 = abs(mtcav-mtpav) > MotionThreshthresh ? MotionThreshwhite : MotionThreshblack
  39. cond2 = abs(mtcav-mtnav) > MotionThreshthresh ? MotionThreshwhite : MotionThreshblack
  40. Overlay(cond1, cond2, mode="darken")
  41. """) : nop()
  42. fast ? last : Overlay(cond1, cond2, mode="darken")
  43. tile ? last : PointResize(input.width, input.height)
  44. fast ? cache<0 ? last : last.RequestLinear(8, cache, 5, false, false) : last
  45. }
  46.  
  47.  
  48. ######################################################################
  49. # MotionRamp by mf, mod for speed by A.SONY
  50. # Average motion soft-thresholding based on 5 thresholds
  51. # Dependancies: MotionThresh, ParameterisedBlend or Average if avs is 2.6 or up
  52.  
  53. function MotionRamp(clip input, int thresh1, int thresh2, int thresh3, int thresh4, int thresh5, int "min", int "max", int "floor", int "ceil", int "radius", bool "tile", bool "fast", int "cache") {
  54. min = Default(min, 0)
  55. max = Default(max, 255)
  56. floor = Default(floor, 0)
  57. ceil  = Default(ceil, 255)
  58. radius = Default(radius, 2)
  59. fast = Default(fast, false)
  60. tile = Default(tile,  fast)
  61. cache= default(cache,10)
  62.  
  63. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  64.  
  65. sislumaonly = fast ? ssispmt ? input.isy() : input.isy8() : false
  66.  
  67. fast && !(VersionNumber() < 2.60) && !sislumaonly ? ssispmt ? input.converttoy() : input.converttoy8() : input
  68.  
  69. fast ? eval("""
  70. white = BlankClip(last, width=16, height=16, Color_yuv=color_white)
  71. global MotionThreshblack = BlankClip(last, width=16, height=16, Color_yuv=color_black)
  72. global MotionThreshthresh1 = thresh1
  73. global MotionThreshthresh2 = thresh2
  74. global MotionThreshthresh3 = thresh3
  75. global MotionThreshthresh4 = thresh4
  76. global MotionThreshthresh5 = thresh5
  77. global MotionThreshinput = last
  78. global mtnav=0
  79. """) : last
  80. fast ? white.ScriptClip("""
  81. input = MotionThreshinput
  82. MotionThreshwhite = last
  83. cfr=current_frame
  84.  
  85. mtpav=cfr<1 ? 0 : mtnav
  86. global mtnav=input.YDifferenceToNext()
  87.  
  88. cond11 = mtpav > MotionThreshthresh1 ? MotionThreshwhite : MotionThreshblack
  89. cond21 = mtnav > MotionThreshthresh1 ? MotionThreshwhite : MotionThreshblack
  90. c1=Overlay(cond11, cond21, mode="darken")
  91.  
  92. cond12 = mtpav > MotionThreshthresh2 ? MotionThreshwhite : MotionThreshblack
  93. cond22 = mtnav > MotionThreshthresh2 ? MotionThreshwhite : MotionThreshblack
  94. c2=Overlay(cond12, cond22, mode="darken")
  95.  
  96. cond13 = mtpav > MotionThreshthresh3 ? MotionThreshwhite : MotionThreshblack
  97. cond23 = mtnav > MotionThreshthresh3 ? MotionThreshwhite : MotionThreshblack
  98. c3=Overlay(cond13, cond23, mode="darken")
  99.  
  100. cond14 = mtpav > MotionThreshthresh4 ? MotionThreshwhite : MotionThreshblack
  101. cond24 = mtnav > MotionThreshthresh4 ? MotionThreshwhite : MotionThreshblack
  102. c4=Overlay(cond14, cond24, mode="darken")
  103.  
  104. cond15 = mtpav > MotionThreshthresh5 ? MotionThreshwhite : MotionThreshblack
  105. cond25 = mtnav > MotionThreshthresh5 ? MotionThreshwhite : MotionThreshblack
  106. c5=Overlay(cond15, cond25, mode="darken")
  107.  
  108. VersionNumber() < 2.6 ? Interleave(c3, c2, c4, c1, c5).ParameterisedBlend(0.20, 0.20, 0.20, 0.20, 0.20, gamma=1, scaleweights=false).SelectEvery(5,0) : Average(c3, 0.20, c2, 0.20, c4, 0.20, c1, 0.20, c5, 0.20)
  109. """) : VersionNumber() < 2.6 ? Interleave(MotionThresh(thresh3, tile=true), MotionThresh(thresh2, tile=true), MotionThresh(thresh4, tile=true), MotionThresh(thresh1, tile=true), MotionThresh(thresh5, tile=true)).ParameterisedBlend(0.20, 0.20, 0.20, 0.20, 0.20, gamma=1, scaleweights=false).SelectEvery(5,0) : \
  110.                                Average(MotionThresh(thresh3, tile=true), 0.20, MotionThresh(thresh2, tile=true), 0.20, MotionThresh(thresh4, tile=true), 0.20, MotionThresh(thresh1, tile=true), 0.20, MotionThresh(thresh5, tile=true), 0.20)
  111. fast ? cache<0 ? last : last.RequestLinear(8, cache, 5, false, false) : last
  112. TemporalSoften(radius,255,0,255,2)
  113. fast ? last : Levels(floor, 1, ceil, min, max)
  114. fast ? last : ColorYUV(levels="TV->PC")
  115. tile ? last : PointResize(input.width, input.height)
  116. }
  117.  
  118.  
  119. ##########
  120. function admfilter(clip input, bool "mc", float "f", bool "DarkPreserve", float "rStr", float "amp", bool "lsb", bool "lsb_in", bool "lsb_out", bool "luma_rebuild", bool "u", bool "v", string "pp", string "dfttest_params", string "mcdfttest_params", string "custom_filter", clip "MotionRampadc") {
  121. d = default (DarkPreserve      , true)
  122. mc = default (mc      , true)
  123. ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  124. f = Default(f, 16.0)
  125. lsb = default (lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
  126. lsb_in = default (lsb_in      , false)
  127. lsb_out = default (lsb_out      , lsb_in)
  128. lsb = lsb_in || lsb_out ? true : lsb
  129. luma_rebuild = default (luma_rebuild      , true)
  130. u = default (u      , true)
  131. v = default (v      , true)
  132. dfttest_params = default(dfttest_params, "")
  133. mcdfttest_params = default(mcdfttest_params, "")
  134. pp = default (pp, "blur(1.53)")
  135.  
  136. custom_filter = defined(custom_filter) ? custom_filter : \
  137.                                                          mc ? "dfttestmc(pp=Eval(pp),lsb=lsb, Sigma=adSigma+1.0/f,rStr=rStr,amp=amp,lsb_in=lsb_in,luma_rebuild=luma_rebuild,u=u,v=v,dfttest_params=dfttest_params" + mcdfttest_params + ")" : \
  138.                                                               "dfttest(lsb=lsb, Sigma=adSigma+1.0/f, lsb_in=lsb_in,u=u,v=v" + dfttest_params + ")"
  139.  
  140. input
  141. MotionRampadc = defined(MotionRampadc) ? MotionRampadc : last.MotionRamp(5,10,15,20,25,Max=255,fast=True)
  142. lsb_out && !lsb_in ? Dither_convert_8_to_16() : lsb_in && !lsb_out ? Ditherpost(mode=-1, y=1, u=1,v=1) : last
  143. return GScriptClip("""
  144.                     adfloat = AverageLuma(MotionRampadc)
  145.                     adSigmb = ssispmt ? BitsPerComponent() > 8 ? BitsPerComponent() == 10 ? 4 : BitsPerComponent() == 12 ? 8 : BitsPerComponent() == 14 ? 64 : nop() : nop() : nop()
  146.                     adSigma = ssispmt ? isvideofloat() ? adfloat*255.0 : BitsPerComponent() > 8 ? BitsPerComponent() < 16 ? adfloat/adSigmb : sqrt(adfloat) : adfloat : adfloat
  147.                     (lsb_out && !lsb_in) || (lsb_in && !lsb_out) ? input : last
  148.                     adden = Eval(custom_filter)
  149.                     d ? DarkPreserve_function(filtered=adden, original=last, u=u ? 3 : 4, v=v ? 3 : 4, lsb=lsb, lsb_in=lsb_in, lsb_out=lsb_out) : adden
  150.                     !d && !lsb_out && lsb ? Ditherpost(mode=7, slice=false) : last
  151.                     """, args="MotionRampadc, f, d, rStr, amp, lsb_in, lsb_out, lsb, luma_rebuild, u, v,dfttest_params,mcdfttest_params,pp,input,custom_filter,ssispmt")
  152. }
  153.  
  154.  
  155. #######
  156. function DarkPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
  157. lsb_in    = default (lsb_in                       , false) #for original
  158. F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
  159. lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
  160. lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
  161. merge16_8 = default (merge16_8                     , true)
  162. ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  163. sislumaonly = ssispmt ? original.isy() : VersionNumber() < 2.6 ? nop() : original.isy8()
  164. u         = default (u                                , VersionNumber() < 2.6 ? 3 : sislumaonly ? 1 : 3)
  165. v         = default (v                                , u)
  166. chroma    = !(u != 3 && v != 3)
  167.  
  168. F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
  169. lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
  170. lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
  171.  
  172. dp_lut = lsb_in ? original.Dither_lut16("x 4096 < 65535 x 19200 > 0 65535 x 4096 - 4.338916843220339 * - ? ?",u=1,v=1) : VersionNumber() < 2.6 ? original.mt_lut("x 16 < 255 x 75 > 0 255 x 16 - 4.322033898305085 * - ? ?",u=1,v=1)
  173.                                                                  \             : original.mt_lut("x 16 scalef < range_max x 75 scalef > 0 range_max x 16 scalef - range_max 75 scalef 16 scalef - / * - ? ?",u=1,v=1)
  174.  
  175. dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
  176.  
  177. dp_merge = lsb ? merge16_8 ? Dither_merge16_8(F_lsb_in ? filtered : filtered.Dither_convert_8_to_16(), lsb_in ? original : original.Dither_convert_8_to_16(), dp_lut, luma=chroma, u=u,v=v) : \
  178.                              Dither_merge16(F_lsb_in ? filtered : filtered.Dither_convert_8_to_16(), lsb_in ? original : original.Dither_convert_8_to_16(), dp_lut, luma=chroma, u=u,v=v) : \
  179.                              mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
  180. lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
  181. }
  182.  
  183. function lightPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
  184. lsb_in    = default (lsb_in                       , false) #for original
  185. F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
  186. lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
  187. lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
  188. merge16_8 = default (merge16_8                     , true)
  189. ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  190. sislumaonly = ssispmt ? original.isy() : VersionNumber() < 2.6 ? nop() : original.isy8()
  191. u         = default (u                                , VersionNumber() < 2.6 ? 3 : sislumaonly ? 1 : 3)
  192. v         = default (v                                , u)
  193. chroma    = !(u != 3 && v != 3)
  194.  
  195. F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
  196. lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
  197. lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
  198.  
  199. dp_lut = lsb_in ? original.Dither_lut16("x 60160 > 65535 x 45056 < 0 65535 60160 x - 4.338916843220339 * - ? ?",u=1,v=1) : VersionNumber() < 2.6 ? original.mt_lut("x 235 > 255 x 176 < 0 255 235 x - 4.322033898305085 * - ? ?",u=1,v=1)
  200.                                                                    \                 : original.mt_lut("x 235 scalef > range_max x 176 scalef < 0 range_max x 235 scalef - range_max 176 scalef 235 scalef - / * - ? ?",u=1,v=1)
  201.  
  202. dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
  203.  
  204. dp_merge = lsb ? merge16_8 ? Dither_merge16_8(F_lsb_in ? filtered : filtered.Dither_convert_8_to_16(), lsb_in ? original : original.Dither_convert_8_to_16(), dp_lut, luma=chroma, u=u,v=v) : \
  205.                              Dither_merge16(F_lsb_in ? filtered : filtered.Dither_convert_8_to_16(), lsb_in ? original : original.Dither_convert_8_to_16(), dp_lut, luma=chroma, u=u,v=v) : \
  206.                              mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
  207. lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
  208. }
  209.  
  210.  
  211. ##########
  212. #edge side bleed
  213. #original idea by "colours", this function mod by A.SONY
  214. ##########
  215. function edgesidebleed(clip input, float "w32", float "w16", float "w8", float "w4", float "w2", bool "bleed", bool "chroma", int "mode") {
  216. w2     = Default(w2,     0.001)
  217. w4     = Default(w4,     0.055)
  218. w8     = Default(w8,     0.015)
  219. w16    = Default(w16,     0.02)
  220. w32    = Default(w32,    0.001)
  221. chroma = default(chroma, false)
  222. mode   = default(mode,       0)
  223. bleed  = default(bleed, !(VersionNumber() < 2.6))
  224.  
  225. ssispmt = !chroma ? Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0 : nop()
  226. sislumaonly = !chroma ? ssispmt ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8() : nop()
  227. !chroma ? sislumaonly ? input : ssispmt ? input.converttoy() : input.converttoy8() : input
  228. w = bleed ?  Width() : nop()
  229. h = bleed ? Height() : nop()
  230.  
  231. shift32 = w32!=0 ? !bleed ? Crop(Width()-32,0,32,0,true).StackHorizontal(Crop(0,0,-32,0,true)) : nop() : nop()
  232. shift32 = w32!=0 ? bleed ? BicubicResize (w / 32, h, 1, 0,src_left=-32).BicubicResize (w, h, 1, 0) : shift32 : nop()
  233. w32==0 ? last : mode == 0 ? average(last,1+w32,shift32,-w32) : mode==1 ? lightPreserve_function(average(last,1+w32,shift32,-w32),last) : DarkPreserve_function(average(last,1+w32,shift32,-w32),last)
  234. shift16 = w16!=0 ? !bleed ? Crop(Width()-16,0,16,0,true).StackHorizontal(Crop(0,0,-16,0,true)) : nop() : nop()
  235. shift16 = w16!=0 ? bleed ? BicubicResize (w / 16, h, 1, 0,src_left=-16).BicubicResize (w, h, 1, 0) : shift16 : nop()
  236. w16==0 ? last : mode == 0 ? average(last,1+w16,shift16,-w16) : mode==1 ? lightPreserve_function(average(last,1+w16,shift16,-w16),last) : DarkPreserve_function(average(last,1+w16,shift16,-w16),last)
  237. shift8 = w8!=0 ? !bleed ? Crop(Width()-8,0,8,0,true).StackHorizontal(Crop(0,0,-8,0,true)) : nop() : nop()
  238. shift8 = w8!=0 ? bleed ? BicubicResize (w / 8, h, 1, 0,src_left=-8).BicubicResize (w, h, 1, 0) : shift8 : nop()
  239. w8==0 ? last : mode == 0 ? average(last,1+w8,shift8,-w8) : mode==1 ? lightPreserve_function(average(last,1+w8,shift8,-w8),last) : DarkPreserve_function(average(last,1+w8,shift8,-w8),last)
  240. shift4 = w4!=0 ? !bleed ? Crop(Width()-4,0,4,0,true).StackHorizontal(Crop(0,0,-4,0,true)) : nop() : nop()
  241. shift4 = w4!=0 ? bleed ? BicubicResize (w / 4, h, 1, 0,src_left=-4).BicubicResize (w, h, 1, 0) : shift4 : nop()
  242. w4==0 ? last : mode == 0 ? average(last,1+w4,shift4,-w4) : mode==1 ? lightPreserve_function(average(last,1+w4,shift4,-w4),last) : DarkPreserve_function(average(last,1+w4,shift4,-w4),last)
  243. shift2 = w2!=0 ? !bleed ? Crop(Width()-2,0,2,0,true).StackHorizontal(Crop(0,0,-2,0,true)) : nop() : nop()
  244. shift2 = w2!=0 ? bleed ? BicubicResize (w / 2, h, 1, 0,src_left=-2).BicubicResize (w, h, 1, 0) : shift2 : nop()
  245. w2==0 ? last : mode == 0 ? average(last,1+w2,shift2,-w2) : mode==1 ? lightPreserve_function(average(last,1+w2,shift2,-w2),last) : DarkPreserve_function(average(last,1+w2,shift2,-w2),last)
  246.  
  247. !chroma ? sislumaonly ? last : ssispmt ? CombinePlanes(last,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),last) : last
  248. }
  249.  
  250.  
  251. ##########
  252. #chroma edge side bleed (aka pink artifacts) fix, by A.SONY
  253. ##########
  254. function chromasidebleed(clip input, int "diameter", float "sDev", float "iDev", float "cs", bool "bic", string "cplace", bool "d2", int "kernS", int "kernI", int "resType")
  255. {
  256. diameter  = default (diameter,    11)
  257. sDev      = default (sDev,      31.1)
  258. iDev      = default (iDev,      15.1)
  259. d2        = default (d2,        true)
  260. kernS     = default (kernS,        8)
  261. kernI     = default (kernI,        3)
  262. restype   = default (restype,      0)
  263. bic       = default (bic,       true)
  264. cplace    = default (cplace, "MPEG2")
  265.  
  266. chroma = false
  267. gui = false
  268.  
  269. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  270. sisfullchr = ssispmt ? input.is444() : VersionNumber() < 2.6 ? false : input.isyv24()
  271. sislumaonly = ssispmt ? input.isy() : VersionNumber() < 2.6 ? false : input.isy8()
  272. Assert(!sislumaonly, "why you use this on no chroma clip?!")
  273.  
  274. y=VersionNumber() < 2.6 ? input : ssispmt ? input.converttoy() : input.converttoy8()
  275. u=VersionNumber() < 2.6 ? input.utoy() : input.utoy8()
  276. v=VersionNumber() < 2.6 ? input.vtoy() : input.vtoy8()
  277. cshift = (cplace == "MPEG1" && IsYV12(input)) || IsYV24(input) ? 0 : -0.5
  278. ych = sisfullchr ? y : bic ? input.BicubicResize(u.width(), v.height(), 1, 0, src_left=cshift) : input.BilinearResize(u.width(), v.height(), src_left=cshift)
  279. u=u.ConvertToYV12().TBilateral(diameterL=diameter, sDevL=sDev, iDevL=iDev, csL=cs, d2=d2, chroma=chroma, ppclip=ych.ConvertToYV12(), kernS=kernS, kernI=kernI, resType=resType)
  280. v=v.ConvertToYV12().TBilateral(diameterL=diameter, sDevL=sDev, iDevL=iDev, csL=cs, d2=d2, chroma=chroma, ppclip=ych.ConvertToYV12(), kernS=kernS, kernI=kernI, resType=resType)
  281. YToUV(u,v,y)
  282. }
  283.  
  284.  
  285. ###############
  286. # Hqdn3d_2
  287.  
  288. function Hqdn3d_2(clip clip, float "ls", float "cs", float "lt", float "ct", int "UV", bool "lsb", bool "lsb_in", bool "i16") {
  289. cs        = default (cs              , 3.0)
  290. ct        = default (ct              , 4.5)
  291. UV        = default (UV               , 3)
  292. UV        = !(VersionNumber() < 2.60) ? isY8(clip) ? 1 : UV : UV
  293. lsb_in    = default (lsb_in          , false)
  294. i16       = default (i16             , false)
  295. lsb_out   = default (lsb             , lsb_in)
  296.  
  297. i16b      = lsb_out || i16 || lsb_in
  298.  
  299. isrgb(clip) ? Assert(!i16b, "no 16bit for RGB, but you can use some trickes for that (see dither doc)") : nop()
  300.  
  301. yString = VersionNumber() < 2.60 ? "yv12" : "Y8"
  302.  
  303. pclip   = isYUV(clip) && i16b && isYUY2(clip) && !(VersionNumber() < 2.60) ? clip.ConvertToYV16() : clip
  304.  
  305. i16clip = isYUV(clip) ? i16b ? lsb_in ? pclip.Bitdepth(from=88, to=16) : i16 ? clip : pclip.Bitdepth(from=8, to=16) : nop() : nop()
  306.  
  307.     y = isYUV(clip) ? VersionNumber() < 2.60 ? i16b ? i16clip : clip : i16b ? ConvertToY8(i16clip) : ConvertToY8(clip) : nop()
  308.     u = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? UToY(i16clip) : UToY(clip) : i16b ? UToY8(i16clip) : UToY8(clip) : nop()
  309.     v = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? VToY(i16clip) : VToY(clip) : i16b ? VToY8(i16clip) : VToY8(clip) : nop()
  310.     y = isYUV(clip) ? VersionNumber() < 2.60 ? isclip(i16clip) ? y.converttoyv12().Hqdn3d16Y(sp=ls, tp=lt) : y.converttoyv12().Hqdn3dY(sp=ls, tp=lt) : isclip(i16clip) ? y.Hqdn3d16Y(sp=ls, tp=lt) : y.Hqdn3dY(sp=ls, tp=lt) : nop()
  311.     u = isYUV(clip) ? UV == 3 ? VersionNumber() < 2.60 ? isclip(i16clip) ? u.converttoyv12().Hqdn3d16Y(sp=cs, tp=ct) : u.converttoyv12().Hqdn3dY(sp=cs, tp=ct) : isclip(i16clip) ? u.Hqdn3d16Y(sp=cs, tp=ct) : u.Hqdn3dY(sp=cs, tp=ct) : u : nop()
  312.     v = isYUV(clip) ? UV == 3 ? VersionNumber() < 2.60 ? isclip(i16clip) ? v.converttoyv12().Hqdn3d16Y(sp=cs, tp=ct) : v.converttoyv12().Hqdn3dY(sp=cs, tp=ct) : isclip(i16clip) ? v.Hqdn3d16Y(sp=cs, tp=ct) : v.Hqdn3dY(sp=cs, tp=ct) : v : nop()
  313.     isYUV(clip) ? (VersionNumber() < 2.60) && isYUY2(clip) ? UV == 1 ? y : YToUV(u.converttoyuy2(),v.converttoyuy2(),y.converttoyuy2()) : UV == 1 ? y : YToUV(u,v,y) : nop()
  314.         isYUV(clip) ? i16b && !i16 && lsb_out ? Bitdepth(from=16, to=88) : last : last
  315.     isYUV(clip) ? !i16b || lsb_out || i16 ? last : Bitdepth(from=16, to=8) : last
  316.     isYUY2(clip) ? VersionNumber() < 2.60 ? last : converttoyuy2() : last
  317.  
  318.     A = isrgb32(clip) ? clip.ShowAlpha(yString) : nop()
  319.     r = isrgb(clip) ? clip.ShowRed(yString) : nop()
  320.     g = isrgb(clip) ? clip.ShowGreen(yString) : nop()
  321.     b = isrgb(clip) ? clip.ShowBlue(yString) : nop()
  322.     A = isrgb32(clip) ? A.Hqdn3dY(sp=ls, tp=lt) : nop()
  323.     r = isrgb(clip) ? r.Hqdn3dY(sp=ls, tp=lt) : nop()
  324.     g = isrgb(clip) ? g.Hqdn3dY(sp=ls, tp=lt) : nop()
  325.     b = isrgb(clip) ? b.Hqdn3dY(sp=ls, tp=lt) : nop()
  326.     isYUV(clip) ? last : isrgb32(clip) ? MergeARGB(A,r,g,b) : MergeRGB(r,g,b,"RGB24")
  327. }
  328.  
  329.  
  330. ###############
  331. #motion adaptive by A.SONY
  332.  
  333. function smam(clip input, clip "prefilter", val "filter", int "pel", int "blksize", clip "motionmask", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", int "tr2", int "usedaa3mod") {
  334.  
  335. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  336. qtgmc_lsb = default(qtgmc_lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
  337.  
  338. defined(filter) ? Assert((Isclip(filter) || IsString(filter)),        "'filter' only accepts clip or string") : nop()
  339.  
  340. Str             = default (Str, 1.5)
  341. exfilclp        = isclip(filter)
  342. sisbob          = round(framerate(input))==60 || framerate(input)==50
  343. tr2             = default (tr2, sisbob ? 3 : 1)
  344. usedaa3mod      = default (usedaa3mod, exfilclp ? 0 : sisbob ? 1 : 2)
  345.  
  346. infiltr = usedaa3mod == 1 ? input.daa3mod() : input
  347. filclip = defined(filter) ? exfilclp ? filter : eval("infiltr." + filter) : infiltr.QTGMC(InputType=1, tr0=0, tr1=sisbob ? undefined : 1, tr2=tr2, lsb=qtgmc_lsb, rep1=sisbob ? undefined : 11, rep2=sisbob ? undefined : 11, Sharpness=0.0, TV_range=TV_range, Str=Str, Amp=Amp)
  348. filclip = usedaa3mod == 2 ? filclip.daa3mod() : filclip
  349.  
  350. momask  = !defined(motionmask) ? input.smam_mask(prefilter,pel,blksize) : motionmask #if you deal with YUY2 then it should be Planar YUY2 in avs2.5 and yv16 in avs2.6
  351. isyuy2(input) && VersionNumber() < 2.60 ? mt_merge(input.Interleaved2Planar(),filclip.Interleaved2Planar(),momask,u=3,v=3).Planar2Interleaved() : isyuy2(input) ? mt_merge(input.converttoyv16(),filclip.converttoyv16(),momask,u=3,v=3).converttoyuy2() : mt_merge(input,filclip,momask,u=3,v=3)
  352. }
  353.  
  354.  
  355. ###############
  356. #smam_mask
  357. # if input is YUY2 the output will be Planar YUY2 in avs 2.5 and yv16 in avs 2.6
  358.  
  359. function smam_mask(clip input, clip "prefilter", int "pel", int "blksize", bool "chroma", int "dct") {
  360.     ox = input.width()
  361.     oy = input.height()
  362.     HD = (ox > 1099 || oy > 599)
  363.     sisbob  = round(framerate(input))==60 || framerate(input)==50
  364.     pel = default( pel,     HD ? 1 : 2 )
  365.     dct = default( dct, sisbob ? 0 : 2 )
  366.     blksize = default(blksize,HD ? sisbob ? 8 : 16 : sisbob ? 4 : 8)
  367. preclip= defined(prefilter) ? prefilter : (VersionNumber() < 2.60) && isyv12(input) ? input.HQdn3d().FFT3DFilter() : input.HQdn3d_2().FFT3DFilter()
  368. sup    = preclip.MSuper(pel=pel,sharp=1)
  369. fv1    = sup.MAnalyse(isb=false,delta=1,DCT=dct,Truemotion=false,blksize=blksize,chroma=chroma)
  370. fv2    = sup.MAnalyse(isb=true,delta=1,DCT=dct,Truemotion=true,blksize=blksize,chroma=chroma)
  371.  
  372. momask1 = input.MMask(fv1, kind = 1, ml=2)
  373. momask2 = input.MMask(fv2, kind = 1, ml=3)
  374. momask1 =isyuy2(input) && VersionNumber() < 2.60 ? momask1.Interleaved2Planar() : isyuy2(input) ? momask1.converttoyv16() : momask1
  375. momask2 =isyuy2(input) && VersionNumber() < 2.60 ? momask2.Interleaved2Planar() : isyuy2(input) ? momask2.converttoyv16() : momask2
  376. mt_average(momask1,momask2,u=3,v=3)
  377. }
  378.  
  379.  
  380. ##############
  381. # sanimebob by A.SONY
  382.  
  383. function sanimebob(clip i, val "useqtgmc", val "bobpresmooth", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", bool "usedaa3mod", bool "usesmam", int "tr2") {
  384.  
  385. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  386. qtgmc_lsb = default(qtgmc_lsb, ssispmt ? i.BitsPerComponent() > 8 ? false : true : true)
  387.  
  388. useq         = default (useqtgmc,                                                                                                           0)
  389. Stringuseq   = IsString(useq                                                                                                                 )
  390. bobpresmbool = default (isbool(bobpresmooth) ? bobpresmooth : !Stringuseq ? (useq==8 || defined(bobpresmooth)) : defined(bobpresmooth), false)
  391. Str          = default (Str,                                                                                                              1.5)
  392. tr2          = default (tr2,                                                                                !Stringuseq ? useq==8 ? 3 : 1 : 1)
  393. usedaa3mod   = default (usedaa3mod,                                            !Stringuseq ? useq==4 || useq==5 || useq==7 || useq==9 : false)
  394. usesmam      = default (usesmam,                                                       !Stringuseq ? !(useq==0 || useq==1 || useq==8) : false)
  395.  
  396. Assert(Isint(useq) || Stringuseq, "'useqtgmc' only accepts int or string")
  397.  
  398. prefiltered_i   = defined(bobpresmooth) ? isclip(bobpresmooth) ? bobpresmooth : IsString(bobpresmooth) ? Eval("i." + bobpresmooth) : undefined() : undefined()
  399.  
  400. nonyuy2=!(VersionNumber() < 2.6) && i.isyuy2()
  401. iforbob   = bobpresmbool ? defined(prefiltered_i) ? prefiltered_i : i.QTGMC_bob(0,0.5).nonyuy2clipin(nonyuy2).reduceflicker(strength=2).nonyuy2clipout(nonyuy2).interlaced60or50(BFF=!(GetParity(i))) : i
  402. iforbob   = bobpresmbool && !defined(prefiltered_i) ? isyuy2(i) ? iforbob.SeparateFields().Interleaved2Planar().Repair(i.SeparateFields().Interleaved2Planar(),Planar=true).Planar2Interleaved().weave() : iforbob.SeparateFields().Repair(i.SeparateFields()).weave() : iforbob
  403.  
  404. pyi       = i.pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
  405. pei       = i.eedi3(-2,sclip=iforbob.nnedi3(-2)).pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
  406.  
  407. ymodclip  = VersionNumber() < 2.60 ? pyi.yadifmod(mode=3, edeint=pei).crop(0,4,-0,-4) : pyi.nonyuy2clipin(nonyuy2).yadifmod2(mode=3, edeint=pei.nonyuy2clipin(nonyuy2)).crop(0,4,-0,-4)
  408. yadifclip = isyuy2(i) && VersionNumber() < 2.60 ? ymodclip.Interleaved2Planar().Repair(i.TDeint(1,emask=iforbob.tmm2_ortmm1(1)).Interleaved2Planar(),Planar=true).Planar2Interleaved() : \
  409.                                                   ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm2_ortmm1(1)).nonyuy2clipin(nonyuy2)).nonyuy2clipout(nonyuy2)
  410.  
  411. # for custom qtgmc, don't forget to put the input clip like this:- iforbob.QTGMC(... or yadifclip.QTGMC(... or i.QTGMC(...
  412. QTGMCclip = isstring(useq) ? eval(useq) : \
  413.                              useq==0 ? yadifclip : \
  414.        useq==1 || useq==2 || useq==4 ? iforbob.QTGMC(SourceMatch=3, Lossless=2, EdiExt=yadifclip, tr0=1, tr1=1, tr2=tr2, lsb=qtgmc_lsb, rep0=11, rep1=11, rep2=11, Sharpness=0.1, TV_range=TV_range, Str=Str, Amp=Amp) : \
  415.                   useq==3 || useq==5 ? yadifclip.QTGMC(InputType=1, tr0=1, tr1=1, tr2=tr2, lsb=qtgmc_lsb, rep0=11, rep1=11, rep2=11, Sharpness=0.1, TV_range=TV_range, Str=Str, Amp=Amp) : \
  416.                   useq==6 || useq==7 ? yadifclip.QTGMC(InputType=1, tr0=0, lsb=qtgmc_lsb, Sharpness=usedaa3mod ? 0.0 : 0.1, TV_range=TV_range, Str=Str, Amp=Amp) : \
  417.                                        i.QTGMC(SourceMatch=3, Lossless=2, EdiExt=yadifclip, useEdiExt=!(useq==9), tr0=useq==9 ? -1 : undefined(), rep0=useq==9 ? undefined() : 11, tr2=tr2, lsb=qtgmc_lsb, Sharpness=0.0, TV_range=TV_range, Str=Str, Amp=Amp)
  418.  
  419. daa3mclip = usedaa3mod ? QTGMCclip.daa3mod() : QTGMCclip
  420.  
  421. !usesmam ? daa3mclip : \
  422.            yadifclip.smam(filter=QTGMCclip)
  423. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement