Hard to be precise as it depends on machine and current running temp, but roughly 10-12% for +1 and another 2-3% extra for +2Interesting, how much % speedup do you see for +1 core? For +2?
Actually, this helps a lot: I think this is about disk access. MeguIV 1.x introduced the 1st pass lossless encoding, outputing a huge intermediate file, whereas MeguIV 0.x was more cpu-bound. I think that is why we have seen a drop from 100% CPU. Because of my particular configuration all my machines have somewhat slower than typical disk access. That explains why I get such a good speedup from more threads (give the cpu more to do, while it waits for the disk buffers). However, from your numbers it seems that you could benefit somewhat from one extra thread.probably not a huge help but mentioning it cant hurt
Coincidence - I was thinking much the same thing. I tried NNEDI3 a while ago and it was a lot slower, so good to hear that it's getting better. In fact the current version of QTGMC already supports any interpolator using the EdiExt parameter:Any plans to officially support NNEDI3 in future versions?
QuickTGMC( Preset="Slow", EdiExt=NNEDI3( field=-2 ) )
None yet, I have run into a problem with dropped and out-of-order frames and I'm trying to solve that first. I have a dual-core, btw.Rollyco, have you done any testing?
That sounds weird - is that from an ordinary deinterlacing script? Field parity might explain out-of-order, but how would that get wrong...None yet, I have run into a problem with dropped and out-of-order frames and I'm trying to solve that first.
However, I don't have anything with less than 4 cores, so I'm not sure if these observations hold true in that case...
I see - given that behaviour, I think the default should remain at 1 thread to 1 processor. One of the reasons I wrote QTGMC was make things easier for low spec machines.I had one DVD in the works for the weekend and I ''played'' with it for the past 2 days. It's not particularly long, just 53min, and I used QTGMC on Slow preset. When I tried with 3 threads, it ended up being slower. It starts OK being a little faster, but than FPS slowly starts to drop - half way through it was 11% slower, and by the end it was 14% slower. I tried one more time with 3 threads, it followed the same trend.
Hmm... I only made deliberate changes to Placebo, Medium, Fast and Very Fast. I deliberately tried to keep Slow and Slower the same as they're the common ones. But this update was fairly major and so I may have affected something. I'll double check. Thanks for telling me...At Preset=Slow, I'm getting 10fps instead of 12 as I did with 2.3. Were the presets changed again?
Hmm... I only made deliberate changes to Placebo, Medium, Fast and Very Fast. I deliberately tried to keep Slow and Slower the same as they're the common ones. But this update was fairly major and so I may have affected something. I'll double check. Thanks for telling me...
I also did a barrage of tests and can detect no speed difference. So all is good again... :tea:I did a recheck and the speeds appear to be the same now. My computer has been acting weird lately. Don't mind me
#------------------#
# InterpolateFPSx2 #
#------------------#
#
# Double framerate using a combination of MVTools and simple frame blending / blurring
# Uses MVTools SAD mask to determine where to blend/blur instead of interpolate
#
# Parameters:
# BlendThresh (>=0) : Threshold above which blending/blurring is used. Decrease to blend more, increase to interpolate more. Default = 36
# AltMethod (0,1) : Method to use instead of interpolation when motion predition is poor: 0 = blend neighbor frames, 1 = gauss-blur the interpolate
function InterpolateFPSx2( clip Input, int "BlendThresh", int "AltMethod" )
{
BlendThresh = default( BlendThresh, 36 )
AltMethod = default( AltMethod, 1 )
_blocksize = 16
_search = 3
_searchParam = 4
w = Input.Width()
h = Input.Height()
epsilon = 0.0001
filter = Input.GaussResize( w,h, 0,0, w+epsilon,h+epsilon, p=2 )
superFilter = filter.MSuper( pel=2 )
bVec = MAnalyse( superFilter, isb=true, blksize=_blocksize, overlap=_blocksize/2, search=_search, searchparam=_searchParam )
fVec = MAnalyse( superFilter, isb=false, blksize=_blocksize, overlap=_blocksize/2, search=_search, searchparam=_searchParam )
super = Input.MSuper( pel=2 )
interpolated = Input.MFlowFps( super, bVec, fVec, num=0 ).SelectOdd()
backupPlan = (AltMethod == 0) ? mt_average( Input, Input.trim( 1,0 ) + Input.trim( Input.Framecount()-1,0 ), U=3,V=3 ) : \
interpolated.GaussResize( w,h, 0,0, w+epsilon,h+epsilon, p=5 )
badMask = MMask( Input, bVec, kind=1, ml=BlendThresh, gamma=2.5 )
newFrames = mt_merge( interpolated, backupPlan, badMask, luma=true )
return Interleave( Input, newFrames )
}
I also did a barrage of tests and can detect no speed difference. So all is good again... :tea:
________
Returning to a point you raised earlier. I tried MSU's Frame Rate Converter for frame rate doubling and I was pretty disappointed. It's certainly no better than MVTools. So I wrote a small script (InterpolateFPSx2) to do what I mentioned earlier - detect the areas where the motion interpolation is poor and blur those areas instead. It does produce improved results.
Here are some samples (42Mb, pw=glass-like): http://hotfile.com/dl/59996187/96c9b87/IF2.rar.html
It's a short scene with a particularly difficult motion. There are four rips, MVTools, the MSU frame rate converter, and the two methods from my own script. MVTools and MSU both fail in different ways - MSU is blocky, MVTools is distorted.
My script uses MVTools as a starting point, then has two methods to deal with problem areas:
AltMethod=0 replaces the problem areas with a blend of the two neighboring frames - this gives the cleanest result, but tends to look more like single frame rate again.
AltMethod=1 (the default) blurs the problem areas - this hides the distorted areas much better so they are less noticable during playback - but they are still noticable paused.
There is also a BlendThresh parameter which helps decide which areas are considered the problem areas. The default settings are usually OK. As usual the full details are in the script comments.
I used this script for the first 30mins of this rip (60fps version) [Junior material]
Script Code:
[HIDE]
Save as InterpolateFPSx2.avsi in your plugins folder
Requires MVTools v2 plugin
[/HIDE]Code:#------------------# # InterpolateFPSx2 # #------------------# # # Double framerate using a combination of MVTools and simple frame blending / blurring # Uses MVTools SAD mask to determine where to blend/blur instead of interpolate # # Parameters: # BlendThresh (>=0) : Threshold above which blending/blurring is used. Decrease to blend more, increase to interpolate more. Default = 36 # AltMethod (0,1) : Method to use instead of interpolation when motion predition is poor: 0 = blend neighbor frames, 1 = gauss-blur the interpolate function InterpolateFPSx2( clip Input, int "BlendThresh", int "AltMethod" ) { BlendThresh = default( BlendThresh, 36 ) AltMethod = default( AltMethod, 1 ) _blocksize = 16 _search = 3 _searchParam = 4 w = Input.Width() h = Input.Height() epsilon = 0.0001 filter = Input.GaussResize( w,h, 0,0, w+epsilon,h+epsilon, p=2 ) superFilter = filter.MSuper( pel=2 ) bVec = MAnalyse( superFilter, isb=true, blksize=_blocksize, overlap=_blocksize/2, search=_search, searchparam=_searchParam ) fVec = MAnalyse( superFilter, isb=false, blksize=_blocksize, overlap=_blocksize/2, search=_search, searchparam=_searchParam ) super = Input.MSuper( pel=2 ) interpolated = Input.MFlowFps( super, bVec, fVec, num=0 ).SelectOdd() backupPlan = (AltMethod == 0) ? mt_average( Input, Input.trim( 1,0 ) + Input.trim( Input.Framecount()-1,0 ), U=3,V=3 ) : \ interpolated.GaussResize( w,h, 0,0, w+epsilon,h+epsilon, p=5 ) badMask = MMask( Input, bVec, kind=1, ml=BlendThresh, gamma=2.5 ) newFrames = mt_merge( interpolated, backupPlan, badMask, luma=true ) return Interleave( Input, newFrames ) }
Noise Bypass feature
[...]