View difference between Paste ID: YcrCdj68 and frc7e3YJ
SHOW: | | - or go back to the newest paste.
1-
# Advanced Denoising and anime bob v1.44
1+
# Advanced Denoising and anime bob v1.45
2
3
# MotionThresh by mf, mod by A.SONY
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 motinc, 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 ? motinc.isy() : motinc.isy8() : nop()
16
17
motinc = fast && !sislumaonly ? ssispmt ? motinc.converttoy() : motinc.converttoy8() : motinc
18
black  = !fast ? BlankClip(motinc, width=16, height=16               ) : BlankClip(motinc, width=16, height=16, Color_yuv=color_black)
19
white  = !fast ? BlankClip(motinc, width=16, height=16, color=$FFFFFF) : BlankClip(motinc, width=16, height=16, Color_yuv=color_white)
20
cond1  = fast ? nop() : ConditionalFilter(motinc, white, black, "YDifferenceFromPrevious()", "greaterthan", String(thresh))
21
cond2  = fast ? nop() : ConditionalFilter(motinc, white, black, "YDifferenceToNext()", "greaterthan", String(thresh))
22
fast ? eval("""
23
global MotionThreshblack = black
24
global MotionThreshthresh = thresh
25
global MotionThreshmotinc = motinc
26
global mtcav=0
27
global mtnav=0
28
""") : nop()
29
fast ? white.ScriptClip("""
30
MotionThreshwhite = last
31
motinc = MotionThreshmotinc
32
cfr=current_frame
33
 
34
mtpav=cfr<3 ? 0 : mtcav
35
global mtcav=cfr<2 ? 0 : mtnav
36
global mtnav=motinc.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(motinc.width, motinc.height)
44
fast ? cache<0 ? last : last.RequestLinear(8, cache, 5, false, false) : last
45
}
46
47
48
######################################################################
49
# MotionRamp by mf, mod for speed by A.SONY
50
# Average motion soft-thresholding based on 5 thresholds
51
# Dependancies: MotionThresh, ParameterisedBlend or Average if avs is 2.6 or up
52
 
53
function MotionRamp(clip morinc, 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 ? morinc.isy() : morinc.isy8() : false
66
 
67
fast && !(VersionNumber() < 2.60) && !sislumaonly ? ssispmt ? morinc.converttoy() : morinc.converttoy8() : morinc
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 MotionThreshmorinc = last
78
global mtnav=0
79
""") : last
80
fast ? white.ScriptClip("""
81
morinc = MotionThreshmorinc
82
MotionThreshwhite = last
83
cfr=current_frame
84
 
85
mtpav=cfr<1 ? 0 : mtnav
86
global mtnav=morinc.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
VersionNumber() < 2.6 ? Interleave(c3, c2, c4, c1, c5).ParameterisedBlend(0.20, 0.20, 0.20, 0.20, 0.20, gamma=1, scaleweights=false).SelectEvery(5,0) : Average(c3, 0.20, c2, 0.20, c4, 0.20, c1, 0.20, c5, 0.20)
109
""") : VersionNumber() < 2.6 ? 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
                               Average(MotionThresh(thresh3, tile=true), 0.20, MotionThresh(thresh2, tile=true), 0.20, MotionThresh(thresh4, tile=true), 0.20, MotionThresh(thresh1, tile=true), 0.20, MotionThresh(thresh5, tile=true), 0.20)
