View difference between Paste ID: uimveNuT and xH06gqJm
SHOW: | | - or go back to the newest paste.
1-
# Advanced Denoising and anime bob v1.28
1+
# Advanced Denoising and anime bob v1.29
2
3
# MotionThresh by mf
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
50
# Average motion soft-thresholding based on 5 thresholds
51
# Dependancies: MotionThresh, BlendMulti
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
Interleave(c3, c2, c4, c1, c5).ParameterisedBlend(0.20, 0.20, 0.20, 0.20, 0.20, gamma=1, scaleweights=false).SelectEvery(5,0)
109
""") : 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
fast ? cache<0 ? last : last.RequestLinear(8, cache, 5, false, false) : last
111
TemporalSoften(radius,255,0,255,2)
112
fast ? last : Levels(floor, 1, ceil, min, max)
113
fast ? last : ColorYUV(levels="TV->PC")
114
tile ? last : PointResize(input.width, input.height)
115
}
116
117
118
##########
119
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") {
120
d = default (DarkPreserve      , true)
121
mc = default (mc      , true)
122
ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
123
f = Default(f, ssispmt ? sqrt(Pow(2.0,input.BitsPerComponent())) : 16.0)
124
lsb = default (lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
125
lsb_in = default (lsb_in      , false)
126
lsb_out = default (lsb_out      , lsb_in)
127
lsb = lsb_in || lsb_out ? true : lsb
128
luma_rebuild = default (luma_rebuild      , true)
129
u = default (u      , true)
130
v = default (v      , true)
131
dfttest_params = default(dfttest_params, "")
132
mcdfttest_params = default(mcdfttest_params, "")
133
pp = default (pp, "blur(1.53)")
134
135
custom_filter = defined(custom_filter) ? custom_filter : \
136
                                                         mc ? "dfttestmc(pp=Eval(pp),lsb=lsb, Sigma=adSigma/f,rStr=rStr,amp=amp,lsb_in=lsb_in,luma_rebuild=luma_rebuild,u=u,v=v,dfttest_params=dfttest_params" + mcdfttest_params + ")" : \
137
                                                              "dfttest(lsb=lsb, Sigma=adSigma/f, lsb_in=lsb_in,u=u,v=v" + dfttest_params + ")"
138
139
input
140
MotionRampadc = defined(MotionRampadc) ? MotionRampadc : last.MotionRamp(5,10,15,20,25,Max=255,fast=True)
141
lsb_out && !lsb_in ? Dither_convert_8_to_16() : lsb_in && !lsb_out ? Ditherpost(mode=-1, y=1, u=1,v=1) : last
142
return GScriptClip("""
143
                     adfloat = AverageLuma(MotionRampadc)
144
                     adSigmb = ssispmt ? BitsPerComponent() > 8 ? BitsPerComponent() == 10 ? 2 : BitsPerComponent() == 12 ? 4 : BitsPerComponent() == 14 ? 8 : nop() : nop() : nop()
145
                     adSigma = ssispmt ? BitsPerComponent() > 8 ? BitsPerComponent() < 16 ? adfloat/adSigmb : BitsPerComponent() == 32 ? sqrt(sqrt(adfloat)) : sqrt(adfloat) : adfloat : adfloat
146
                     (lsb_out && !lsb_in) || (lsb_in && !lsb_out) ? input : last
147
                     adden = Eval(custom_filter)
148
                     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
149
                     !d && !lsb_out && lsb ? Ditherpost(mode=7, slice=false) : last
