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 |
16th December 2018, 03:33 | #38 | Link |
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,980
|
Below, Bottom left is a copy of previous frame, due to being too different (seen as scene change, Blend=False) and was using MRecalculate via Super clip.
Bottom right, MRecalculate via SuperFilt is not a copy of prev frame (not seen as scene change) and so presume that Superfilt is indeed the better option for MRecalculate. EDIT: Or maybe rather that so much identical grey, and harder to figure out what goes where (rather than scene change), but same conclusion, SuperFilt better. Script Code:
VideoFileName ="D:\STARWARS\VIDEO_TS\StarWars.d2v" Mpeg2Source(VideoFileName) Crop(0,72,0,-72) # strip borders ORG=Last #return last AMP=true #FRAME=6995 # -1 = NO TRIM, else return trimmed single FRAME FRAME=-1 FPS=250.0 # Lower to play slower (Also set FRAME = -1) AMP_MARGIN=8 # for AMP Levels TXT=RT_GetFullPathName(".\SWFrame.TXT") RT_FileDelete(TXT) LIMIT=1.0 ####################### SelectEven # Half framerate J1 = jm_fps(fps=ORG.FrameRate) # Doubled to same as original, recalc on super J2 = jm_fps2(fps=ORG.FrameRate) # Doubled to same as original, recalc on superfilt ORG=RTSub(ORG,"Source") d=Subtract(j1,j2) # Centered on TV Levels Y = 126.0 d=(AMP) ? d.levels(126-AMP_MARGIN,1.0,126+AMP_MARGIN,126-126,126+126,coring=false).GreyScale : d.GreyScale BigDif= -1 BigDifFrm=-1 SSS=""" dif=RT_AverageLuma Curdif=Abs(dif - 126.0) # TV Levels mid point(126.0) if(Curdif>BigDif) { BigDifFrm=current_frame BigDif=Curdif if(BigDif > LIMIT) { RT_WriteFile(TXT,"%d] %.3f",current_frame,BigDif,Append=True) } } return RT_Subtitle("BigDifFrm=%d BigDif=%.3f Curdif=%.3f",BigDifFrm,BigDif,Curdif) """ d=(FRAME<0) ? d.ScriptClip(SSS) : d # Return d.Assumefps(FPS) # show only difference clip d=RTSub(d,AMP?"diff AMP=True":"diff AMP=False") J1E=J1.SelectEven.RTSub("Recalc Super") J1O=J1.SelectOdd.RTSub("Recalc Super Interpolated") J1=Interleave(J1E,J1O) J2E=J2.SelectEven.RTSub("Recalc SuperFilt") J2O=J2.SelectOdd.RTSub("Recalc SuperFilt Interpolated") J2=Interleave(J2E,J2O) V=ORG.BlankClip(Width=4,Color=$FF00FF) TOP = StackHorizontal(ORG,V,D) BOT = StackHorizontal(J1,v,J2) H=TOP.BlankClip(Height=4,Color=$FF00FF) StackVertical(TOP,H,BOT) (FRAME==-1) ? Last : Trim(FRAME,-1) Return Assumefps(FPS) ####################### Function jm_fps(clip source, float "fps", int "BlkSize", int "Dct") { fps = default(fps, 25.000) fps_num = int(fps * 1000) fps_den = 1000 BlkSize = default(BlkSize, 16) Dct = default(Dct, 0) prefiltered = RemoveGrain(source, 22) super = MSuper(source, hpad = 16, vpad = 16, levels = 1, sharp = 1, rfilter = 4) # one level is enough for MRecalculate superfilt = MSuper(prefiltered, hpad = 16, vpad = 16, sharp = 1, rfilter = 4) # all levels for MAnalyse backward = MAnalyse(superfilt, isb = true, blksize = BlkSize, overlap = 4, search = 3, dct = Dct) forward = MAnalyse(superfilt, isb = false, blksize = BlkSize, overlap = 4, search = 3, dct = Dct) forward_re = MRecalculate(super, forward, blksize = 8, overlap = 2, thSAD = 100) backward_re = MRecalculate(super, backward, blksize = 8, overlap = 2, thSAD = 100) return MFlowFps(source, super, backward_re, forward_re, num = fps_num, den = fps_den, blend = false, ml = 200, mask = 2) } Function jm_fps2(clip source, float "fps", int "BlkSize", int "Dct") { fps = default(fps, 25.000) fps_num = int(fps * 1000) fps_den = 1000 BlkSize = default(BlkSize, 16) Dct = default(Dct, 0) prefiltered = RemoveGrain(source, 22) super = MSuper(source, hpad = 16, vpad = 16, levels = 1, sharp = 1, rfilter = 4) # one level is enough for MRecalculate superfilt = MSuper(prefiltered, hpad = 16, vpad = 16, sharp = 1, rfilter = 4) # all levels for MAnalyse backward = MAnalyse(superfilt, isb = true, blksize = BlkSize, overlap = 4, search = 3, dct = Dct) forward = MAnalyse(superfilt, isb = false, blksize = BlkSize, overlap = 4, search = 3, dct = Dct) forward_re = MRecalculate(superfilt, forward, blksize = 8, overlap = 2, thSAD = 100) backward_re = MRecalculate(superfilt, backward, blksize = 8, overlap = 2, thSAD = 100) return MFlowFps(source, super, backward_re, forward_re, num = fps_num, den = fps_den, blend = false, ml = 200, mask = 2) } # Stack Overhead RT_Subtitle Text, with optional FrameNumber shown. Function RtSub(clip c,string Tit, Bool "ShowFrameNo") { c.BlankClip(height=20) (Default(ShowFrameNo,False)) ? ScriptClip("""RT_Subtitle("%d] %s",current_frame,""""+Tit+"""")""") : RT_Subtitle("%s",Tit) Return StackVertical(c).AudioDubEx(c) } EDIT: Can probably just play clip until you see a massive difference frame with AMP=true. (as I did). [Maybe slow down via Assumefps() at end of script] EDIT: So it seems that many scripts need be amended. EDIT: Added FPS. EDIT: Setting jp_fps() MFlowFPS(ThSCD2=255) to switch off scene change detection stuff results in frame that is pretty much identical to jp_fps2(), I cant really see much difference, but the metrics sure do. Anyways, SuperFilt probably still better. EDIT: Although, in above case, would copy prev frame or blend be better option with fewer artefacts, any views ? EDIT: Think I'm sticking with original conclusion, too much of a jerk if copying prev frame, superfilt version is more fluid and will just look better playing normal speed. EDIT: More mods, writes file of bad frames.
__________________
I sometimes post sober. StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace "Some infinities are bigger than other infinities", but how many of them are infinitely bigger ??? Last edited by StainlessS; 16th December 2018 at 22:48. |
Tags |
avisynth, bad frame, interpolate, morph, stabilizer |
|
|