111
fast ? cache<0 ? last : last.RequestLinear(8, cache, 5, false, false) : last
112
TemporalSoften(radius,255,0,255,2)
113
fast ? last : Levels(floor, 1, ceil, min, max)
114
fast ? last : ColorYUV(levels="TV->PC")
115
tile ? last : PointResize(morinc.width, morinc.height)
116
}
117
118
119
##########
120
function admfilter(clip oin, 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") {
121
d = default (DarkPreserve      , true)
122
mc = default (mc      , true)
123
ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
124
f = Default(f, 16.0)
125
lsb = default (lsb, ssispmt ? oin.BitsPerComponent() > 8 ? false : true : true)
126
lsb_in = default (lsb_in      , false)
127
lsb_out = default (lsb_out      , lsb_in)
128
lsb = lsb_in || lsb_out ? true : lsb
129
luma_rebuild = default (luma_rebuild      , true)
130
u = default (u      , true)
131
v = default (v      , true)
132
dfttest_params = default(dfttest_params, "")
133
mcdfttest_params = default(mcdfttest_params, "")
134
pp = default (pp, "blur(1.53)")
135
136
custom_filter = defined(custom_filter) ? custom_filter : \
137
                                                         mc ? "dfttestmc(pp=Eval(pp),lsb=lsb, Sigma=adSigma+1.0/f,rStr=rStr,amp=amp,lsb_in=lsb_in,luma_rebuild=luma_rebuild,u=u,v=v,dfttest_params=dfttest_params" + mcdfttest_params + ")" : \
138
                                                              "dfttest(lsb=lsb, Sigma=adSigma+1.0/f, lsb_in=lsb_in,u=u,v=v" + dfttest_params + ")"
139
140
oin
141
MotionRampadc = defined(MotionRampadc) ? MotionRampadc : last.MotionRamp(5,10,15,20,25,Max=255,fast=True)
142
lsb_out && !lsb_in ? Dither_convert_8_to_16() : lsb_in && !lsb_out ? Ditherpost(mode=-1, y=1, u=1,v=1) : last
143
return GScriptClip("""
144
                     adfloat = AverageLuma(MotionRampadc)
145
                     adSigmb = ssispmt ? BitsPerComponent() > 8 ? BitsPerComponent() == 10 ? 4 : BitsPerComponent() == 12 ? 8 : BitsPerComponent() == 14 ? 64 : nop() : nop() : nop()
146
                     adSigma = ssispmt ? isvideofloat() ? adfloat*255.0 : BitsPerComponent() > 8 ? BitsPerComponent() < 16 ? adfloat/adSigmb : sqrt(adfloat) : adfloat : adfloat
147
                     (lsb_out && !lsb_in) || (lsb_in && !lsb_out) ? oin : last
148
                     adden = Eval(custom_filter)
149
                     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
150
                     !d && !lsb_out && lsb ? Ditherpost(mode=7, slice=false) : last
151
                     """, args="MotionRampadc, f, d, rStr, amp, lsb_in, lsb_out, lsb, luma_rebuild, u, v,dfttest_params,mcdfttest_params,pp,oin,custom_filter,ssispmt")
152
}
153
154
155
#######
156
function DarkPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
157
lsb_in    = default (lsb_in                       , false) #for original
158
F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
159
lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
160
lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
161
merge16_8 = default (merge16_8                     , true)
162
ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
163
sislumaonly = ssispmt ? original.isy() : VersionNumber() < 2.6 ? nop() : original.isy8()
164
u         = default (u                                , VersionNumber() < 2.6 ? 3 : sislumaonly ? 1 : 3)
165
v         = default (v                                , u)
166
chroma    = !(u != 3 && v != 3)
167
168
F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
169
lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
170
lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
171
172
dp_lut = lsb_in ? original.Dither_lut16("x 4096 < 65535 x 19200 > 0 65535 x 4096 - 4.338916843220339 * - ? ?",u=1,v=1) : VersionNumber() < 2.6 ? original.mt_lut("x 16 < 255 x 75 > 0 255 x 16 - 4.322033898305085 * - ? ?",u=1,v=1)
173
         														 \		       : original.mt_lut("x 16 scalef < range_max x 75 scalef > 0 range_max x 16 scalef - range_max 75 scalef 16 scalef - / * - ? ?",u=1,v=1)
174
175
dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
176
177
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) : \
178
                             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) : \
179
                             mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
180
lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
181
}
182
183
function lightPreserve_function(clip "filtered", clip "original", bool "merge16_8", int "u", int "v", bool "lsb", bool "lsb_in", bool "lsb_out") {
184
lsb_in    = default (lsb_in                       , false) #for original
185
F_lsb_in  = lsb_in ? (Height(filtered)) == (Height(original)) : (Height(filtered)) == (Height(original)*2)
186
lsb_out   = default (lsb_out         , F_lsb_in || lsb_in)
187
lsb       = default (lsb ,  lsb_in || lsb_out || F_lsb_in)
188
merge16_8 = default (merge16_8                     , true)
189
ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
190
sislumaonly = ssispmt ? original.isy() : VersionNumber() < 2.6 ? nop() : original.isy8()
191
u         = default (u                                , VersionNumber() < 2.6 ? 3 : sislumaonly ? 1 : 3)
192
v         = default (v                                , u)
193
chroma    = !(u != 3 && v != 3)
194
195
F_lsb_in        ? Assert(lsb,                          "16stacked filtered clip requires: lsb=true")                : nop()
196
lsb_in          ? Assert(lsb,                          "lsb_in  requires: lsb=true")                                : nop()
197
lsb_out         ? Assert(lsb,                          "lsb_out requires: lsb=true")                                : nop()
198
199
dp_lut = lsb_in ? original.Dither_lut16("x 60160 > 65535 x 45056 < 0 65535 60160 x - 4.338916843220339 * - ? ?",u=1,v=1) : VersionNumber() < 2.6 ? original.mt_lut("x 235 > 255 x 176 < 0 255 235 x - 4.322033898305085 * - ? ?",u=1,v=1)
200
         														   \		         : original.mt_lut("x 235 scalef > range_max x 176 scalef < 0 range_max x 235 scalef - range_max 176 scalef 235 scalef - / * - ? ?",u=1,v=1)
201
202
dp_lut = lsb_in && merge16_8 ? dp_lut.Ditherpost(mode=6, slice=false, u=1, v=1) : dp_lut
203
204
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) : \
205
                             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) : \
