StainlessS
2nd September 2018, 18:31
Prompted by this thread (Thread owner GreyMouse):- https://forum.doom9.org/showthread.php?t=175640
Fixes damage like this (two consecutive damaged frames, left fixed with metrics, right bad source, middle Zebra dc detection clip)
Frame Before Bad Frames pair [showing LHS detection metric of 4.598, and hilited 'L' flag denoting left Source frame for interpolation]
https://s20.postimg.cc/4ox3enegp/Dirt_Box_MI_v0.03_165.jpg (https://postimg.cc/image/4ox3enegp/)
First of bad frame pair
https://s20.postimg.cc/u7pfrosvt/Dirt_Box_MI_v0.03_166.jpg (https://postimg.cc/image/u7pfrosvt/)
Second of bad frame pair
https://s20.postimg.cc/51ohkuzbd/Dirt_Box_MI_v0.03_167.jpg (https://postimg.cc/image/51ohkuzbd/)
Frame after bad frame pair [showing RHS detection metric of 2.303, and hilited 'R' flag denoting right Source frame for interpolation]
https://s20.postimg.cc/5r79x87kp/Dirt_Box_MI_v0.03_168.jpg (https://postimg.cc/image/5r79x87kp/)
(Above top frame, LHS detection [left of damage detection is shown in the rhs metric], the damage is to the right, bottom frame RHS detection, the damage is to the left)
Or Flash Frame Photography (static or near static cam), where Th arg might want to be somewhat bigger.
Adjust Th setting by viewing RHS RAT metrics on frame before bad frames, so that it is below the lowest bad frame metrcs ratio.
Post #1 of 4
DirtBox_MI_v0.03.avs
Function DirtBox_MI(clip c,clip "dc",Float "Th",Float "ThMin",Int "MinLen",Int "MaxLen",
\ Int "SPad", Int "SSharp", Int "SRFilter", [* MSuper *]
\ Int "ABlkSize", Int "AOverlap", Int "ASearch",Int "ADct", [* MAnalyse *]
\ Int "RBlkSize", Int "ROverlap", Int "RthSAD", [* MRecalculate *]
\ Float "Iml", Bool "IBlend", Int "IthSCD1", Int "IthSCD2", [* MFlowInter *]
\ Int "OthSCD1",Int "OthSCD2", [* Detect Override *]
\ bool "Show",Int "Chop",String "SurgeonFile",String "OverrideFile"
\ ) {
/*
DirtBox_MI(), v0.03
[ Take your time saying the name out aloud when in public place ].
Req:- GScript OR Avs+, Grunt, MvTools2, Masktools2, RemoveGrain, CallCmd, RT_Stats v1.43.
CallCmd() optional, will auto delete DBase on clip closure if present.
YUV Only (well whatever MvTools2 + MaskTools2 supports).
Function DirtBox_MI(clip c,clip "dc"=c,Float "Th"=1.3,Float "ThMin"=0.5,Int "MinLen=1",Int "MaxLen"=2,
\ Int "SPad"=16, Int "SSharp"=1, Int "SRFilter"=4, [* MSuper *]
\ Int "ABlkSize"=16, Int "AOverlap"=4, Int "ASearch"=3,Int "ADct"=0, [* MAnalyse *]
\ Int "RBlkSize"=8, Int "ROverlap"=2, Int "RthSAD"=100, [* MRecalculate *]
\ Float "Iml"=200.0, Bool "IBlend"=True, Int "IthSCD1"=400, Int "IthSCD2"=130, [* MFlowInter *]
\ Int "OthSCD1"=400,Int "OthSCD2"=130, [* Detect Override *]
\ bool "Show",Int "Chop",String "SurgeonFile",String "OverrideFile"
\ )
Args:-
c, Source clip.
dc, Detection Clip, Default c. Must have same number of frames as Src c, no other requirement.
Intent to use eg Zebra Bands to better tune for detection, Used only for primary detect of
leftmost and rightmost frames where damage occurs.
Th, Bad Ratio Threshold, default 1.3. If eg Cur->Nxt / Max(Prv->Cur,0.001) > Th then Nxt
frame is possble 1st of damaged frames (but Cur->Nxt must also be >= ThMin as described below).
Suggest much higher for flash frame detection (probably dont need Zebra dc clip)..
Default Th of 1.3 is VERY sensitive, take care with this setting, it could well chew up your
prized video clip.
ThMin, Difference of Cur->Nxt must be at least this to detect Left 'breakup'. default 0.5.
(Avoid detection where current frame is a duplicate of prev frame and Cur->Nxt diff is very small.)
[Same in reverse for detecting RHS breakup]. Do Not set to 0.0, ie OFF.
MinLen, Minimum length of damaged sequence to fix, default 1.
MaxLen, Maximum length of damaged sequence to fix, default 2 (1 <= MinLen <= MaxLen <= 9).
MaxLen provides the maximum supported by the FrameSurgeon script, ie 9, and so will not be
increased further.
Suggest only use MaxLen of 9 where Th is really quite high, bare minimum of maybe 5.0 or
perhaps even 10.0, even then is probably a bit dodgy.
MSuper args:
SPad, Default 16, See MvTools MSuper(hpad=8,vpad=8) [We use same for both].
SSharp, Default 1, See MvTools MSuper(sharp=2)
SRFilter, Default 4, See MvTools MSuper(rfilter=2)
MAnalyse args:
ABlkSize, Default 16, See MvTools MAnalyse(BlkSize=8,BlkSizeV=8) [We use same for both].
AOverLap, Default 4, See MvTools MAnalyse(OverLap=0)
ASearch, Default 3, See MvTools MAnalyse(Search=4)
ADct, Default 0, See MvTools MAnalyse(Dct=0). Using other than default value can be VERY slow.
MRecalculate args:
RBlkSize, Default 8, See MvTools MRecalculate(BlkSize)
NOTE, RBlkSize = 0 Will Switch OFF MRecalculate, probably a bit faster at possible expense of quality.
ROverlap, Default 2, See MvTools MRecalculate(Overlap)
RthSAD, Default 100, See MvTools MRecalculate(thSAD=200)
MFlowInter args:
Iml, Default 200.0, See MvTools MFlowInter(ml=100.0)
IBlend, Default True, See MvTools MFlowInter(Blend=True). Blend or copy frame at scene change.
IthSCD1, Default 400, See MvTools MFlowInter(thSCD1=400) : (0 < IthSCD1 <= (8*8)*255)
IthSCD2, Default 130, See MvTools MFlowInter(thSCD2=130) : (0 < IthSCD2 <= 255)
Threshold which sets how many blocks have to change for the frame to be considered as a
scene change. It is ranged from 0 to 255, 0 meaning 0 %, 255 meaning 100 %.
Default is 130 (which means 51.0%).
Used by MvTools2 MFlowInter during interpolation.
Detection Override args:
OthSCD1, Default 400. as MVTools MSCDetection arg. (0 < OthSCD1 <= (8*8)*255). See MvTools2.
OthSCD2, Default 130. as MVTools MSCDetection arg. (0 < OthSCD2 <= 255)
These two thresholds govern whether frames either side of bad sequence are determined to be
from the same scene, if not from Same scene then detection is Overidden and 'E' flag is set in metrics,
on what would have been the 1st/leftmost interpolation Source frame.
NOTE, If OthSCD1 > 8*8*255 or OthSCD2 > 255 then switches OFF scne change testing, will NOT override
any detections that seem to have good frames either end from different scenes. (will likely
result in blended scene transitions).
Metrics Args:
Show, Show Metrics, default True.
Chop, Show Mode if Show=True,
0 Normal
1 Left half of frame is fixed, Right original.
2 Top half of frame is fixed, Bottom original.
File Output args:
SurgeonFile, Default "FrameSurgeonCmd.txt". If Non "", then writes a FrameSurgeon() command file to
recreate result, so can manually edit the result file and re-render in FrameSurgeon.
[part of the Sawbones/FrameSurgeon combo which also requires ClipClop()].
If using Multi-instances, each instance should have its own SurgeonFile file.
OverrideFile, Default "Overridden.txt". Detected Sequences that were Overridden because the interpolation
source frames seemed to be from Different scenes
[In FrameSurgeon() format,
"I2 666" would be two frame bad seq starting at frame 666, where interp src frames would have
been frames 665 and 668].
Dc clip implemented to assist in detection, where can use eg Zebra() to create a 'tuned to error' diagnostic clip.
Most damage will likely occur horizontally (in eg VHS tracking gunk), and so we might use Zebra Default Row=true
to create a vertical set of Zebra bars (same height as clip c), and can use the Zebra args, Threshold, Lo and Hi,
to tune some of the bars to better reveal where errors occur. If any of the bars seem of no use, then best
get rid of those bars so as not to 'water down' the detection metrics.
For original 'GreyMouse' (a user) clip, YPlaneMin bar is always black and so was cropped off for dc detection
clip, however, YPlaneMin bar might actually be useful in such case if border cropped version of clip were given
to Zebra() for the DC detection clip. So, where a clip has horizontal damage and black borders left and right, then
crop off those borders for creation of Zebra bars, but keep them in original clip. (if vertical damage and top/bot
black borders, then do the same cropping top and bottom borders instead, and of course set Zebra(Row=false)).
May be able to detect several kinds of frame corruption, including flash frames, up to 9 frames catered for.
Where it can detect flash frames, will only likely be possible where frames are from the SAME SCENE, not two
different scenes separated by white gunk.
Dc clip probably not needed for flash photography flashes.
To deal with Interlaced clip, can eg SeparateFields / SelectEven/Odd and handle each separately, then weave them
back together again afterwards. Is multi-instance capable and so (despite use of global vars) will work just fine.
Probably better to not jump about, jumping into middle of bad sequence will start detect from jump point,
but OK to go backwards where already visited.
Shows Flags where hi-lited,
E = End Of Scene
Shown only on 1st detected Interpolation Src frame (frame before bad sequence starts).
Override where detected bad seq interpolation source frames are NOT from same scene (by OthSCD1 and OthSCD2)
0 = Any Digit 0 to 9, 0 when E flag not hi-lited, else digit representing length of bad sequence
that was Overridden as for E flag above.
L = Left Intep Src frame
R = Right Interpolate Src frame,
* = Interpolated frame.
*/
c myName="DirtBox_MI: "
IsAvsPlus=(FindStr(UCase(versionString),"AVISYNTH+")!=0) HasGScript=RT_FunctionExist("GScript")
HasGRunt =RT_FunctionExist("GScriptClip") HasMvTools=RT_FunctionExist("MSuper")
HasMaskTools=RT_FunctionExist("MT_Lutxy")
HasRemoveGrain=RT_FunctionExist("RemoveGrain") HasCallCmd = RT_FunctionExist("CallCmd")
Assert(IsAvsPlus || HasGScript,RT_String("%sNeed either GScript or AVS+",myName))
Assert(HasGRunt,RT_String("%sNeed GRunt:-https://forum.doom9.org/showthread.php?t=139337 ",myName))
Assert(HasMVTools,RT_String("%sNeed MvTools2:-http://forum.doom9.org/showthread.php?t=131033",myName))
Assert(HasMaskTools,RT_String("%sNeed MaskTools",myName))
Assert(HasRemoveGrain,RT_String("%sNeed RemoveGrain",myName))
dc = Default(dc,c)
Th = Default(Th,1.3) ThMin = Default(ThMin,0.5)
MinLen = Default(MinLen,1) MaxLen = Default(MaxLen,2)
SPad = Default(SPad,16) SSharp = Default(SSharp,1) SRFilter= Default(SRFilter,4)
ABlkSize= Default(ABlkSize,16) AOverlap= Default(AOverlap,4) ASearch = Default(ASearch,3) ADct = Default(ADct,0)
RBlkSize= Default(RBlkSize,8) ROverlap= Default(ROverlap,2) RthSAD = Default(RthSAD,100)
Iml = Default(Iml,200.0) IBlend = Default(IBlend,True) IthSCD1 = Default(IthSCD1,400) IthSCD2= Default(IthSCD2,130)
OthSCD1 = Default(OthSCD1,400) OthSCD2 = Default(OthSCD2,130)
Show = Default(Show, True) Chop = Default(Chop, 0)
SurgeonFile = Default(SurgeonFile, "FrameSurgeonCmd.txt")
OverrideFile = Default(OverrideFile,"OverrideFile.txt")
Assert(dc.Framecount==c.FrameCount,RT_String("%sdc.FrameCount does not match",myName))
Assert(1 <= MinLen <= MaxLen <= 9,RT_String("%s1 <= MinLen(%d) <= MaxLen(%d) <= 9",myName,MinLen,MaxLen))
Chop = Show ? Min(Max(Chop,0),2) : 0
EDIT: SurgeonFile looks like this where frame 166 is 2 frame interpolated seq (the two frames shown in above images)
###
# FrameSurgeon() Command file [ Generated by DirtBox() ]
###
I1 71
I1 88
I1 94
I1 116
I2 166
Also available in zip via MediaFire or SendSpace in my sig below this post. (~8KB)
Fixes damage like this (two consecutive damaged frames, left fixed with metrics, right bad source, middle Zebra dc detection clip)
Frame Before Bad Frames pair [showing LHS detection metric of 4.598, and hilited 'L' flag denoting left Source frame for interpolation]
https://s20.postimg.cc/4ox3enegp/Dirt_Box_MI_v0.03_165.jpg (https://postimg.cc/image/4ox3enegp/)
First of bad frame pair
https://s20.postimg.cc/u7pfrosvt/Dirt_Box_MI_v0.03_166.jpg (https://postimg.cc/image/u7pfrosvt/)
Second of bad frame pair
https://s20.postimg.cc/51ohkuzbd/Dirt_Box_MI_v0.03_167.jpg (https://postimg.cc/image/51ohkuzbd/)
Frame after bad frame pair [showing RHS detection metric of 2.303, and hilited 'R' flag denoting right Source frame for interpolation]
https://s20.postimg.cc/5r79x87kp/Dirt_Box_MI_v0.03_168.jpg (https://postimg.cc/image/5r79x87kp/)
(Above top frame, LHS detection [left of damage detection is shown in the rhs metric], the damage is to the right, bottom frame RHS detection, the damage is to the left)
Or Flash Frame Photography (static or near static cam), where Th arg might want to be somewhat bigger.
Adjust Th setting by viewing RHS RAT metrics on frame before bad frames, so that it is below the lowest bad frame metrcs ratio.
Post #1 of 4
DirtBox_MI_v0.03.avs
Function DirtBox_MI(clip c,clip "dc",Float "Th",Float "ThMin",Int "MinLen",Int "MaxLen",
\ Int "SPad", Int "SSharp", Int "SRFilter", [* MSuper *]
\ Int "ABlkSize", Int "AOverlap", Int "ASearch",Int "ADct", [* MAnalyse *]
\ Int "RBlkSize", Int "ROverlap", Int "RthSAD", [* MRecalculate *]
\ Float "Iml", Bool "IBlend", Int "IthSCD1", Int "IthSCD2", [* MFlowInter *]
\ Int "OthSCD1",Int "OthSCD2", [* Detect Override *]
\ bool "Show",Int "Chop",String "SurgeonFile",String "OverrideFile"
\ ) {
/*
DirtBox_MI(), v0.03
[ Take your time saying the name out aloud when in public place ].
Req:- GScript OR Avs+, Grunt, MvTools2, Masktools2, RemoveGrain, CallCmd, RT_Stats v1.43.
CallCmd() optional, will auto delete DBase on clip closure if present.
YUV Only (well whatever MvTools2 + MaskTools2 supports).
Function DirtBox_MI(clip c,clip "dc"=c,Float "Th"=1.3,Float "ThMin"=0.5,Int "MinLen=1",Int "MaxLen"=2,
\ Int "SPad"=16, Int "SSharp"=1, Int "SRFilter"=4, [* MSuper *]
\ Int "ABlkSize"=16, Int "AOverlap"=4, Int "ASearch"=3,Int "ADct"=0, [* MAnalyse *]
\ Int "RBlkSize"=8, Int "ROverlap"=2, Int "RthSAD"=100, [* MRecalculate *]
\ Float "Iml"=200.0, Bool "IBlend"=True, Int "IthSCD1"=400, Int "IthSCD2"=130, [* MFlowInter *]
\ Int "OthSCD1"=400,Int "OthSCD2"=130, [* Detect Override *]
\ bool "Show",Int "Chop",String "SurgeonFile",String "OverrideFile"
\ )
Args:-
c, Source clip.
dc, Detection Clip, Default c. Must have same number of frames as Src c, no other requirement.
Intent to use eg Zebra Bands to better tune for detection, Used only for primary detect of
leftmost and rightmost frames where damage occurs.
Th, Bad Ratio Threshold, default 1.3. If eg Cur->Nxt / Max(Prv->Cur,0.001) > Th then Nxt
frame is possble 1st of damaged frames (but Cur->Nxt must also be >= ThMin as described below).
Suggest much higher for flash frame detection (probably dont need Zebra dc clip)..
Default Th of 1.3 is VERY sensitive, take care with this setting, it could well chew up your
prized video clip.
ThMin, Difference of Cur->Nxt must be at least this to detect Left 'breakup'. default 0.5.
(Avoid detection where current frame is a duplicate of prev frame and Cur->Nxt diff is very small.)
[Same in reverse for detecting RHS breakup]. Do Not set to 0.0, ie OFF.
MinLen, Minimum length of damaged sequence to fix, default 1.
MaxLen, Maximum length of damaged sequence to fix, default 2 (1 <= MinLen <= MaxLen <= 9).
MaxLen provides the maximum supported by the FrameSurgeon script, ie 9, and so will not be
increased further.
Suggest only use MaxLen of 9 where Th is really quite high, bare minimum of maybe 5.0 or
perhaps even 10.0, even then is probably a bit dodgy.
MSuper args:
SPad, Default 16, See MvTools MSuper(hpad=8,vpad=8) [We use same for both].
SSharp, Default 1, See MvTools MSuper(sharp=2)
SRFilter, Default 4, See MvTools MSuper(rfilter=2)
MAnalyse args:
ABlkSize, Default 16, See MvTools MAnalyse(BlkSize=8,BlkSizeV=8) [We use same for both].
AOverLap, Default 4, See MvTools MAnalyse(OverLap=0)
ASearch, Default 3, See MvTools MAnalyse(Search=4)
ADct, Default 0, See MvTools MAnalyse(Dct=0). Using other than default value can be VERY slow.
MRecalculate args:
RBlkSize, Default 8, See MvTools MRecalculate(BlkSize)
NOTE, RBlkSize = 0 Will Switch OFF MRecalculate, probably a bit faster at possible expense of quality.
ROverlap, Default 2, See MvTools MRecalculate(Overlap)
RthSAD, Default 100, See MvTools MRecalculate(thSAD=200)
MFlowInter args:
Iml, Default 200.0, See MvTools MFlowInter(ml=100.0)
IBlend, Default True, See MvTools MFlowInter(Blend=True). Blend or copy frame at scene change.
IthSCD1, Default 400, See MvTools MFlowInter(thSCD1=400) : (0 < IthSCD1 <= (8*8)*255)
IthSCD2, Default 130, See MvTools MFlowInter(thSCD2=130) : (0 < IthSCD2 <= 255)
Threshold which sets how many blocks have to change for the frame to be considered as a
scene change. It is ranged from 0 to 255, 0 meaning 0 %, 255 meaning 100 %.
Default is 130 (which means 51.0%).
Used by MvTools2 MFlowInter during interpolation.
Detection Override args:
OthSCD1, Default 400. as MVTools MSCDetection arg. (0 < OthSCD1 <= (8*8)*255). See MvTools2.
OthSCD2, Default 130. as MVTools MSCDetection arg. (0 < OthSCD2 <= 255)
These two thresholds govern whether frames either side of bad sequence are determined to be
from the same scene, if not from Same scene then detection is Overidden and 'E' flag is set in metrics,
on what would have been the 1st/leftmost interpolation Source frame.
NOTE, If OthSCD1 > 8*8*255 or OthSCD2 > 255 then switches OFF scne change testing, will NOT override
any detections that seem to have good frames either end from different scenes. (will likely
result in blended scene transitions).
Metrics Args:
Show, Show Metrics, default True.
Chop, Show Mode if Show=True,
0 Normal
1 Left half of frame is fixed, Right original.
2 Top half of frame is fixed, Bottom original.
File Output args:
SurgeonFile, Default "FrameSurgeonCmd.txt". If Non "", then writes a FrameSurgeon() command file to
recreate result, so can manually edit the result file and re-render in FrameSurgeon.
[part of the Sawbones/FrameSurgeon combo which also requires ClipClop()].
If using Multi-instances, each instance should have its own SurgeonFile file.
OverrideFile, Default "Overridden.txt". Detected Sequences that were Overridden because the interpolation
source frames seemed to be from Different scenes
[In FrameSurgeon() format,
"I2 666" would be two frame bad seq starting at frame 666, where interp src frames would have
been frames 665 and 668].
Dc clip implemented to assist in detection, where can use eg Zebra() to create a 'tuned to error' diagnostic clip.
Most damage will likely occur horizontally (in eg VHS tracking gunk), and so we might use Zebra Default Row=true
to create a vertical set of Zebra bars (same height as clip c), and can use the Zebra args, Threshold, Lo and Hi,
to tune some of the bars to better reveal where errors occur. If any of the bars seem of no use, then best
get rid of those bars so as not to 'water down' the detection metrics.
For original 'GreyMouse' (a user) clip, YPlaneMin bar is always black and so was cropped off for dc detection
clip, however, YPlaneMin bar might actually be useful in such case if border cropped version of clip were given
to Zebra() for the DC detection clip. So, where a clip has horizontal damage and black borders left and right, then
crop off those borders for creation of Zebra bars, but keep them in original clip. (if vertical damage and top/bot
black borders, then do the same cropping top and bottom borders instead, and of course set Zebra(Row=false)).
May be able to detect several kinds of frame corruption, including flash frames, up to 9 frames catered for.
Where it can detect flash frames, will only likely be possible where frames are from the SAME SCENE, not two
different scenes separated by white gunk.
Dc clip probably not needed for flash photography flashes.
To deal with Interlaced clip, can eg SeparateFields / SelectEven/Odd and handle each separately, then weave them
back together again afterwards. Is multi-instance capable and so (despite use of global vars) will work just fine.
Probably better to not jump about, jumping into middle of bad sequence will start detect from jump point,
but OK to go backwards where already visited.
Shows Flags where hi-lited,
E = End Of Scene
Shown only on 1st detected Interpolation Src frame (frame before bad sequence starts).
Override where detected bad seq interpolation source frames are NOT from same scene (by OthSCD1 and OthSCD2)
0 = Any Digit 0 to 9, 0 when E flag not hi-lited, else digit representing length of bad sequence
that was Overridden as for E flag above.
L = Left Intep Src frame
R = Right Interpolate Src frame,
* = Interpolated frame.
*/
c myName="DirtBox_MI: "
IsAvsPlus=(FindStr(UCase(versionString),"AVISYNTH+")!=0) HasGScript=RT_FunctionExist("GScript")
HasGRunt =RT_FunctionExist("GScriptClip") HasMvTools=RT_FunctionExist("MSuper")
HasMaskTools=RT_FunctionExist("MT_Lutxy")
HasRemoveGrain=RT_FunctionExist("RemoveGrain") HasCallCmd = RT_FunctionExist("CallCmd")
Assert(IsAvsPlus || HasGScript,RT_String("%sNeed either GScript or AVS+",myName))
Assert(HasGRunt,RT_String("%sNeed GRunt:-https://forum.doom9.org/showthread.php?t=139337 ",myName))
Assert(HasMVTools,RT_String("%sNeed MvTools2:-http://forum.doom9.org/showthread.php?t=131033",myName))
Assert(HasMaskTools,RT_String("%sNeed MaskTools",myName))
Assert(HasRemoveGrain,RT_String("%sNeed RemoveGrain",myName))
dc = Default(dc,c)
Th = Default(Th,1.3) ThMin = Default(ThMin,0.5)
MinLen = Default(MinLen,1) MaxLen = Default(MaxLen,2)
SPad = Default(SPad,16) SSharp = Default(SSharp,1) SRFilter= Default(SRFilter,4)
ABlkSize= Default(ABlkSize,16) AOverlap= Default(AOverlap,4) ASearch = Default(ASearch,3) ADct = Default(ADct,0)
RBlkSize= Default(RBlkSize,8) ROverlap= Default(ROverlap,2) RthSAD = Default(RthSAD,100)
Iml = Default(Iml,200.0) IBlend = Default(IBlend,True) IthSCD1 = Default(IthSCD1,400) IthSCD2= Default(IthSCD2,130)
OthSCD1 = Default(OthSCD1,400) OthSCD2 = Default(OthSCD2,130)
Show = Default(Show, True) Chop = Default(Chop, 0)
SurgeonFile = Default(SurgeonFile, "FrameSurgeonCmd.txt")
OverrideFile = Default(OverrideFile,"OverrideFile.txt")
Assert(dc.Framecount==c.FrameCount,RT_String("%sdc.FrameCount does not match",myName))
Assert(1 <= MinLen <= MaxLen <= 9,RT_String("%s1 <= MinLen(%d) <= MaxLen(%d) <= 9",myName,MinLen,MaxLen))
Chop = Show ? Min(Max(Chop,0),2) : 0
EDIT: SurgeonFile looks like this where frame 166 is 2 frame interpolated seq (the two frames shown in above images)
###
# FrameSurgeon() Command file [ Generated by DirtBox() ]
###
I1 71
I1 88
I1 94
I1 116
I2 166
Also available in zip via MediaFire or SendSpace in my sig below this post. (~8KB)