# _______________________________________________________ # # 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 # Deen v.1 beta2 # # # Usage examples: # # UberSmooth(ReducedRinging=False,ToonMode=True) # UberSmoothReverse(NoWarnings=True,Debug=True) # UberSmooth(ProcessChoma=False,FFT3DOnly=True) # UberSmoothReverse(DeGrainL=2.5,Weight=0.5) # # Function UberSmooth(Clip Clp,Float"DeGrainL",Float"DeGrainC",Int"DeNoiseL",Int"DeNoiseC",Int"Temp" \ ,Float"Weight",Bool"ProcessChoma",Bool"FFT3DOnly",Bool"ToonMode",Bool"ReducedRinging" \ ,Bool"ReducedBanding",Bool"Debug",Bool"NoWarnings",Bool"ShowCredits") { # Defaults OX = Clp.Width OY = Clp.Height DeGrainL = Default(DeGrainL,1) DeGrainC = Default(DeGrainC,1) DeNoiseL = Default(DeNoiseL,1) DeNoiseC = Default(DeNoiseC,1) Temp = Default(Temp,25) Weight = Default(Weight,1) ProcessChoma = Default(ProcessChoma,True) FFT3DOnly = Default(FFT3DOnly,False) ToonMode = Default(ToonMode,False) ReducedRinging = Default(ReducedRinging,True) ReducedBanding = Default(ReducedBanding,True) Debug = Default(Debug,False) NoWarnings = Default(NoWarnings,False) ShowCredits = Default(ShowCredits,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) DeNoisedT1 = DeGrained.Deen("a3d",4,DeNoiseL,DeNoiseC,Temp) DeNoisedT2 = DeGrained.Deen("a3d",3,DeNoiseL,DeNoiseC,Temp+5) DeNoisedT1 = ReducedRinging ? DeGrained.Deen("a3d",4,DeNoiseL+1,DeNoiseC+1,Temp) : DeNoisedT1 DeNoisedT2 = ReducedRinging ? DeGrained.Deen("a3d",3,DeNoiseL+1,DeNoiseC+1,Temp+5) : DeNoisedT2 DeNoisedN1 = DeGrained.Deen("c3d",1,DeNoiseL,DeNoiseC,Temp) DeNoisedN2 = DeGrained.Deen("c3d",0,DeNoiseL,DeNoiseC,Temp+5) DeNoisedN1 = ReducedRinging ? DeGrained.Deen("c3d",1,DeNoiseL+1,DeNoiseC+1,Temp) : DeNoisedN1 DeNoisedN2 = ReducedRinging ? DeGrained.Deen("c3d",0,DeNoiseL+1,DeNoiseC+1,Temp+5) : DeNoisedN2 DeNoisedA = ToonMode ? DeNoisedT1 : DeNoisedN1 DeNoisedB = ToonMode ? DeNoisedT2 : DeNoisedN2 DeNoisedA = FFT3DOnly ? DeGrained : DeNoisedA DeNoisedB = FFT3DOnly ? DeGrained : DeNoisedB Denoised = MergeLuma(DeNoisedA,DeNoisedB,0.5) Denoised = ProcessChoma ? MergeChroma(DeNoisedA,DeNoisedB,0.5) : MergeChroma(DeNoised,Clp) Filtered = FFT3DOnly ? DeGrained : Denoised Filtered = ReducedBanding ? \ yv12lutxy(Clp,Filtered,"x 48 < x 2 + y < x 2 + x 2 - y > x 2 - y ? ? x 64 < x 1 + y < x 1 + x 1 - y > x 1 - x ? ? y ? ?",U=2,V=2) \ : Filtered 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=334,y=491,Text_Color=$FFFFFF,"MarcFD") \ .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",Int"DeNoiseL",Int"DeNoiseC",Int"Temp" \ ,Float"Weight",Bool"ProcessChoma",Bool"FFT3DOnly",Bool"ToonMode",Bool"ReducedRinging" \ ,Bool"ReducedBanding",Bool"Debug",Bool"NoWarnings",Bool"ShowCredits") { # Defaults OX = Clp.Width OY = Clp.Height DeGrainL = Default(DeGrainL,1) DeGrainC = Default(DeGrainC,1) DeNoiseL = Default(DeNoiseL,1) DeNoiseC = Default(DeNoiseC,1) Temp = Default(Temp,25) Weight = Default(Weight,1) ProcessChoma = Default(ProcessChoma,True) FFT3DOnly = Default(FFT3DOnly,False) ToonMode = Default(ToonMode,False) ReducedRinging = Default(ReducedRinging,True) ReducedBanding = Default(ReducedBanding,True) Debug = Default(Debug,False) NoWarnings = Default(NoWarnings,False) ShowCredits = Default(ShowCredits,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() DeNoisedA = Clp.Deen("c3d",1,DeNoiseL,DeNoiseC,Temp) DeNoisedB = Clp.Deen("c3d",0,DeNoiseL,DeNoiseC,Temp+5) DeNoisedA = ReducedRinging ? Clp.Deen("c3d",1,DeNoiseL+1,DeNoiseC+1,Temp) : DeNoisedA DeNoisedB = ReducedRinging ? Clp.Deen("c3d",0,DeNoiseL+1,DeNoiseC+1,Temp+5) : DeNoisedB DeNoisedT1 = Clp.Deen("a3d",3,DeNoiseL,DeNoiseC,Temp) DeNoisedT2 = Clp.Deen("a3d",4,DeNoiseL,DeNoiseC,Temp+5) DeNoisedT1 = ReducedRinging ? Clp.Deen("a3d",3,DeNoiseL+1,DeNoiseC+1,Temp) : DeNoisedT1 DeNoisedT2 = ReducedRinging ? Clp.Deen("a3d",4,DeNoiseL+1,DeNoiseC+1,Temp+5) : DeNoisedT2 DenoisedA = ToonMode ? DeNoisedT1 : DenoisedA DenoisedB = ToonMode ? DeNoisedT2 : DenoisedB DenoisedC = MergeLuma(DeNoisedA,DeNoisedB,0.5) Denoised = ProcessChoma ? MergeChroma(DeNoisedA,DeNoisedB,0.5) : MergeChroma(DeNoisedC,Clp) Denoised = FFT3DOnly ? Clp : DenoisedC 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) Filtered = ReducedBanding ? \ yv12lutxy(Clp,Filtered,"x 48 < x 2 + y < x 2 + x 2 - y > x 2 - y ? ? x 64 < x 1 + y < x 1 + x 1 - y > x 1 - x ? ? y ? ?",U=2,V=2) \ : Filtered 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=334,y=491,Text_Color=$FFFFFF,"MarcFD") \ .Subtitle(size=16,x=338,y=521,Text_Color=$FFFFFF,"Manao") \ .ConverttoYV12().Blur(0.1,0.1).FadeIn(25) : Final # Result Return(Final) }