View difference between Paste ID: N4gDw8QN and 38DuxqUS
SHOW: | | - or go back to the newest paste.
1-
# Advanced Denoising and anime bob v1.25
1+
# Advanced Denoising and anime bob v1.26
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") {
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-
cond1 = ConditionalFilter(input, white, black, "YDifferenceFromPrevious()", "greaterthan", String(thresh))
19+
20-
cond2 = ConditionalFilter(input, white, black, "YDifferenceToNext()", "greaterthan", String(thresh))
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-
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") {
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-
Interleave(MotionThresh(thresh3, tile=true, fast=fast), MotionThresh(thresh2, tile=true, fast=fast), MotionThresh(thresh4, tile=true, fast=fast), MotionThresh(thresh1, tile=true, fast=fast), MotionThresh(thresh5, tile=true, fast=fast)).ParameterisedBlend(0.20, 0.20, 0.20, 0.20, 0.20, gamma=1, scaleweights=false).SelectEvery(5,0)
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
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
121
d = default (DarkPreserve      , true)
122
mc = default (mc      , true)
123
f = Default(f, 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
                     adSigma = AverageLuma(MotionRampadc)
144
                     (lsb_out && !lsb_in) || (lsb_in && !lsb_out) ? input : last
145
                     adden = Eval(custom_filter)
146
                     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
147
                     !d && !lsb_out && lsb ? Ditherpost(mode=7, slice=false) : last
148
                     """, args="MotionRampadc, f, d, rStr, amp, lsb_in, lsb_out, lsb, luma_rebuild, u, v,dfttest_params,mcdfttest_params,pp,input,custom_filter")
149
}
150
151
152
#######
153
function DarkPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
154
lsb_in    = default (lsb_in                       , false) #for original
155
F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
156
lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
157
lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
158
merge16_8 = default (merge16_8                     , true)
159
u         = default (u                                , 3)
160
v         = default (v                                , u)
161
chroma    = !(u != 3 && v != 3)
162
163
F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
164
lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
165
lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
166
167
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)
168
169
dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
170
171
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) : \
172
                             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) : \
173
                             mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
174
lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
175
}
176
177
178
##########
179
#edge side bleed
180
##########
181
function edgesidebleed(clip input, float "w32", float "w16", float "w8", float "w4", float "w2", int "y", int "u", int "v") {
182
w2 = Default(w2, 0.001)
183
w4 = Default(w4, 0.055)
184
w8 = Default(w8, 0.015)
185
w16 = Default(w16, 0.02)
186
w32 = Default(w32, 0.001)
187
input
188
shift32 = Crop(Width()-32,0,32,0,true).StackHorizontal(Crop(0,0,-32,0,true))
189
w32==0 ? last : raveragew(last,1+w32,shift32,-w32,y=y,u=u,v=v)
190
shift16 = Crop(Width()-16,0,16,0,true).StackHorizontal(Crop(0,0,-16,0,true))
191
w16==0 ? last : raveragew(last,1+w16,shift16,-w16,y=y,u=u,v=v)
192
shift8 = Crop(Width()-8,0,8,0,true).StackHorizontal(Crop(0,0,-8,0,true))
193
w8==0 ? last : raveragew(last,1+w8,shift8,-w8,y=y,u=u,v=v)
194
shift4 = Crop(Width()-4,0,4,0,true).StackHorizontal(Crop(0,0,-4,0,true))
195
w4==0 ? last : raveragew(last,1+w4,shift4,-w4,y=y,u=u,v=v)
196
shift2 = Crop(Width()-2,0,2,0,true).StackHorizontal(Crop(0,0,-2,0,true))
197
w2==0 ? last : raveragew(last,1+w2,shift2,-w2,y=y,u=u,v=v)
198
}
199
200
201
###############
202
# Hqdn3d_2
203
204
function Hqdn3d_2(clip clip, float "ls", float "cs", float "lt", float "ct", int "UV", bool "lsb", bool "lsb_in", bool "i16") {
205
cs        = default (cs              , 3.0)
206
ct        = default (ct              , 4.5)
207
UV        = default (UV               , 3)
208
UV        = !(VersionNumber() < 2.60) ? isY8(clip) ? 1 : UV : UV
209
lsb_in    = default (lsb_in          , false)
210
i16       = default (i16             , false)
211
lsb_out   = default (lsb             , lsb_in)
212
213
i16b      = lsb_out || i16 || lsb_in
214
215
isrgb(clip) ? Assert(!i16b, "no 16bit for RGB, but you can use some trickes for that (see dither doc)") : nop()
216
217
yString = VersionNumber() < 2.60 ? "yv12" : "Y8"
218
219
pclip   = isYUV(clip) && i16b && isYUY2(clip) && !(VersionNumber() < 2.60) ? clip.ConvertToYV16() : clip
220
221
i16clip = isYUV(clip) ? i16b ? lsb_in ? pclip.Bitdepth(from=88, to=16) : i16 ? clip : pclip.Bitdepth(from=8, to=16) : nop() : nop()
222
223
	y = isYUV(clip) ? VersionNumber() < 2.60 ? i16b ? i16clip : clip : i16b ? ConvertToY8(i16clip) : ConvertToY8(clip) : nop()
224
	u = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? UToY(i16clip) : UToY(clip) : i16b ? UToY8(i16clip) : UToY8(clip) : nop()
225
	v = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? VToY(i16clip) : VToY(clip) : i16b ? VToY8(i16clip) : VToY8(clip) : nop()
226
	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()
227
	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()
228
	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()
229
	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()
230
        isYUV(clip) ? i16b && !i16 && lsb_out ? Bitdepth(from=16, to=88) : last : last
231
	isYUV(clip) ? !i16b || lsb_out || i16 ? last : Bitdepth(from=16, to=8) : last
232
	isYUY2(clip) ? VersionNumber() < 2.60 ? last : converttoyuy2() : last
233
234
	A = isrgb32(clip) ? clip.ShowAlpha(yString) : nop()
235
	r = isrgb(clip) ? clip.ShowRed(yString) : nop()
236
	g = isrgb(clip) ? clip.ShowGreen(yString) : nop()
237
	b = isrgb(clip) ? clip.ShowBlue(yString) : nop()
238
	A = isrgb32(clip) ? A.Hqdn3dY(sp=ls, tp=lt) : nop()
239
	r = isrgb(clip) ? r.Hqdn3dY(sp=ls, tp=lt) : nop()
240
	g = isrgb(clip) ? g.Hqdn3dY(sp=ls, tp=lt) : nop()
241
	b = isrgb(clip) ? b.Hqdn3dY(sp=ls, tp=lt) : nop()
242
	isYUV(clip) ? last : isrgb32(clip) ? MergeARGB(A,r,g,b) : MergeRGB(r,g,b,"RGB24")
243
}
244
245
246
###############
247
#motion adaptive by A.SONY
248
249
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") {
250
251
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
252
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
253
254
defined(filter) ? Assert((Isclip(filter) || IsString(filter)),        "'filter' only accepts clip or string") : nop()
255
256
Str             = default (Str, 1.5)
257
exfilclp        = isclip(filter)
258
sisbob          = round(framerate(input))==60 || framerate(input)==50
259
tr2             = default (tr2, sisbob ? 3 : 1)
260
usedaa3mod      = default (usedaa3mod, exfilclp ? 0 : sisbob ? 1 : 2)
261
262
infiltr = usedaa3mod == 1 ? input.daa3mod() : input
263
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)
264
filclip = usedaa3mod == 2 ? filclip.daa3mod() : filclip
265
266
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
267
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)
268
}
269
270
271
###############
272
#smam_mask
273
# if input is YUY2 the output will be Planar YUY2 in avs 2.5 and yv16 in avs 2.6
274
275
function smam_mask(clip input, clip "prefilter", int "pel", int "blksize", bool "chroma", int "dct") {
276
    ox = input.width()
277
    oy = input.height()
278
    HD = (ox > 1099 || oy > 599)
279
    sisbob  = round(framerate(input))==60 || framerate(input)==50
280
    pel = default( pel,     HD ? 1 : 2 )
281
    dct = default( dct, sisbob ? 0 : 2 )
282
    blksize = default(blksize,HD ? sisbob ? 8 : 16 : sisbob ? 4 : 8)
283
preclip= defined(prefilter) ? prefilter : (VersionNumber() < 2.60) && isyv12(input) ? input.HQdn3d().FFT3DFilter() : input.HQdn3d_2().FFT3DFilter()
284
sup    = preclip.MSuper(pel=pel,sharp=1)
285
fv1    = sup.MAnalyse(isb=false,delta=1,DCT=dct,Truemotion=false,blksize=blksize,chroma=chroma)
286
fv2    = sup.MAnalyse(isb=true,delta=1,DCT=dct,Truemotion=true,blksize=blksize,chroma=chroma)
287
288
momask1 = input.MMask(fv1, kind = 1, ml=2)
289
momask2 = input.MMask(fv2, kind = 1, ml=3)
290
momask1 =isyuy2(input) && VersionNumber() < 2.60 ? momask1.Interleaved2Planar() : isyuy2(input) ? momask1.converttoyv16() : momask1
291
momask2 =isyuy2(input) && VersionNumber() < 2.60 ? momask2.Interleaved2Planar() : isyuy2(input) ? momask2.converttoyv16() : momask2
292
mt_average(momask1,momask2,u=3,v=3)
293
}
294
295
296
##############
297
# sanimebob by A.SONY
298
299
function sanimebob(clip i, val "useqtgmc", val "bobpresmooth", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", bool "usedaa3mod", bool "usesmam", int "tr2") {
300
301
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
302
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? i.BitsPerComponent() > 8 ? false : true : true)
303
304
useq         = default (useqtgmc,                                                                                                           0)
305
Stringuseq   = IsString(useq                                                                                                                 )
306
bobpresmbool = default (isbool(bobpresmooth) ? bobpresmooth : !Stringuseq ? (useq==8 || defined(bobpresmooth)) : defined(bobpresmooth), false)
307
Str          = default (Str,                                                                                                              1.5)
308
tr2          = default (tr2,                                                                                !Stringuseq ? useq==8 ? 3 : 1 : 1)
309
usedaa3mod   = default (usedaa3mod,                                            !Stringuseq ? useq==4 || useq==5 || useq==7 || useq==9 : false)
310
usesmam      = default (usesmam,                                                       !Stringuseq ? !(useq==0 || useq==1 || useq==8) : false)
311
312
Assert(Isint(useq) || Stringuseq, "'useqtgmc' only accepts int or string")
313
314
prefiltered_i   = defined(bobpresmooth) ? isclip(bobpresmooth) ? bobpresmooth : IsString(bobpresmooth) ? Eval("i." + bobpresmooth) : undefined() : undefined()
315
316
iforbob   = bobpresmbool ? defined(prefiltered_i) ? prefiltered_i : i.QTGMC_bob(0,0.5).reduceflicker(strength=2).interlaced60or50(BFF=!(GetParity(i))) : i
317
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
318
319
pyi       = i.pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
320
pei       = i.eedi3(-2,sclip=iforbob.nnedi3(-2)).pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
321
322
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)
323
yadifclip = isyuy2(i) ? VersionNumber() < 2.60 ? ymodclip.Interleaved2Planar().Repair(i.TDeint(1,emask=iforbob.tmm(1)).Interleaved2Planar(),Planar=true).Planar2Interleaved() : \
324
                                                 ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm(1)).converttoyv16()).converttoyuy2() : \
325
                        ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm(1)))
326
327
# for custom qtgmc, don't forget to put the input clip like this:- iforbob.QTGMC(... or yadifclip.QTGMC(... or i.QTGMC(...
328
QTGMCclip = isstring(useq) ? eval(useq) : \
329
                             useq==0 ? yadifclip : \
330
       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) : \
331
                  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) : \
332
                  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) : \
333
                                       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)
334
335
daa3mclip = usedaa3mod ? QTGMCclip.daa3mod() : QTGMCclip
336
337
!usesmam ? daa3mclip : \
338
           yadifclip.smam(filter=QTGMCclip)
339
}