Log in

View Full Version : Better postprocessing after IVTC?


DoctorM
20th July 2009, 22:54
I'm deinterlacing a 29.97fps interlaced video that is LARGELY from 24p. It has the occasional out-of-pattern section and a few bits of home-movie-like effects that are 2:2:2:2 patterned.

I'll usually use telecide(guide=1,post=0).decimate() and ignore the interlace artifacts. Mostly I find postprocessing artifacts to be more unsightly than interlace artifacts.

In this case there is far too much combing left over. (Guide=0 doesn't seem to make much difference.) I'm stuck with the leaving the video 29.97i or finding a different IVTC method.

My other thought is to use something else to decomb.
I found yadif(mode=0) pleasing (added after telecide/decimate), but I'm a bit unclear how the filter works.

Does Yadif leave frames identified as progressive alone or does it reduce picture detail across the board like a bob filter?

Basically, I'm looking for an alternative postprocessing filter or better IVTC method.

DoctorM
11th August 2009, 18:14
I'm going to bump my own thread here since I never got an answer and I've started working on another project where I'm running into the same issue.
The post processing algorithms of Telecide/TFM just aren't that good.

Is there anything wrong with turning off their post processing and using something like TempGaussMC_beta1mod or Yadif to decomb remaining artifacts?

I'm a fan of Yadif in general... and from what I understand about it, it only make changes when it detects combing (and not to progressive frames)... is that true? If so I would think it would be a better replacement.

Sooo:
Telecide(guide=1,post=0)
Decimate()
Yadif()

Suggestions?

Edit: Ok comparing progressive frames Yadif does make small changes there as well. Hmm.

thewebchat
11th August 2009, 18:21
TFM(pp=2,clip2=TempGaussMC.SelectEven)

Deinterlace only the combed frames. Of course, a motion-adaptive deinterlacer like Yadif, TDeint, or fancier MC scripts will also pass uncombed frames though as-is.

DoctorM
11th August 2009, 21:10
Just to be clear, by using the clip2 parameter in this way, TFM decides which frames are interlaced or progressive and then if it determines that the frame is still interlaced it will grab the frame from the clip2 version (which is decombed by your own chosen method)?

Tested some clips with TFM(pp=2,cthresh=1,clip2=Yadif()). The results are very nice. The progressive frames appear untouched and the interlaced ones are much cleaner.
Thanks for pointing me in the right direction.

thewebchat
11th August 2009, 21:13
Yes, TFM replaces a frame from the input with a frame from clip2 if some metric (I think it's "combed pixel per macroblock" or something) shows that the frame is interlaced. The threshold can be controlled by the "mi" parameter (use TFM(display=true) to see the combing metrics). If you set pp to a value higher than 5, TFM will act as a motion-adaptive deinterlacer and merge the frames from clip2 based on a comb mask (so you can use nnedi/eedi safely).

TheRyuu
11th August 2009, 23:09
You can also use telecidehints as well.
source("blah.whatever")
TFM(pp=1)
TelecideHints(nnedi2()) #or whatever else you want
TDecimate(cycle=5)

manono
12th August 2009, 02:00
Of course, a motion-adaptive deinterlacer like Yadif, TDeint, or fancier MC scripts will also pass uncombed frames though as-is.
As far as I know, that's not correct. Otherwise, why would something like TDeint have a Full=False parameter? From the TDeint doc:
If full is set to true, then all frames are processed as usual. If full=false, all frames are first checked to see if they are combed. If a frame isn't combed, then it is returned as is. If a frame is combed, then it is processed as usual. The parameters that effect combed frame detection are cthresh, chroma, blockx, blocky, and MI. full=false allows TDeint to be an ivtc post-processor without the need for hints.
If it's being "processed" then that says to me that what comes out isn't the same as what went in. I've been known to be wrong before, though. When wanting to clean up any leftover interlacing, I might put on TDeint(Full=False) or, better yet, use Vinverse which was developed specifically for this purpose.

thewebchat
12th August 2009, 02:11
Ah, it seems that you are right. With the default of full=true, TDeint output is not equivalent to the input, and quite a bit uglier at the same time.

SubOne
13th August 2009, 20:16
I had the same problem, TIVTC works best. After that, Vinverse() does help most times. However, even with these, I couldn't get rid of all artifacts.

There are other methods which work well, but since they do not involve Avisynth and are commercial solutions, I won't be posting them here. PM me if you would like to know.

MadRat
7th February 2010, 16:06
Where can we find telecidehints.dll?