# _______________________________________________________ # # UberSmooth(R) | So slow that it needs a copyright sign # _______________________________________________________ # # Another absurd outrage by Soulhunter... \m\ ^_^ /m/ # _______________________________________________________ # # # Requirements: # # FFT3dFilter v.1.8.5 # MaskTools v.1.5.8 # DCTFun4b # # # Usage examples: # # UberSmooth(DeGRainL=2,DeGrainC=1,FFT3DOnly=True) # UberSmoothReverse(ProcessChoma=False,Debug=True) # UberSmooth(2,2,3,3,ReducedRinging=False) # UberSmooth(3,3,3,3,Weight=0.5) # # Function UberSmooth(Clip Clp,Float"DeGrainL",Float"DeGrainC",Float"DeNoiseL",Float"DeNoiseC" \ ,Float"Weight",Bool"ProcessChoma",Bool"FFT3DOnly",Bool"ReducedRinging" \ ,Bool"ShowCredits",Bool"Debug",Bool"NoWarnings") { # Defaults OX = Clp.Width OY = Clp.Height DeGrainL = Default(DeGrainL,1) DeGrainC = Default(DeGrainC,1) DeNoiseL = Default(DeNoiseL,1) DeNoiseC = Default(DeNoiseC,1) Weight = Default(Weight,1) ProcessChoma = Default(ProcessChoma,True) FFT3DOnly = Default(FFT3DOnly,False) ReducedRinging = Default(ReducedRinging,True) ShowCredits = Default(ShowCredits,False) Debug = Default(Debug,False) NoWarnings = Default(NoWarnings,False) BlackBox = BlankClip(Width=720,Height=576,Length=1440) # Warning messages ResolutionCheck1 = OX <704 ? Clp.Subtitle(Size=16, \ "Warning: If your source is a DVD, better use UberSmooth before downsizing!") : Clp ResolutionCheck2 = OX <704 ? Clp.Subtitle(Size=16,Y=32, \ "Warning: If your source is a DVD, better use UberSmooth before downsizing!") : Clp ResolutionCheck3 = Frac(Float(OX)/16) == 0.0 ? ResolutionCheck1 : ResolutionCheck2 Clp = NoWarnings ? Clp : ResolutionCheck3 ResolutionCheck4 = Frac(Float(OX)/16) == 0.0 ? Clp : Clp.Subtitle(Size=16, \ "Warning: Your resolution is not mod 16!") Clp = NoWarnings ? Clp : ResolutionCheck4 ResolutionCheck5 = Frac(Float(OY)/16) == 0.0 ? Clp : Clp.Subtitle(Size=16, \ "Warning: Your resolution is not mod 16!") Clp = NoWarnings ? Clp : ResolutionCheck5 # Filtering Clp = Clp.isYV12() ? Clp : Clp.ConvertToYV12() DeGrainedLumA = ReducedRinging ? Clp \ .FFT3dFilter(Sigma=DeGrainL/1.3333,BT=3,OW=8,OH=8,BW=16,BH=16,Plane=0) \ : Clp.FFT3dFilter(Sigma=DeGrainL,BT=3,OW=16,OH=16,BW=32,BH=32,Plane=0) DeGrainedChrA1 = ProcessChoma ? DeGrainedLumA \ .FFT3dFilter(Sigma=DeGrainC,BT=3,OW=16,OH=16,BW=32,BH=32,Plane=3) : DeGrainedLumA DeGrainedChrA2 = ProcessChoma ? DeGrainedLumA \ .FFT3dFilter(Sigma=DeGrainC,BT=3,OW=8,OH=8,BW=16,BH=16,Plane=3) : DeGrainedLumA DeGrainedA = ReducedRinging ? DeGrainedChrA2 : DeGrainedChrA1 DeGrainedLumB = ReducedRinging ? Clp \ .FFT3dFilter(Sigma=DeGrainL/1.33,BT=3,OW=12,OH=12,BW=24,BH=24,Plane=0) \ : Clp.FFT3dFilter(Sigma=DeGrainL,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=0) DeGrainedChrB1 = ProcessChoma ? DeGrainedLumB \ .FFT3dFilter(Sigma=DeGrainC/1.333,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=3) : DeGrainedLumB DeGrainedChrB2 = ProcessChoma ? DeGrainedLumB \ .FFT3dFilter(Sigma=DeGrainC/1.333,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=3) : DeGrainedLumB DeGrainedB = ReducedRinging ? DeGrainedChrB2 : DeGrainedChrB1 DeGrained = MergeLuma(DeGrainedA,DeGrainedB,0.5) DeGrained = ProcessChoma ? MergeChroma(DeGrainedA,DeGrainedB,0.5) : MergeChroma(DeGrained,Clp) DeNoised = DeGrained.DCTFun4b(DeNoiseL,DeNoiseC) Denoised = ProcessChoma ? DeNoised : MergeChroma(DeNoised,Clp) Filtered = FFT3DOnly ? DeGrained : Denoised Power = MergeLuma(Clp,Filtered,Weight) Power = ProcessChoma ? MergeChroma(Power,Filtered,Weight) : Power Final = ProcessChoma ? Power : Power.MergeChroma(Clp) # Debug option DebugOriginal = Clp.Crop(0,0,OX/2,OY).Subtitle("Original") DebugFiltered = Final.Crop(OX/2,0,OX/2,OY).Subtitle("Filtered") DebugView = StackHorizontal(DebugOriginal,DebugFiltered) Final = Debug ? DebugView : Final # Credits Final = ShowCredits ? BlackBox \ .Subtitle(size=34,x=271,y=25,Text_Color=$FFFFFF,"UberSmooth") \ .Subtitle(x=177,y=69,Text_Color=$FFFFFF,"ANOTHER ABSURD OUTRAGE BY SOULHUNTER") \ .Subtitle(x=167,y=77,Text_Color=$FFFFFF,"____________________________________________") \ .Subtitle(size=16,x=283,y=141,Text_Color=$FFFFFF,"FOR MORE INFO VISIT:") \ .Subtitle(x=277,y=145,Text_Color=$FFFFFF,"___________________") \ .Subtitle(size=16,x=283,y=179,Text_Color=$FFFFFF,"http://forum.doom9.org") \ .Subtitle(size=16,x=281,y=209,Text_Color=$FFFFFF,"http://www.avisynth.org") \ .Subtitle(size=16,x=271,y=239,Text_Color=$FFFFFF,"http://mf.onthanet.nl/forum") \ .Subtitle(size=16,x=273,y=269,Text_Color=$FFFFFF,"irc://irc.rizon.net/encoders") \ .Subtitle(size=16,x=238,y=299,Text_Color=$FFFFFF,"irc://irc.enterthegame.com/mf-sensei") \ .Subtitle(size=16,x=286,y=363,Text_Color=$FFFFFF,"SPECIAL THANKS TO:") \ .Subtitle(x=281,y=367,Text_Color=$FFFFFF,"__________________") \ .Subtitle(size=16,x=351,y=401,Text_Color=$FFFFFF,"mf") \ .Subtitle(size=16,x=341,y=431,Text_Color=$FFFFFF,"Didče") \ .Subtitle(size=16,x=344,y=461,Text_Color=$FFFFFF,"Fizik") \ .Subtitle(size=16,x=336,y=491,Text_Color=$FFFFFF,"Pruned") \ .Subtitle(size=16,x=338,y=521,Text_Color=$FFFFFF,"Manao") \ .ConverttoYV12().Blur(0.1,0.1).FadeIn(25) : Final # Result Return(Final) } # Reverse ordered filtering Function UberSmoothReverse(Clip Clp,Float"DeGrainL",Float"DeGrainC",Float"DeNoiseL",Float"DeNoiseC" \ ,Float"Weight",Bool"ProcessChoma",Bool"FFT3DOnly",Bool"ReducedRinging" \ ,Bool"ShowCredits",Bool"Debug",Bool"NoWarnings") { # Defaults OX = Clp.Width OY = Clp.Height DeGrainL = Default(DeGrainL,0) DeGrainC = Default(DeGrainC,0) DeNoiseL = Default(DeNoiseL,0) DeNoiseC = Default(DeNoiseC,0) Weight = Default(Weight,1) ProcessChoma = Default(ProcessChoma,True) FFT3DOnly = Default(FFT3DOnly,False) ReducedRinging = Default(ReducedRinging,False) ShowCredits = Default(ShowCredits,False) Debug = Default(Debug,False) NoWarnings = Default(NoWarnings,False) BlackBox = BlankClip(Width=720,Height=576,Length=1440) # Warning messages ResolutionCheck1 = OX <704 ? Clp.Subtitle(Size=16, \ "Warning: If your source is a DVD, better use UberSmooth before downsizing!") : Clp ResolutionCheck2 = OX <704 ? Clp.Subtitle(Size=16,Y=32, \ "Warning: If your source is a DVD, better use UberSmooth before downsizing!") : Clp ResolutionCheck3 = Frac(Float(OX)/16) == 0.0 ? ResolutionCheck1 : ResolutionCheck2 Clp = NoWarnings ? Clp : ResolutionCheck3 ResolutionCheck4 = Frac(Float(OX)/16) == 0.0 ? Clp : Clp.Subtitle(Size=16, \ "Warning: Your resolution is not mod 16!") Clp = NoWarnings ? Clp : ResolutionCheck4 ResolutionCheck5 = Frac(Float(OY)/16) == 0.0 ? Clp : Clp.Subtitle(Size=16, \ "Warning: Your resolution is not mod 16!") Clp = NoWarnings ? Clp : ResolutionCheck5 # Filtering Clp = Clp.isYV12() ? Clp : Clp.ConvertToYV12() DeNoised = Clp.DCTFun4b(DeNoiseL,DeNoiseC) Denoised = ProcessChoma ? DeNoised : MergeChroma(DeNoised,Clp) Denoised = FFT3DOnly ? Clp : DeNoised DeGrainedLumA = ReducedRinging ? Denoised \ .FFT3dFilter(Sigma=DeGrainL/1.333,BT=3,OW=8,OH=8,BW=16,BH=16,Plane=0) \ : Denoised.FFT3dFilter(Sigma=DeGrainL,BT=3,OW=16,OH=16,BW=32,BH=32,Plane=0) DeGrainedChrA1 = ProcessChoma ? DeGrainedLumA \ .FFT3dFilter(Sigma=DeGrainC,BT=3,OW=16,OH=16,BW=32,BH=32,Plane=3) : DeGrainedLumA DeGrainedChrA2 = ProcessChoma ? DeGrainedLumA \ .FFT3dFilter(Sigma=DeGrainC,BT=3,OW=8,OH=8,BW=16,BH=16,Plane=3) : DeGrainedLumA DeGrainedA = ReducedRinging ? DeGrainedChrA2 : DeGrainedChrA1 DeGrainedLumB = ReducedRinging ? Denoised \ .FFT3dFilter(Sigma=DeGrainL/1.333,BT=3,OW=12,OH=12,BW=24,BH=24,Plane=0) \ : Denoised.FFT3dFilter(Sigma=DeGrainL,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=0) DeGrainedChrB1 = ProcessChoma ? DeGrainedLumB \ .FFT3dFilter(Sigma=DeGrainC,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=3) : DeGrainedLumB DeGrainedChrB2 = ProcessChoma ? DeGrainedLumB \ .FFT3dFilter(Sigma=DeGrainC,BT=4,OW=21,OH=21,BW=49,BH=49,Plane=3) : DeGrainedLumB DeGrainedB = ReducedRinging ? DeGrainedChrB2 : DeGrainedChrB1 Filtered = MergeLuma(DeGrainedA,DeGrainedB,0.5) Filtered = ProcessChoma ? MergeChroma(DeGrainedA,DeGrainedB,0.5) : MergeChroma(Filtered,Clp) Power = MergeLuma(Clp,Filtered,Weight) Power = ProcessChoma ? MergeChroma(Power,Filtered,Weight) : Power Final = ProcessChoma ? Power : Power.MergeChroma(Clp) # Debug option DebugOriginal = Clp.Crop(0,0,OX/2,OY).Subtitle("Original") DebugFiltered = Final.Crop(OX/2,0,OX/2,OY).Subtitle("Filtered") DebugView = StackHorizontal(DebugOriginal,DebugFiltered) Final = Debug ? DebugView : Final # Credits Final = ShowCredits ? BlackBox \ .Subtitle(size=34,x=271,y=25,Text_Color=$FFFFFF,"UberSmooth") \ .Subtitle(x=177,y=69,Text_Color=$FFFFFF,"ANOTHER ABSURD OUTRAGE BY SOULHUNTER") \ .Subtitle(x=167,y=77,Text_Color=$FFFFFF,"____________________________________________") \ .Subtitle(size=16,x=283,y=141,Text_Color=$FFFFFF,"FOR MORE INFO VISIT:") \ .Subtitle(x=277,y=145,Text_Color=$FFFFFF,"___________________") \ .Subtitle(size=16,x=283,y=179,Text_Color=$FFFFFF,"http://forum.doom9.org") \ .Subtitle(size=16,x=281,y=209,Text_Color=$FFFFFF,"http://www.avisynth.org") \ .Subtitle(size=16,x=271,y=239,Text_Color=$FFFFFF,"http://mf.onthanet.nl/forum") \ .Subtitle(size=16,x=273,y=269,Text_Color=$FFFFFF,"irc://irc.rizon.net/encoders") \ .Subtitle(size=16,x=238,y=299,Text_Color=$FFFFFF,"irc://irc.enterthegame.com/mf-sensei") \ .Subtitle(size=16,x=286,y=363,Text_Color=$FFFFFF,"SPECIAL THANKS TO:") \ .Subtitle(x=281,y=367,Text_Color=$FFFFFF,"__________________") \ .Subtitle(size=16,x=351,y=401,Text_Color=$FFFFFF,"mf") \ .Subtitle(size=16,x=341,y=431,Text_Color=$FFFFFF,"Didče") \ .Subtitle(size=16,x=344,y=461,Text_Color=$FFFFFF,"Fizik") \ .Subtitle(size=16,x=336,y=491,Text_Color=$FFFFFF,"Pruned") \ .Subtitle(size=16,x=338,y=521,Text_Color=$FFFFFF,"Manao") \ .ConverttoYV12().Blur(0.1,0.1).FadeIn(25) : Final # Result Return(Final) }