################################################################### # Fast Degrain by Sagekilla # # # # Nothing special, just removes noise and grain very quickly and # # sharpens the image a bit. Is 2-3x faster than TemporalDegrain # # Tweak to your tastes, but defaults perform perfectly fine. # # # # Required plugins: HQDn3d.dll / LimitedSharpenFaster.avs # # MT.dll / mt_masktools.dll / MVTools.dll # # # ################################################################### # Fast Degrain Syntax # # threads = Number of threads for MT -- Speeds up the program on multicores. # degrain = MVDegrain 1, 2, or 3. Each is increasingly stronger and slower. # thSAD = Affects overall degraining strength. Default works fine. # limit = Limits max MVDegrain change. Decrease if you experience artifacts. # pel = MVAnalyse Subpixel accuracy. Higher values give better MVs and lowers speed. # ov = MVAnalyse overlap. Must be even and < blksize/2. Higher values are better, but slower. # sharp = Enables LSF sharpening. Disable for speed and compression boost. # str = LSF's sharpening strength. Increase for more sharpening. # ss = Supersampling for LSF, values over 1 decrease edge aliasing. # sft = Dampens LSF sharpening (It weakens the sharpening) # oshot = Sharpening limit, increase it too much and it causes haloing. function FastDegrain( clip input, int "degrain", int "thSAD", int "limit", int "pel", \ int "ov", bool "sharp", int "str", float "ss", int "sft", int "oshot" ) { o = input degrain = default( degrain, 2 ) # Degraining method. (1 - 3) thSAD = default( thSAD, 350 ) # MVDegrain thSAD. limit = default( limit, 255 ) # MVDegrain limit (0 - 255) pel = default( pel, 1 ) # MVAnalyse pel (1, 2, 4) ov = default( ov, 2 ) # MVAnalyse block overlap (even, ov<=blksize/2) sharp = default( sharp, false ) # Toggles LSF str = default( str, 160 ) # LSF strength ss = default( ss, 1.5 ) # LSF supersampling sft = default( sft, 30 ) # LSF soft oshot = default( oshot, 1 ) # LSF overshoot # Sharpen the video a bit to counter the slight loss of detail and texture. # I prefer how the video looks with this before. You can also do this after degraining. o = (sharp==true) ? o.LimitedSharpenFaster(strength=str,ss_x=ss,ss_y=ss,soft=sft,overshoot=oshot) : o # Search for motion vectors. No prefiltered clips because it slows things down too much. b3v = (degrain>=3) ? o.MVAnalyse(isb=true, delta=3,idx=1,pel=pel,overlap=ov) : NOP() b2v = (degrain>=2) ? o.MVAnalyse(isb=true, delta=2,idx=1,pel=pel,overlap=ov) : NOP() b1v = (degrain>=1) ? o.MVAnalyse(isb=true, delta=1,idx=1,pel=pel,overlap=ov) : NOP() f1v = (degrain>=1) ? o.MVAnalyse(isb=false,delta=1,idx=1,pel=pel,overlap=ov) : NOP() f2v = (degrain>=2) ? o.MVAnalyse(isb=false,delta=2,idx=1,pel=pel,overlap=ov) : NOP() f3v = (degrain>=3) ? o.MVAnalyse(isb=false,delta=3,idx=1,pel=pel,overlap=ov) : NOP() # Degraining the video using MVDegrain. Nothing special here. o = (degrain==1) ? o.MVDegrain1(b1v,f1v,idx=1,limit=limit) : o o = (degrain==2) ? o.MVDegrain2(b1v,f1v,b2v,f2v,idx=1,limit=limit) : o o = (degrain==3) ? o.MVDegrain3(b1v,f1v,b2v,f2v,b3v,f3v,idx=1,limit=limit) : o return(o) } function MTDegrain( clip input, int "threads", int "degrain", int "thSAD", int "limit", \ int "pel", int "ov", bool "sharp", int "str", float "ss", int "sft", int "oshot" ) { o = input threads = default( threads, 2 ) # Threads to use for MT. degrain = default( degrain, 2 ) # Degraining method. (1 - 3) thSAD = default( thSAD, 350 ) # MVDegrain thSAD. limit = default( limit, 255 ) # MVDegrain limit (0 - 255) pel = default( pel, 1 ) # MVAnalyse pel (1, 2, 4) ov = default( ov, 2 ) # MVAnalyse block overlap (even, ov<=blksize/2) sharp = default( sharp, false ) # Toggles LSF str = default( str, 160 ) # LSF strength ss = default( ss, 1.5 ) # LSF supersampling sft = default( sft, 30 ) # LSF soft oshot = default( oshot, 1 ) # LSF overshoot global idx1 = 50 o MT(""" o = last idx1 = idx1 + 1 # Sharpen the video a bit to counter the slight loss of detail and texture. o = (sharp==true) ? o.LimitedSharpenFaster(strength=str,ss_x=ss,ss_y=ss,soft=sft,overshoot=oshot) : o # Search for motion vectors. No prefiltered clips because it slows things down too much. b3v = (degrain>=3) ? o.MVAnalyse(isb=true, delta=3,idx=idx1,pel=pel,overlap=ov) : BlankClip b2v = (degrain>=2) ? o.MVAnalyse(isb=true, delta=2,idx=idx1,pel=pel,overlap=ov) : BlankClip b1v = (degrain>=1) ? o.MVAnalyse(isb=true, delta=1,idx=idx1,pel=pel,overlap=ov) : BlankClip f1v = (degrain>=1) ? o.MVAnalyse(isb=false,delta=1,idx=idx1,pel=pel,overlap=ov) : BlankClip f2v = (degrain>=2) ? o.MVAnalyse(isb=false,delta=2,idx=idx1,pel=pel,overlap=ov) : BlankClip f3v = (degrain>=3) ? o.MVAnalyse(isb=false,delta=3,idx=idx1,pel=pel,overlap=ov) : BlankClip # Degraining the video using MVDegrain. Nothing special here. o = (degrain==1) ? o.MVDegrain1(b1v,f1v,idx=idx1,limit=limit) : o o = (degrain==2) ? o.MVDegrain2(b1v,f1v,b2v,f2v,idx=idx1,limit=limit) : o o = (degrain==3) ? o.MVDegrain3(b1v,f1v,b2v,f2v,b3v,f3v,idx=idx1,limit=limit) : o return(o) """,threads,3) }