150
                     """, args="MotionRampadc, f, d, rStr, amp, lsb_in, lsb_out, lsb, luma_rebuild, u, v,dfttest_params,mcdfttest_params,pp,input,custom_filter,ssispmt")
151
}
152
153
154
#######
155
function DarkPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
156
lsb_in    = default (lsb_in                       , false) #for original
157
F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
158
lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
159
lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
160
merge16_8 = default (merge16_8                     , true)
161
u         = default (u                                , 3)
162
v         = default (v                                , u)
163
chroma    = !(u != 3 && v != 3)
164
165
F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
166
lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
167
lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
168
169
dp_lut = lsb_in ? original.Dither_lut16("x 4096 < 65535 x 19200 > 0 65535 x 4096 - 65535 19200 4096 - / * - ? ?",u=1,v=1) : original.mt_lut("x 16 < 255 x 75 > 0 255 x 16 - 255 75 16 - / * - ? ?",u=1,v=1)
170
171
dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
172
173
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) : \
174
                             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) : \
175
                             mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
176
lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
177
}
178
179
180
##########
181
#edge side bleed
182
##########
183-
function edgesidebleed(clip input, float "w32", float "w16", float "w8", float "w4", float "w2", int "y", int "u", int "v") {
183+
function edgesidebleed(clip input, float "w32", float "w16", float "w8", float "w4", float "w2", int "y", int "u", int "v", bool "bleed") {
184-
w2 = Default(w2, 0.001)
184+
w2    = Default(w2,   0.001)
185-
w4 = Default(w4, 0.055)
185+
w4    = Default(w4,   0.055)
186-
w8 = Default(w8, 0.015)
186+
w8    = Default(w8,   0.015)
187-
w16 = Default(w16, 0.02)
187+
w16   = Default(w16,   0.02)
188-
w32 = Default(w32, 0.001)
188+
w32   = Default(w32,  0.001)
189
bleed = default(bleed, true)
190
u     = Default(u,        2)
191-
w32==0 ? last : raveragew(last,1+w32,shift32,-w32,y=y,u=u,v=v)
191+
v     = Default(v,        2)
192
193-
w16==0 ? last : raveragew(last,1+w16,shift16,-w16,y=y,u=u,v=v)
193+
nochroma = !(u==3 || v==3)
194
ssispmt   = nochroma ? Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0 : nop()
195-
w8==0 ? last : raveragew(last,1+w8,shift8,-w8,y=y,u=u,v=v)
195+
sislumaonly = nochroma ? ssispmt ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8() : nop()
196
nochroma ? sislumaonly ? input : ssispmt ? input.converttoy() : input.converttoy8() : input
197-
w4==0 ? last : raveragew(last,1+w4,shift4,-w4,y=y,u=u,v=v)
197+
w = bleed ?  Width() : nop()
198
h = bleed ? Height() : nop()
199-
w2==0 ? last : raveragew(last,1+w2,shift2,-w2,y=y,u=u,v=v)
199+
200
w32==0 ? last : raveragew(last,1+w32,bleed ? shift32.BicubicResize (w / 32, h, 1, 0).BicubicResize (w, h, 1, 0) : shift32,-w32,y=y,u=u,v=v)
201
shift16 = Crop(Width()-16,0,16,0,true).StackHorizontal(Crop(0,0,-16,0,true))
202
w16==0 ? last : raveragew(last,1+w16,bleed ? shift16.BicubicResize (w / 16, h, 1, 0).BicubicResize (w, h, 1, 0) : shift16,-w16,y=y,u=u,v=v)
203
shift8 = Crop(Width()-8,0,8,0,true).StackHorizontal(Crop(0,0,-8,0,true))
204
w8==0 ? last : raveragew(last,1+w8,bleed ? shift8.BicubicResize (w / 8, h, 1, 0).BicubicResize (w, h, 1, 0) : shift8,-w8,y=y,u=u,v=v)
205
shift4 = Crop(Width()-4,0,4,0,true).StackHorizontal(Crop(0,0,-4,0,true))
206
w4==0 ? last : raveragew(last,1+w4,bleed ? shift4.BicubicResize (w / 4, h, 1, 0).BicubicResize (w, h, 1, 0) : shift4,-w4,y=y,u=u,v=v)
207
shift2 = Crop(Width()-2,0,2,0,true).StackHorizontal(Crop(0,0,-2,0,true))
208
w2==0 ? last : raveragew(last,1+w2,bleed ? shift2.BicubicResize (w / 2, h, 1, 0).BicubicResize (w, h, 1, 0) : shift2,-w2,y=y,u=u,v=v)
209
nochroma ? sislumaonly ? last : ssispmt ? CombinePlanes(last,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),last) : last
210
}
211
212
213
###############
214
# Hqdn3d_2
215
216
function Hqdn3d_2(clip clip, float "ls", float "cs", float "lt", float "ct", int "UV", bool "lsb", bool "lsb_in", bool "i16") {
217
cs        = default (cs              , 3.0)
218
ct        = default (ct              , 4.5)
219
UV        = default (UV               , 3)
220
UV        = !(VersionNumber() < 2.60) ? isY8(clip) ? 1 : UV : UV
221
lsb_in    = default (lsb_in          , false)
222
i16       = default (i16             , false)
223
lsb_out   = default (lsb             , lsb_in)
224
225
i16b      = lsb_out || i16 || lsb_in
226
227
isrgb(clip) ? Assert(!i16b, "no 16bit for RGB, but you can use some trickes for that (see dither doc)") : nop()
228
229
yString = VersionNumber() < 2.60 ? "yv12" : "Y8"
230
231
pclip   = isYUV(clip) && i16b && isYUY2(clip) && !(VersionNumber() < 2.60) ? clip.ConvertToYV16() : clip
232
233
i16clip = isYUV(clip) ? i16b ? lsb_in ? pclip.Bitdepth(from=88, to=16) : i16 ? clip : pclip.Bitdepth(from=8, to=16) : nop() : nop()
234
235
	y = isYUV(clip) ? VersionNumber() < 2.60 ? i16b ? i16clip : clip : i16b ? ConvertToY8(i16clip) : ConvertToY8(clip) : nop()
236
	u = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? UToY(i16clip) : UToY(clip) : i16b ? UToY8(i16clip) : UToY8(clip) : nop()
237
	v = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? VToY(i16clip) : VToY(clip) : i16b ? VToY8(i16clip) : VToY8(clip) : nop()
238
	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()
239
	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()
240
	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()
241
	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()
242
        isYUV(clip) ? i16b && !i16 && lsb_out ? Bitdepth(from=16, to=88) : last : last
243
	isYUV(clip) ? !i16b || lsb_out || i16 ? last : Bitdepth(from=16, to=8) : last
244
	isYUY2(clip) ? VersionNumber() < 2.60 ? last : converttoyuy2() : last
245
246
	A = isrgb32(clip) ? clip.ShowAlpha(yString) : nop()
247
	r = isrgb(clip) ? clip.ShowRed(yString) : nop()
248
	g = isrgb(clip) ? clip.ShowGreen(yString) : nop()
249
	b = isrgb(clip) ? clip.ShowBlue(yString) : nop()
250
	A = isrgb32(clip) ? A.Hqdn3dY(sp=ls, tp=lt) : nop()
251
	r = isrgb(clip) ? r.Hqdn3dY(sp=ls, tp=lt) : nop()
252
	g = isrgb(clip) ? g.Hqdn3dY(sp=ls, tp=lt) : nop()
253
	b = isrgb(clip) ? b.Hqdn3dY(sp=ls, tp=lt) : nop()
254
	isYUV(clip) ? last : isrgb32(clip) ? MergeARGB(A,r,g,b) : MergeRGB(r,g,b,"RGB24")
255
}
256
257
258
###############
259
#motion adaptive by A.SONY
260
261
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") {
262
263
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
264
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
265
266
defined(filter) ? Assert((Isclip(filter) || IsString(filter)),        "'filter' only accepts clip or string") : nop()
267
268
Str             = default (Str, 1.5)
269
exfilclp        = isclip(filter)
270
sisbob          = round(framerate(input))==60 || framerate(input)==50
271
tr2             = default (tr2, sisbob ? 3 : 1)
272
usedaa3mod      = default (usedaa3mod, exfilclp ? 0 : sisbob ? 1 : 2)
273
274
infiltr = usedaa3mod == 1 ? input.daa3mod() : input
275
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)
276
filclip = usedaa3mod == 2 ? filclip.daa3mod() : filclip
277
278
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
279
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)
280
}
281
282
283
###############
284
#smam_mask
285
# if input is YUY2 the output will be Planar YUY2 in avs 2.5 and yv16 in avs 2.6
286
287
function smam_mask(clip input, clip "prefilter", int "pel", int "blksize", bool "chroma", int "dct") {
288
    ox = input.width()
289
    oy = input.height()
290
    HD = (ox > 1099 || oy > 599)
291
    sisbob  = round(framerate(input))==60 || framerate(input)==50
292
    pel = default( pel,     HD ? 1 : 2 )
293
    dct = default( dct, sisbob ? 0 : 2 )
294
    blksize = default(blksize,HD ? sisbob ? 8 : 16 : sisbob ? 4 : 8)
295
preclip= defined(prefilter) ? prefilter : (VersionNumber() < 2.60) && isyv12(input) ? input.HQdn3d().FFT3DFilter() : input.HQdn3d_2().FFT3DFilter()
296
sup    = preclip.MSuper(pel=pel,sharp=1)
297
fv1    = sup.MAnalyse(isb=false,delta=1,DCT=dct,Truemotion=false,blksize=blksize,chroma=chroma)
298
fv2    = sup.MAnalyse(isb=true,delta=1,DCT=dct,Truemotion=true,blksize=blksize,chroma=chroma)
299
300
momask1 = input.MMask(fv1, kind = 1, ml=2)
301
momask2 = input.MMask(fv2, kind = 1, ml=3)
302
momask1 =isyuy2(input) && VersionNumber() < 2.60 ? momask1.Interleaved2Planar() : isyuy2(input) ? momask1.converttoyv16() : momask1
303
momask2 =isyuy2(input) && VersionNumber() < 2.60 ? momask2.Interleaved2Planar() : isyuy2(input) ? momask2.converttoyv16() : momask2
304
mt_average(momask1,momask2,u=3,v=3)
305
}
306
307
308
##############
309
# sanimebob by A.SONY
310
311
function sanimebob(clip i, val "useqtgmc", val "bobpresmooth", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", bool "usedaa3mod", bool "usesmam", int "tr2") {
312
313
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
314
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? i.BitsPerComponent() > 8 ? false : true : true)
315
316
useq         = default (useqtgmc,                                                                                                           0)
317
Stringuseq   = IsString(useq                                                                                                                 )
318
bobpresmbool = default (isbool(bobpresmooth) ? bobpresmooth : !Stringuseq ? (useq==8 || defined(bobpresmooth)) : defined(bobpresmooth), false)
319
Str          = default (Str,                                                                                                              1.5)
320
tr2          = default (tr2,                                                                                !Stringuseq ? useq==8 ? 3 : 1 : 1)
321
usedaa3mod   = default (usedaa3mod,                                            !Stringuseq ? useq==4 || useq==5 || useq==7 || useq==9 : false)
322
usesmam      = default (usesmam,                                                       !Stringuseq ? !(useq==0 || useq==1 || useq==8) : false)
323
324
Assert(Isint(useq) || Stringuseq, "'useqtgmc' only accepts int or string")
325
326
prefiltered_i   = defined(bobpresmooth) ? isclip(bobpresmooth) ? bobpresmooth : IsString(bobpresmooth) ? Eval("i." + bobpresmooth) : undefined() : undefined()
327
328
iforbob   = bobpresmbool ? defined(prefiltered_i) ? prefiltered_i : i.QTGMC_bob(0,0.5).reduceflicker(strength=2).interlaced60or50(BFF=!(GetParity(i))) : i
329
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
330
331
pyi       = i.pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
332
pei       = i.eedi3(-2,sclip=iforbob.nnedi3(-2)).pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
333
334
ymodclip  = VersionNumber() < 2.60 ? pyi.yadifmod(mode=3, edeint=pei).crop(0,4,-0,-4) : isyuy2(i) ? pyi.converttoyv16().yadifmod2(mode=3, edeint=pei.converttoyv16()).crop(0,4,-0,-4) : pyi.yadifmod2(mode=3, edeint=pei).crop(0,4,-0,-4)
335
yadifclip = isyuy2(i) ? VersionNumber() < 2.60 ? ymodclip.Interleaved2Planar().Repair(i.TDeint(1,emask=iforbob.tmm(1)).Interleaved2Planar(),Planar=true).Planar2Interleaved() : \
336
                                                 ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm(1)).converttoyv16()).converttoyuy2() : \
337
                        ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm(1)))
338
339
# for custom qtgmc, don't forget to put the input clip like this:- iforbob.QTGMC(... or yadifclip.QTGMC(... or i.QTGMC(...
340
QTGMCclip = isstring(useq) ? eval(useq) : \
341
                             useq==0 ? yadifclip : \
342
       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) : \
343
                  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) : \
344
                  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) : \
345
                                       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)
346
347
daa3mclip = usedaa3mod ? QTGMCclip.daa3mod() : QTGMCclip
348
349
!usesmam ? daa3mclip : \
350
           yadifclip.smam(filter=QTGMCclip)
351
}