Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
|
|
Thread Tools | Search this Thread | Display Modes |
23rd May 2015, 13:35 | #1 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
vmulti/compensateMulti/degrainN/writevec/readvec for vsmvtools
Code:
def getvectors (src, supersearch, tr=6, pel=4, dct=5, thsad=400): core = vs.get_core () supersoft = core.mv.Super (src, pel=pel, chroma=False, hpad=32, vpad=32, pelclip=supersearch, sharp=2, rfilter=4, levels=0) supersharp = core.mv.Super (src, pel=pel, chroma=False, hpad=32, vpad=32, pelclip=supersearch, sharp=2, rfilter=2, levels=0) def search (isb, delta): vectors = core.mv.Analyse (supersoft, isb=isb, overlap=16, blksize=32, search=3, chroma=False, truemotion=True, delta=delta, trymany=True, searchparam=16, pelsearch=16, dct=0, levels=0, divide=2, badrange=-24) vectors = core.mv.Recalculate (supersoft, vectors, overlap=8, blksize=16, thsad=thsad//2, chroma=False, truemotion=True, search=3, searchparam=16, dct=dct, smooth=1, divide=2) vectors = core.mv.Recalculate (supersharp, vectors, overlap=4, blksize=8, thsad=thsad//2, chroma=False, truemotion=True, search=3, searchparam=16, dct=dct, smooth=1, divide=2) vectors = core.mv.Recalculate (supersharp, vectors, overlap=2, blksize=4, thsad=thsad//2, chroma=False, truemotion=True, search=3, searchparam=16, dct=dct, smooth=1, divide=0) return vectors bv = [search (True, i) for i in range (tr, 0, -1)] fv = [search (False, i) for i in range (1, tr+1)] vmulti = bv + fv vmulti = core.std.Interleave (vmulti) return vmulti def compensatemulti (src, comp, superclip, vmulti, tr=6, pel=4, thsad=400, thscd1=248, thscd2=130): core = vs.get_core () super = core.mv.Super (comp, pel=pel, chroma=False, hpad=32, vpad=32, pelclip=superclip, sharp=2, rfilter=2, levels=0) def compensate (delta): vectors = core.std.SelectEvery (vmulti, tr*2, delta) filter = core.mv.Compensate (src, super, vectors, thsad=thsad, thscd1=thscd1, thscd2=thscd2) return filter bcomp = [compensate (i) for i in range (0, tr)] fcomp = [compensate (i) for i in range (tr, 2*tr)] compmulti = bcomp + [src] + fcomp compmulti = core.std.Interleave (compmulti) return compmulti def degrainn (src, comp, superclip, vmulti, tr=6, pel=4, thsad=400, thscd1=248, thscd2=130, full=True): core = vs.get_core () super = core.mv.Super (comp, pel=pel, chroma=False, hpad=32, vpad=32, pelclip=superclip, sharp=2, rfilter=2, levels=0) def MDG1 (a): bv = core.std.SelectEvery (vmulti, tr*2, tr-1-a) fv = core.std.SelectEvery (vmulti, tr*2, tr+a) MDG = core.mv.Degrain1 (src, super, bv, fv, thsad=thsad, thscd1=thscd1, thscd2=thscd2, plane=0) return MDG MDGMulti = [MDG1 (i) for i in range (0, tr)] MDGMulti = core.fmtc.bitdepth (core.std.Interleave (MDGMulti), bits=32, flt=True, fulls=full, fulld=full, dmode=1) def MDGMerge (start=None, a=2): start = core.std.Merge (core.std.SelectEvery (MDGMulti, tr, 0), core.std.SelectEvery (MDGMulti, tr, 1), 0.5) if start is None else start merge = core.std.Merge (start, core.std.SelectEvery (MDGMulti, tr, a), 1/(a+1)) a = a+1 clip = merge if a == tr else MDGMerge (start=merge, a=a) return clip return MDGMerge () def writevec (vec, logout): core = vs.get_core () w = vec.get_frame (0).width with open (logout, "w") as f: print (w, file=f) vec = core.std.CropAbs (vec, width=w, height=1) return vec def readvec (vec, login): core = vs.get_core () with open (login, "r") as f: w = int (f.readline ()) vec = core.raws.Source (vec, w, 1, src_fmt="Y8") return vec degrainN takes tr >= 3 only, go mv.Degrain1/2 if tr<3, and degrainN ain't the exact extension of degrain1/2/3, it's a more convolved (averaged) variant, but gets you very similar results compared to the original one. writevec=MStoreVec in avisynth MVTools readvec=MRestoreVec in avisynth MVTools Last edited by feisty2; 30th May 2015 at 06:46. |
|
|