Log in

View Full Version : QTGMC modified to process in stages


ndjamena
14th December 2016, 13:40
The settings I'm testing on are

qtgmc(Preset="Placebo", EdiMode="EEDI3+NNEDI3", SourceMatch=3, Lossless=2, DftThreads=1, Tuning="DV-HD", \
Rep0=4, Rep1=0, Rep2=4, \
MatchPreset="Placebo", MatchEdi="EEDI3+NNEDI3", MatchPreset2="Placebo", MatchEdi2="EEDI3+NNEDI3", MatchTR2=2)

These settings aren't sane and are a little excessive, they're just the ones I chose to see how much of a difference splitting QTGMC into parts can make.

I decided to try this because I legimately tried to pass a 1080i TV recording through QTGMC adding nothing but Lossless=2 and SourceMatch=3 to the default settings... but when I tried to save the script as a UT Video Lossless intermediate VirtualDub told me it would take 50 days for the 45 minute recording to be processed. Playing with multithreading accomplished nothing.

The settings I'm testing on are MUCH more excessive than the settings I was initially aiming for (and which would have taken 50 days), and yet using the QTGMC modifications and a batch file I can complete processing the 45 minute episode in a little over a day.

QTGMC:
pastebin #4RzEh4Gm
http://pastebin.com/4RzEh4Gm

Maybe it will give someone ideas. Given how well this works for HD content I'm thinking it might be a good idea if the official QTGMC version included options to extract partially processed clips to be fed back into the filter at a later stage.

This is the batch I'm using at the moment (modified to remove elements unique to my PC):

pastebin #LDEBXerL
http://pastebin.com/LDEBXerL

I'm thinking of trying it on SD content and seeing if it has any noticeable effect there...

ndjamena
16th December 2016, 12:48
Would anyone know if there's any easy way to make a clip that throws an exception if a script tries to request a frame from it?

Everything I've tried so far either throws an exception whether a frame is requested from the clip or not or prints the error on the frame rather than aborting.

Groucho2004
16th December 2016, 16:16
Would anyone know if there's any easy way to make a clip that throws an exception if a script tries to request a frame from it?

Everything I've tried so far either throws an exception whether a frame is requested from the clip or not or prints the error on the frame rather than aborting.
A clip doesn't throw an exception, the source filter does. There are various ways to force an exception, it would help to know what kind of exception you're looking for and what you're trying to test with it.

ndjamena
24th December 2016, 12:21
Damn, how did I not notice someone had answered.

Basically I wanted a something like:


S1=NotAClip

QTGMC(S1)


And if QTGMC tries to draw a frame from clip S1 it will throw an exception, if it doesn't draw a frame everything will continue as normal.

See, without processing the actual arguments being passed to QTGMC there's no way for the batch file to know which "stages" of QTGMC will actually be used and in what order. I figure since FFMPEG just exits and returns an error upon an AVIsynth exception the batch file can just work it's way backwards testing for errors until something works.

StainlessS
24th December 2016, 12:25
there's no way for the batch file to know which "stages" of QTGMC will actually be used and in what order.

ndjamena, RT_Stats RT_DebugF() can provide real time debugging info, sends to DebugView (google) or here:- https://technet.microsoft.com/en-us/sysinternals/debugview.aspx

RT_Stats:- http://forum.doom9.org/showthread.php?t=165479

EDIT: Does not provide info to Batch, but you can tell what is happening and in what order.

ndjamena
24th December 2016, 13:24
Oh, I've tested SD and for PAL at least (at idiotic settings) in a single instance, processing it this way is still slightly faster than processing the whole thing at once... in a single instance... I assume multiple instances of full QTGMC running at once would be faster no matter what... haven't tested that yet.

The main problem is the bug in dnWindow, it seems to show itself more as frames are requested more rapidly, which is basically what this modification is about. I have to process noise single threaded until I can figure out how to fix it, which slows everything down.