# mfRainbow v0.2 by mf # Derainbows in areas of high Y, U and V frequencies. # # I don't claim copyright but I ask you to treat my script # fairly. # # Changelog: added U and V mask-building, overhauled Deen settings, changed to YV12. # function mfRainbow(clip input, string "mode", int "strength", bool "post") { strength = Default(strength, 255) # processing strength, 0-255 post = Default(post, false) # spatial postprocessing on/off inputrgb = input.ConvertToRGB32() input.UnsharpMask(200).UnsharpMask(200).EdgeMask(3, 255, 255, 255, "roberts", Y=3, V=1,\ U=1).Deflate().Levels(0, 1.0, 45, 0, 255).Blur(1.0).Deflate().Levels(0, 1.0, 75, 0, \ 255).Deflate().Deflate().Deflate().Greyscale() ymask = last input.UToY().Unsharpmask(500).Unsharpmask(500).EdgeMask(3, 255, 255, 255, "roberts", \ Y=3, V=1, U=1).Levels(0, 1.0, 100, 0, 255).Greyscale() LanczosResize(input.width, input.height) umask = last input.VToY().Unsharpmask(500).Unsharpmask(500).EdgeMask(3, 255, 255, 255, "roberts", \ Y=3, V=1, U=1).Levels(0, 1.0, 75, 50, 255).Greyscale() LanczosResize(input.width, input.height) vmask = last YV12Layer(ymask, umask, "mul", 255, chroma=false, Y=3, V=1, U=1).Levels(0, 1.0, 45, \ 0, 255) yumask = last YV12Layer(yumask, vmask, "mul", 255, chroma=false, Y=3, V=1, U=1).Blur(1.0).Levels(0, \ 1.0, 25, 0, 255).Inflate().Inflate().Deflate().Deflate().Deflate().Deflate().Deflate()\ .Deflate().Deflate().Deflate().Levels(10, 0.4, 130, 0, strength) edgemask = last derainbowu = input.UToY().Deen("a3d", 4, 10, 1, 50).Deen("a3d", 4, 15, 1, 50).Deen( \ "a3d", 4, 20, 1, 50) derainbowv = input.VToY().Deen("a3d", 4, 10, 1, 50).Deen("a3d", 4, 15, 1, 50).Deen( \ "a3d", 4, 20, 1, 50) derainbow = YToUV(derainbowu, derainbowv, input.Greyscale()) edgerainbow = MaskedMerge(input, derainbow, edgemask, Y=1, U=3, V=3) semifinal = input.MergeChroma(edgerainbow) input = semifinal.MSmooth() # cause of a weird argument error final = semifinal.MergeChroma(input) return post ? final : semifinal }