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. |
4th July 2016, 14:54 | #1 | Link |
Registered User
Join Date: Feb 2010
Location: Saint-Petersburg, Russia
Posts: 38
|
Help with deinterlacing
I have an anime video with hybrid interlace/telecine. Interlaced frames are somehow damaged and I don't know how to properly repair this.
Sample. Please help. Vapoursynth or avisynth. |
4th July 2016, 23:44 | #3 | Link |
Registered User
Join Date: Mar 2014
Posts: 308
|
Would've been nice of you to at least mention that your source is some kind of cheap animated porn.
Field stepping indicates that the actual problem with your sample is that it's 30 fps, but has a screwed up field order. If the rest of the source is telecined as usual, then the ideal way of handling this is to use VFR: use some IVTC filters for the telecined parts and splice the below script for the rest. Code:
ffvideosource("O:\interlace.demuxed.m2v") doubleweave().selectodd()
__________________
Say no to AviSynth 2.5.8 and DirectShowSource! |
6th July 2016, 06:26 | #4 | Link |
Registered User
Join Date: Feb 2010
Location: Saint-Petersburg, Russia
Posts: 38
|
Yes, this is some "cheap animated porn" aka hentai. I'm learning on this kind of material (a LOT of visual defects, a lot of filters required). I'm sorry I didn't mention that.
Nope, won't help. Thanks for suggestion! It seems simple Code:
tfm().vinverse().daa() Edges are somehow unstable after deinterlacing, which I don't know how to deal with. Also some ghosting around scene changes (can be removed with SMDegrain, but too much lost details in other scenes). Any thoughts? Last edited by ~SimpleX~; 6th July 2016 at 06:38. |
6th July 2016, 22:10 | #5 | Link |
Registered User
Join Date: Apr 2010
Location: I have a statue in Hakodate, Japan
Posts: 744
|
Try this version of DAA that I modded:
Code:
# Anti-aliasing with contra-sharpening by Didée (thanks to Didée, modded for this case with nnedi3) # Is required nnedi3, Masktools2, RGTools # Modded by GMJCZP function DAAMod(clip c) { nn = c.nnedi3(field=-2) dbl = mt_average(selecteven(nn),selectodd(nn),U=3,V=3) dblD = mt_makediff(c,dbl,U=3,V=3) shrpD = mt_makediff(dbl,dbl.removegrain((width(c)>1100) ? 20 : 14),U=3,V=3).verticalcleaner(mode=2) DD = shrpD.repair(dblD,9) return dbl.mt_adddiff(DD,U=3,V=3) } Or try in detail Tfm-Tdecimate and vfr options (for example, for Tdecimate try mode = 3 and hybrid = 2). Another home remedy: Here. Last edited by GMJCZP; 25th May 2021 at 11:43. Reason: Update requirements |
7th July 2016, 07:45 | #6 | Link |
Registered User
Join Date: Feb 2010
Location: Saint-Petersburg, Russia
Posts: 38
|
Thanks, took to my plugins. For this source daa3 (this version is ported to vapoursynth) is better. Yes, daa3 destroys small details, but DAAMod preserves line separation here (or how is it called?).
Btw, here is daamod for VS: Code:
# Anti-aliasing with contra-sharpening by Didée (thanks to Didée, modded for this case with nnedi3) # Is required VerticalCleaner # Modded by GMJCZP def daamod(c): core = vs.get_core() if not isinstance(c, vs.VideoNode): raise TypeError('daa: This is not a clip') nn = core.nnedi3.nnedi3(c, field=3) dbl = core.std.Merge(core.std.SelectEvery(nn, 2, 0), core.std.SelectEvery(nn, 2, 1)) dblD = core.std.MakeDiff(c, dbl) shrpD = core.std.MakeDiff(dbl, core.rgvs.RemoveGrain(dbl, 20 if c.width > 1100 else 14)) shrpD = core.rgvs.VerticalCleaner(shrpD, mode=2) DD = core.rgvs.Repair(shrpD, dblD, 9) return core.std.MergeDiff(dbl, DD) |
|
|