206
                             mt_merge(filtered, original, dp_lut, luma=chroma, u=u,v=v)
207
lsb ? lsb_out ? dp_merge : dp_merge.Ditherpost(mode=7, slice=false) : dp_merge
208
}
209
210
211
##########
212
#edge side bleed
213
#original idea by "colours", this function mod by A.SONY
214
##########
215
function edgesidebleed(clip input, float "w32", float "w16", float "w8", float "w4", float "w2", bool "bleed", bool "chroma", int "mode") {
216
w2     = Default(w2,     0.001)
217
w4     = Default(w4,     0.055)
218
w8     = Default(w8,     0.015)
219
w16    = Default(w16,     0.02)
220
w32    = Default(w32,    0.001)
221
chroma = default(chroma, false)
222
mode   = default(mode,       0)
223
bleed  = default(bleed, !(VersionNumber() < 2.6))
224
225
ssispmt = !chroma ? Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0 : nop()
226
sislumaonly = !chroma ? ssispmt ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8() : nop()
227
!chroma ? sislumaonly ? input : ssispmt ? input.converttoy() : input.converttoy8() : input
228
w = bleed ?  Width() : nop()
229
h = bleed ? Height() : nop()
230
231
shift32 = w32!=0 ? !bleed ? Crop(Width()-32,0,32,0,true).StackHorizontal(Crop(0,0,-32,0,true)) : nop() : nop()
232
shift32 = w32!=0 ? bleed ? BicubicResize (w / 32, h, 1, 0,src_left=-32).BicubicResize (w, h, 1, 0) : shift32 : nop()
233
w32==0 ? last : mode == 0 ? average(last,1+w32,shift32,-w32) : mode==1 ? lightPreserve_function(average(last,1+w32,shift32,-w32),last) : DarkPreserve_function(average(last,1+w32,shift32,-w32),last)
234
shift16 = w16!=0 ? !bleed ? Crop(Width()-16,0,16,0,true).StackHorizontal(Crop(0,0,-16,0,true)) : nop() : nop()
235
shift16 = w16!=0 ? bleed ? BicubicResize (w / 16, h, 1, 0,src_left=-16).BicubicResize (w, h, 1, 0) : shift16 : nop()
236
w16==0 ? last : mode == 0 ? average(last,1+w16,shift16,-w16) : mode==1 ? lightPreserve_function(average(last,1+w16,shift16,-w16),last) : DarkPreserve_function(average(last,1+w16,shift16,-w16),last)
237
shift8 = w8!=0 ? !bleed ? Crop(Width()-8,0,8,0,true).StackHorizontal(Crop(0,0,-8,0,true)) : nop() : nop()
238
shift8 = w8!=0 ? bleed ? BicubicResize (w / 8, h, 1, 0,src_left=-8).BicubicResize (w, h, 1, 0) : shift8 : nop()
239
w8==0 ? last : mode == 0 ? average(last,1+w8,shift8,-w8) : mode==1 ? lightPreserve_function(average(last,1+w8,shift8,-w8),last) : DarkPreserve_function(average(last,1+w8,shift8,-w8),last)
240
shift4 = w4!=0 ? !bleed ? Crop(Width()-4,0,4,0,true).StackHorizontal(Crop(0,0,-4,0,true)) : nop() : nop()
241
shift4 = w4!=0 ? bleed ? BicubicResize (w / 4, h, 1, 0,src_left=-4).BicubicResize (w, h, 1, 0) : shift4 : nop()
242
w4==0 ? last : mode == 0 ? average(last,1+w4,shift4,-w4) : mode==1 ? lightPreserve_function(average(last,1+w4,shift4,-w4),last) : DarkPreserve_function(average(last,1+w4,shift4,-w4),last)
243
shift2 = w2!=0 ? !bleed ? Crop(Width()-2,0,2,0,true).StackHorizontal(Crop(0,0,-2,0,true)) : nop() : nop()
244
shift2 = w2!=0 ? bleed ? BicubicResize (w / 2, h, 1, 0,src_left=-2).BicubicResize (w, h, 1, 0) : shift2 : nop()
245
w2==0 ? last : mode == 0 ? average(last,1+w2,shift2,-w2) : mode==1 ? lightPreserve_function(average(last,1+w2,shift2,-w2),last) : DarkPreserve_function(average(last,1+w2,shift2,-w2),last)
246
247
!chroma ? sislumaonly ? last : ssispmt ? CombinePlanes(last,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),last) : last
248
}
249
250
251
##########
252
#chroma edge side bleed (aka pink artifacts) fix, by A.SONY
253
##########
254
function chromasidebleed(clip input, int "diameter", float "sDev", float "iDev", float "cs", bool "bic", string "cplace", bool "d2", int "kernS", int "kernI", int "resType")
255
{
256
diameter  = default (diameter,    11)
257
sDev      = default (sDev,      31.1)
258
iDev      = default (iDev,      15.1)
259
d2        = default (d2,        true)
260
kernS     = default (kernS,        8)
261
kernI     = default (kernI,        3)
262
restype   = default (restype,      0)
263
bic       = default (bic,       true)
264
cplace    = default (cplace, "MPEG2")
265
266
chroma = false
267
gui = false
268
269
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
270
sisfullchr = ssispmt ? input.is444() : VersionNumber() < 2.6 ? false : input.isyv24()
271
sislumaonly = ssispmt ? input.isy() : VersionNumber() < 2.6 ? false : input.isy8()
272
Assert(!sislumaonly, "why you use this on no chroma clip?!")
273
274
y=VersionNumber() < 2.6 ? input : ssispmt ? input.converttoy() : input.converttoy8()
275
u=VersionNumber() < 2.6 ? input.utoy() : input.utoy8()
276
v=VersionNumber() < 2.6 ? input.vtoy() : input.vtoy8()
277
cshift = (cplace == "MPEG1" && IsYV12(input)) || IsYV24(input) ? 0 : -0.5
278
ych = sisfullchr ? y : bic ? input.BicubicResize(u.width(), v.height(), 1, 0, src_left=cshift) : input.BilinearResize(u.width(), v.height(), src_left=cshift)
279
u=u.ConvertToYV12().TBilateral(diameterL=diameter, sDevL=sDev, iDevL=iDev, csL=cs, d2=d2, chroma=chroma, ppclip=ych.ConvertToYV12(), kernS=kernS, kernI=kernI, resType=resType)
280
v=v.ConvertToYV12().TBilateral(diameterL=diameter, sDevL=sDev, iDevL=iDev, csL=cs, d2=d2, chroma=chroma, ppclip=ych.ConvertToYV12(), kernS=kernS, kernI=kernI, resType=resType)
281
YToUV(u,v,y)
282
}
283
284
285
###############
286
# Hqdn3d_2
287
288
function Hqdn3d_2(clip clip, float "ls", float "cs", float "lt", float "ct", int "UV", bool "lsb", bool "lsb_in", bool "i16") {
289
cs        = default (cs              , 3.0)
290
ct        = default (ct              , 4.5)
291
UV        = default (UV               , 3)
292
UV        = !(VersionNumber() < 2.60) ? isY8(clip) ? 1 : UV : UV
293
lsb_in    = default (lsb_in          , false)
294
i16       = default (i16             , false)
295
lsb_out   = default (lsb             , lsb_in)
296
297
i16b      = lsb_out || i16 || lsb_in
298
299
isrgb(clip) ? Assert(!i16b, "no 16bit for RGB, but you can use some trickes for that (see dither doc)") : nop()
300
301
yString = VersionNumber() < 2.60 ? "yv12" : "Y8"
302
303
pclip   = isYUV(clip) && i16b && isYUY2(clip) && !(VersionNumber() < 2.60) ? clip.ConvertToYV16() : clip
304
305
i16clip = isYUV(clip) ? i16b ? lsb_in ? pclip.Bitdepth(from=88, to=16) : i16 ? clip : pclip.Bitdepth(from=8, to=16) : nop() : nop()
306
307
	y = isYUV(clip) ? VersionNumber() < 2.60 ? i16b ? i16clip : clip : i16b ? ConvertToY8(i16clip) : ConvertToY8(clip) : nop()
308
	u = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? UToY(i16clip) : UToY(clip) : i16b ? UToY8(i16clip) : UToY8(clip) : nop()
309
	v = isYUV(clip) && UV != 1 ? VersionNumber() < 2.60 ? i16b ? VToY(i16clip) : VToY(clip) : i16b ? VToY8(i16clip) : VToY8(clip) : nop()
310
	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()
311
	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()
312
	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()
313
	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()
314
        isYUV(clip) ? i16b && !i16 && lsb_out ? Bitdepth(from=16, to=88) : last : last
315
	isYUV(clip) ? !i16b || lsb_out || i16 ? last : Bitdepth(from=16, to=8) : last
316
	isYUY2(clip) ? VersionNumber() < 2.60 ? last : converttoyuy2() : last
317
318
	A = isrgb32(clip) ? clip.ShowAlpha(yString) : nop()
319
	r = isrgb(clip) ? clip.ShowRed(yString) : nop()
320
	g = isrgb(clip) ? clip.ShowGreen(yString) : nop()
321
	b = isrgb(clip) ? clip.ShowBlue(yString) : nop()
322
	A = isrgb32(clip) ? A.Hqdn3dY(sp=ls, tp=lt) : nop()
323
	r = isrgb(clip) ? r.Hqdn3dY(sp=ls, tp=lt) : nop()
324
	g = isrgb(clip) ? g.Hqdn3dY(sp=ls, tp=lt) : nop()
325
	b = isrgb(clip) ? b.Hqdn3dY(sp=ls, tp=lt) : nop()
326
	isYUV(clip) ? last : isrgb32(clip) ? MergeARGB(A,r,g,b) : MergeRGB(r,g,b,"RGB24")
327
}
328
329
330
###############
331
#motion adaptive by A.SONY
332
333-
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") {
333+
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", bool "repblend") {
334
335
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
336
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? input.BitsPerComponent() > 8 ? false : true : true)
337
repblend  = default(repblend, false)
338
339
defined(filter) ? Assert((Isclip(filter) || IsString(filter)),        "'filter' only accepts clip or string") : nop()
340
341
Str             = default (Str, 1.5)
342
exfilclp        = isclip(filter)
343
sisbob          = round(framerate(input))==60 || framerate(input)==50
344
tr2             = default (tr2, sisbob ? 3 : 1)
345
usedaa3mod      = default (usedaa3mod, exfilclp ? 0 : sisbob ? 1 : 2)
346
347
infiltr = usedaa3mod == 1 ? input.daa3mod() : input
348
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)
349
filclip = usedaa3mod == 2 ? filclip.daa3mod() : filclip
350
351
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
352
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)
353
repblend ? isyuy2(input) && VersionNumber() < 2.60 ? Interleaved2Planar() : isyuy2(input) ? converttoyv16() : last : last
354
repblend ? isyuy2(input) && VersionNumber() < 2.60 ? Repair(Repair(input.Interleaved2Planar(),16,Planar=true),12,Planar=true).Planar2Interleaved() : isyuy2(input) ? Repair(Repair(input.converttoyv16(),16),12).converttoyuy2() : Repair(Repair(input,16),12) : last
355
}
356
357
358
###############
359
#smam_mask
360
# if input is YUY2 the output will be Planar YUY2 in avs 2.5 and yv16 in avs 2.6
361
362
function smam_mask(clip input, clip "prefilter", int "pel", int "blksize", bool "chroma", int "dct") {
363
    ox = input.width()
364
    oy = input.height()
365
    HD = (ox > 1099 || oy > 599)
366
    sisbob  = round(framerate(input))==60 || framerate(input)==50
367
    pel = default( pel,     HD ? 1 : 2 )
368
    dct = default( dct, sisbob ? 0 : 2 )
369
    blksize = default(blksize,HD ? sisbob ? 8 : 16 : sisbob ? 4 : 8)
370
preclip= defined(prefilter) ? prefilter : (VersionNumber() < 2.60) && isyv12(input) ? input.HQdn3d().FFT3DFilter() : input.HQdn3d_2().FFT3DFilter()
371
sup    = preclip.MSuper(pel=pel,sharp=1)
372
fv1    = sup.MAnalyse(isb=false,delta=1,DCT=dct,Truemotion=false,blksize=blksize,chroma=chroma)
373
fv2    = sup.MAnalyse(isb=true,delta=1,DCT=dct,Truemotion=true,blksize=blksize,chroma=chroma)
374
375
momask1 = input.MMask(fv1, kind = 1, ml=2)
376
momask2 = input.MMask(fv2, kind = 1, ml=3)
377
momask1 =isyuy2(input) && VersionNumber() < 2.60 ? momask1.Interleaved2Planar() : isyuy2(input) ? momask1.converttoyv16() : momask1
378
momask2 =isyuy2(input) && VersionNumber() < 2.60 ? momask2.Interleaved2Planar() : isyuy2(input) ? momask2.converttoyv16() : momask2
379
mt_average(momask1,momask2,u=3,v=3)
380
}
381
382
383-
function sanimebob(clip i, val "useqtgmc", val "bobpresmooth", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", bool "usedaa3mod", bool "usesmam", int "tr2") {
383+
384
# sanimebob by A.SONY
385
386
function sanimebob(clip i, val "useqtgmc", val "bobpresmooth", float "Str", float "Amp", bool "TV_range", bool "qtgmc_lsb", bool "usedaa3mod", bool "usesmam", int "tr2", bool "repblend") {
387
388
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
389
qtgmc_lsb = default(qtgmc_lsb, ssispmt ? i.BitsPerComponent() > 8 ? false : true : true)
390
391
useq         = default (useqtgmc,                                                                                                           0)
392
Stringuseq   = IsString(useq                                                                                                                 )
393
bobpresmbool = default (isbool(bobpresmooth) ? bobpresmooth : !Stringuseq ? (useq==8 || defined(bobpresmooth)) : defined(bobpresmooth), false)
394
Str          = default (Str,                                                                                                              1.5)
395
tr2          = default (tr2,                                                                                !Stringuseq ? useq==8 ? 3 : 1 : 1)
396
usedaa3mod   = default (usedaa3mod,                                            !Stringuseq ? useq==4 || useq==5 || useq==7 || useq==9 : false)
397
usesmam      = default (usesmam,                                                       !Stringuseq ? !(useq==0 || useq==1 || useq==8) : false)
398
399
Assert(Isint(useq) || Stringuseq, "'useqtgmc' only accepts int or string")
400
401
prefiltered_i   = defined(bobpresmooth) ? isclip(bobpresmooth) ? bobpresmooth : IsString(bobpresmooth) ? Eval("i." + bobpresmooth) : undefined() : undefined()
402
403
nonyuy2=!(VersionNumber() < 2.6) && i.isyuy2()
404
iforbob   = bobpresmbool ? defined(prefiltered_i) ? prefiltered_i : i.QTGMC_bob(0,0.5).nonyuy2clipin(nonyuy2).reduceflicker(strength=2).nonyuy2clipout(nonyuy2).interlaced60or50(BFF=!(GetParity(i))) : i
405
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
406
407
pyi       = i.pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
408
pei       = i.eedi3(-2,sclip=iforbob.nnedi3(-2)).pointresize(width(i),height(i)+8,0,-4,width(i),height(i)+8.0001)
409
410
ymodclip  = VersionNumber() < 2.60 ? pyi.yadifmod(mode=3, edeint=pei).crop(0,4,-0,-4) : pyi.nonyuy2clipin(nonyuy2).yadifmod2(mode=3, edeint=pei.nonyuy2clipin(nonyuy2)).crop(0,4,-0,-4)
411
yadifclip = isyuy2(i) && VersionNumber() < 2.60 ? ymodclip.Interleaved2Planar().Repair(i.TDeint(1,emask=iforbob.tmm2_ortmm1(1)).Interleaved2Planar(),Planar=true).Planar2Interleaved() : \
412
                                                  ymodclip.Repair(i.TDeint(1,emask=iforbob.tmm2_ortmm1(1)).nonyuy2clipin(nonyuy2)).nonyuy2clipout(nonyuy2)
413
414
# for custom qtgmc, don't forget to put the input clip like this:- iforbob.QTGMC(... or yadifclip.QTGMC(... or i.QTGMC(...
415
QTGMCclip = isstring(useq) ? eval(useq) : \
416
                             useq==0 ? yadifclip : \
417
       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) : \
418
                  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) : \
419
                  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) : \
420
                                       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)
421
422-
           yadifclip.smam(filter=QTGMCclip)
422+
423
424
!usesmam ? daa3mclip : \
425
           yadifclip.smam(filter=daa3mclip,repblend=repblend)
426
}