View difference between Paste ID: LC4pB1Sg and neMqjJzw
SHOW: | | - or go back to the newest paste.
1
# avisynth script template for cel anime dvds that contain field blending/aliasing, dot-crawl and rainbowing.
2
# note: this thing tries to be mild, since the creator doesn't believe in overfiltering and destroying the original sources.
3
4
function daa3slow(clip c) {
5
dbl   = merge(c.nnedi3(etype=1, field = 1, nns = 4, qual=2, nsize = 3,fapprox = 7,pscrn=1),c.nnedi3(etype=1, field = 0, nns = 4, qual=2, nsize = 3,fapprox = 7,pscrn=1))
6
dblD = mt_makediff(c,dbl,U=3,V=3)
7
shrpD = mt_makediff(dbl,dbl.removegrain(11),U=3,V=3)
8
DD = shrpD.repair(dblD,13)
9
return dbl.mt_adddiff(DD,U=3,V=3) }
10
11
#or use this faster version if daa3slow is too fast for you:
12
function daa3(clip c) {
13
dbl   = merge(c.nnedi3(etype=1, field = 1, nns = 2,nsize = 3,fapprox = 7,pscrn=1),c.nnedi3(etype=1, field = 0, nns = 2, nsize = 3,fapprox = 7,pscrn=1))
14
dblD = mt_makediff(c,dbl,U=3,V=3)
15
shrpD = mt_makediff(dbl,dbl.removegrain(11),U=3,V=3)
16
DD = shrpD.repair(dblD,13)
17
return dbl.mt_adddiff(DD,U=3,V=3) }
18
19
20
21
# Here comes your video source line (your video must still be interlaced - it gets IVTCed/decimated as a first step, below)
22
23
24
25
26
# inverse telecine + decimation, to get to 24 fps.
27
# if your source is not DVD footage via dgindex/dgdecode, you probably need to uncomment
28
# the following line to make TFM() work.
29
30
#assumetff()
31
32
tfm(slow=2,pp=1,mode=2).tdecimate()
33
assumefps(24000,1001)
34
35
36
37
# Here comes a hack against dot crawl - it doesn't remove it 100%ly, but is rather detail safe.
38
# It however needs that the file "noisepattern.avi" must be present in the location specified below.
39
# That video contains a sample of dot-crawl noise to serve as a 'training' for fft3dfilter.
40
# it is a sample video from a lousy ADV DVD... ask and ye shall be given, I guess?
41
# try htttp://ulozto.net/x493J9tg/noisepattern-avi
42
43
# also, your video needs to be 720x480 here - crop at the end of the script instead
44
45
src = last
46
47
48
# change the path of the noisepattern.avi file to wherever you put it
49
avisource("c:\pattern\noisepattern.avi") + last
50
51
unf = last
52
fft3dfilter(sigma= 1.7500, plane=0,bw=8,bh=8)
53
den = last
54
denoisediff = mt_makediff(unf,den,U=3,V=3)
55
fft3dfilter(sigma= 0.01, pframe = 0, px = 34,py = 18, plane=0,pfactor =0.7,pcutoff=0.01,pshow=false,bw=8,bh=8)
56
mt_adddiff(denoisediff,U=3,V=3)
57
trim(1,0)
58
59
60
# Now we will derainbow. Again, rather detail safe, but some limited discoloration can happen.
61
# Current derainbowing methods available are sadly far form perfect.
62-
# this line covers up nasty aliasing and intelacing artifacts (combing) that are left from field blends.
62+
63
prerb = last
64
derbmask = removegrainhd(rank=23,radius=6).tedgemask(threshY=8).mt_inflate()
65
66
prefiltered = last
67
derbsuperfilt = MSuper(prefiltered)
68-
#now we will stabilise lines/edges, it also helps against some dot crawl and shimmering. It should be detail-safe , though not 100%.
68+
69
derbbackward_vectors = MAnalyse(derbsuperfilt, truemotion = true, isb = true, chroma=false)
70
derbforward_vectors = MAnalyse(derbsuperfilt, truemotion = true, isb = false, chroma=false)
71
derbforward_compensation = MCompensate(derbsuper, derbforward_vectors)
72
derbbackward_compensation = MCompensate(derbsuper, derbbackward_vectors)
73
interleave(derbforward_compensation,last,derbbackward_compensation)
74
dfmderainbow(maskthresh=10)
75
selectevery(3,1)
76
mt_merge(prerb,last, derbmask,luma=true)
77
78
79
# now antialising (your video should still be 720x480 here - or at least should have height divisible by 4)
80
# this line covers up nasty aliasing and interlacing artifacts (combing) that are left from field blends.
81
# It nicely smooths those nasties and is still quite nice to detail.
82
# The daa3slow() function is defined at the start of this script.
83
84
spline36resize(width,height*3/2).daa3slow.spline36resize(width,height)
85
86
#now we will stabilise lines/edges, it also helps against some dot crawl and shimmering. It should be detail-safe, though not 100%.
87
88
source = last
89
90
prefilt = last.removegrain(6).FFT3Dfilter(sigma=1.5,bw=16,bh=16,bt=3,ow=8,oh=8,plane=4)
91
superfilt = prefilt.MSuper(pel=2, sharp=1)
92
super = MSuper(pel=2, sharp=1)
93
backward_vec2 = MAnalyse(superfilt, isb = true, delta = 2, overlap=4)
94
backward_vec1 = MAnalyse(superfilt, isb = true, delta = 1, overlap=4)
95
forward_vec1 = MAnalyse(superfilt, isb = false, delta = 1, overlap=4)
96
forward_vec2 = MAnalyse(superfilt, isb = false, delta = 2, overlap=4)
97
98
99
degrainedge = source.MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=230)
100
edgemask = removegrainhd(rank=25,radius=6).tedgemask(threshY=8)
101
102
mt_merge(source,degrainedge,edgemask,luma=true)
103
104
#You can crop now. Also, add denoising filters now if desired. /Please be gentle ;)/