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. |
|
|
#81 | Link |
|
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,391
|
OK, here we go again: http://www.mediafire.com/download/2g..._17Dec2014.zip
Raised THRESH to 0.015. Added ReScan after UNDO (correct sequencing problem). Had to make RT_QwikScan and RT_QwikScanEstimateLumaTol a bit safer, slowed down a little but not so very much. Log Code:
Fsel_Eduardobedoya_Batch.Log THRESH = 0.015000 LUMATOL_SCALE=1.000000 LUMATOL_ADD=0.000000 MIN_EDITLEN=4 OVR_PIXCNT_THR=4 OVR_PIXCNT_LIM=50 ScanAheadSecs=600 ChromaWeight=0.333333 OutFPS=15.000000 PC709=True CROPPING=128,128,328,128 1/2 ] Processing 'D:\ED\Last capture without cursor.avi.AVI' QWIK Scan DBase creation = 130.94 Secs (2.18 Mins) 2124] UNDO: Matched 2095 -> 2124 : Skip 2096 to 2124 : (FDif=6.532177E-004 : LumaPixelsDifferentBy_4 = 0) 2085] UNDO: Matched 2073 -> 2085 : Skip 2074 to 2085 : (FDif=9.394840E-006 : LumaPixelsDifferentBy_4 = 0) 2072] UNDO: Matched 1992 -> 2072 : Skip 1993 to 2072 : (FDif=1.100854E-003 : LumaPixelsDifferentBy_4 = 9) 1984] UNDO: Matched 1957 -> 1984 : Skip 1958 to 1984 : (FDif=2.155287E-004 : LumaPixelsDifferentBy_4 = 4) 1951] UNDO: Matched 1923 -> 1951 : Skip 1924 to 1951 : (FDif=4.327153E-004 : LumaPixelsDifferentBy_4 = 2) 1900] UNDO: Matched 1816 -> 1900 : Skip 1817 to 1900 : (FDif=2.470290E-003 : LumaPixelsDifferentBy_4 = 14) 1809] UNDO: Matched 1784 -> 1809 : Skip 1785 to 1809 : (FDif=2.906874E-004 : LumaPixelsDifferentBy_4 = 1) 1768] UNDO: Matched 1727 -> 1768 : Skip 1728 to 1768 : (FDif=9.030099E-004 : LumaPixelsDifferentBy_4 = 7) 1716] UNDO: Matched 1693 -> 1716 : Skip 1694 to 1716 : (FDif=8.908519E-004 : LumaPixelsDifferentBy_4 = 4) 1643] UNDO: Matched 1608 -> 1643 : Skip 1609 to 1643 : (FDif=2.812926E-004 : LumaPixelsDifferentBy_4 = 0) 1588] UNDO: Matched 1553 -> 1588 : Skip 1554 to 1588 : (FDif=2.917927E-004 : LumaPixelsDifferentBy_4 = 0) 1431] UNDO: Matched 1426 -> 1431 : Skip 1427 to 1431 : (FDif=1.199224E-004 : LumaPixelsDifferentBy_4 = 1) 1411] UNDO: Matched 1391 -> 1411 : Skip 1392 to 1411 : (FDif=4.951633E-004 : LumaPixelsDifferentBy_4 = 0) 1309] UNDO: Matched 1259 -> 1309 : Skip 1260 to 1309 : (FDif=4.758210E-004 : LumaPixelsDifferentBy_4 = 1) 1219] UNDO: Matched 1186 -> 1219 : Skip 1187 to 1219 : (FDif=2.571976E-003 : LumaPixelsDifferentBy_4 = 11) 1149] UNDO: Matched 1112 -> 1149 : Skip 1113 to 1149 : (FDif=4.598498E-003 : LumaPixelsDifferentBy_4 = 13) 1048] UNDO: Matched 1039 -> 1048 : Skip 1040 to 1048 : (FDif=9.947477E-006 : LumaPixelsDifferentBy_4 = 0) 985] UNDO: Matched 938 -> 985 : Skip 939 to 985 : (FDif=6.108304E-003 : LumaPixelsDifferentBy_4 = 24) 928] UNDO: Matched 914 -> 928 : Skip 915 to 928 : (FDif=2.305052E-003 : LumaPixelsDifferentBy_4 = 9) 908] UNDO: Matched 870 -> 908 : Skip 871 to 908 : (FDif=2.127102E-003 : LumaPixelsDifferentBy_4 = 8) 850] UNDO: Matched 828 -> 850 : Skip 829 to 850 : (FDif=3.548486E-003 : LumaPixelsDifferentBy_4 = 12) 807] UNDO: Matched 713 -> 807 : Skip 714 to 807 : (FDif=3.715935E-003 : LumaPixelsDifferentBy_4 = 20) 668] UNDO: Matched 612 -> 668 : Skip 613 to 668 : (FDif=7.792190E-005 : LumaPixelsDifferentBy_4 = 1) 588] UNDO: Matched 482 -> 588 : Skip 483 to 588 : (FDif=2.116602E-004 : LumaPixelsDifferentBy_4 = 0) 460] UNDO: Matched 420 -> 460 : Skip 421 to 460 : (FDif=3.868463E-005 : LumaPixelsDifferentBy_4 = 0) 390] UNDO: Matched 370 -> 390 : Skip 371 to 390 : (FDif=3.039507E-005 : LumaPixelsDifferentBy_4 = 0) 368] UNDO: Matched 276 -> 368 : Skip 277 to 368 : (FDif=9.245627E-004 : LumaPixelsDifferentBy_4 = 3) 205] UNDO: Matched 117 -> 205 : Skip 118 to 205 : (FDif=5.156109E-004 : LumaPixelsDifferentBy_4 = 1) 65] UNDO: Matched 0 -> 65 : Skip 1 to 65 : (FDif=1.008011E-003 : LumaPixelsDifferentBy_4 = 2) Kept 410 of 2150 frames [1920x1080 143.33 secs (2.39 Mins) @ 15.00 FPS] File Max Successful CrudMax = 2.758771E-003 CrudMaxFrame=1900 File Max Successful LumaPixelsDifferentBy_4 = 24 @ Frame = 985 QWIK SCAN 130.94 Secs (2.18 Mins) InFPS=16.42 OutFPS=3.13 FramesSearched=459016 FramesSearchedFPS=3505.60 1/2 'D:\ED\Last capture without cursor.avi.AVI' Tot File Time = 262.12 Seconds (4.37 Mins) 2/2 ] Processing 'D:\ED\Test 00 tsc2.avi.AVI' QWIK Scan DBase creation = 98.48 Secs (1.64 Mins) 1649] UNDO: Matched 1636 -> 1649 : Skip 1637 to 1649 : (FDif=0.000000E+000 : LumaPixelsDifferentBy_4 = 0) 1583] UNDO: Matched 1542 -> 1583 : Skip 1543 to 1583 : (FDif=5.360585E-004 : LumaPixelsDifferentBy_4 = 3) 1498] UNDO: Matched 1391 -> 1498 : Skip 1392 to 1498 : (FDif=3.694935E-003 : LumaPixelsDifferentBy_4 = 8) 1327] UNDO: Matched 1273 -> 1327 : Skip 1274 to 1327 : (FDif=5.472770E-003 : LumaPixelsDifferentBy_4 = 19) 1262] UNDO: Matched 1234 -> 1262 : Skip 1235 to 1262 : (FDif=3.011875E-004 : LumaPixelsDifferentBy_4 = 3) 1217] UNDO: Matched 1204 -> 1217 : Skip 1205 to 1217 : (FDif=8.842202E-006 : LumaPixelsDifferentBy_4 = 0) 1190] UNDO: Matched 1099 -> 1190 : Skip 1100 to 1190 : (FDif=2.953296E-003 : LumaPixelsDifferentBy_4 = 11) 1039] UNDO: Matched 1029 -> 1039 : Skip 1030 to 1039 : (FDif=8.068509E-005 : LumaPixelsDifferentBy_4 = 1) 957] UNDO: Matched 951 -> 957 : Skip 952 to 957 : (FDif=1.050012E-005 : LumaPixelsDifferentBy_4 = 0) 945] UNDO: Matched 910 -> 945 : Skip 911 to 945 : (FDif=3.842490E-003 : LumaPixelsDifferentBy_4 = 7) 814] UNDO: Matched 805 -> 814 : Skip 806 to 814 : (FDif=0.000000E+000 : LumaPixelsDifferentBy_4 = 0) 758] UNDO: Matched 738 -> 758 : Skip 739 to 758 : (FDif=0.000000E+000 : LumaPixelsDifferentBy_4 = 0) 736] UNDO: Matched 673 -> 736 : Skip 674 to 736 : (FDif=5.128477E-003 : LumaPixelsDifferentBy_4 = 13) 609] UNDO: Matched 557 -> 609 : Skip 558 to 609 : (FDif=3.419169E-003 : LumaPixelsDifferentBy_4 = 9) 536] UNDO: Matched 527 -> 536 : Skip 528 to 536 : (FDif=6.465860E-005 : LumaPixelsDifferentBy_4 = 0) 518] UNDO: Matched 469 -> 518 : Skip 470 to 518 : (FDif=4.058571E-003 : LumaPixelsDifferentBy_4 = 14) 432] UNDO: Matched 418 -> 432 : Skip 419 to 432 : (FDif=8.242038E-003 : LumaPixelsDifferentBy_4 = 40) 395] UNDO: Matched 388 -> 395 : Skip 389 to 395 : (FDif=1.989495E-005 : LumaPixelsDifferentBy_4 = 0) 359] UNDO: Matched 324 -> 359 : Skip 325 to 359 : (FDif=6.175726E-003 : LumaPixelsDifferentBy_4 = 16) 312] UNDO: Matched 303 -> 312 : Skip 304 to 312 : (FDif=0.000000E+000 : LumaPixelsDifferentBy_4 = 0) 212] UNDO: Matched 207 -> 212 : Skip 208 to 212 : (FDif=7.736927E-006 : LumaPixelsDifferentBy_4 = 0) 205] UNDO: Matched 198 -> 205 : Skip 199 to 205 : (FDif=8.842202E-006 : LumaPixelsDifferentBy_4 = 0) 164] UNDO: Matched 111 -> 164 : Skip 112 to 164 : (FDif=1.198560E-002 : LumaPixelsDifferentBy_4 = 36) 95] UNDO: Matched 88 -> 95 : Skip 89 to 95 : (FDif=4.421101E-006 : LumaPixelsDifferentBy_4 = 0) 23] UNDO: Matched 0 -> 23 : Skip 1 to 23 : (FDif=7.389318E-003 : LumaPixelsDifferentBy_4 = 14) Kept 646 of 1650 frames [1920x1080 110.00 secs (1.83 Mins) @ 15.00 FPS] File Max Successful CrudMax = 7.427458E-003 CrudMaxFrame=432 File Max Successful LumaPixelsDifferentBy_4 = 40 @ Frame = 432 QWIK SCAN 173.10 Secs (2.88 Mins) InFPS=9.53 OutFPS=3.73 FramesSearched=490864 FramesSearchedFPS=2835.73 2/2 'D:\ED\Test 00 tsc2.avi.AVI' Tot File Time = 271.88 Seconds (4.53 Mins) BATCH TOTAL Time = 534.00 Seconds (8.90 Mins) Global CrudMax=0.007427 Global MaxLumaPixelsDifferentBy_4 = 40 ![]() EDIT: Make this alteration near end of script, (missed writing last frame 0 to log) Code:
if(!SKIP || i==0) {
if(VERBOSITY>=3 || i==0) {
if(i==0) {S=RT_String("%5d] WRITING: Frame %d",i,i) }
Else {S=RT_String(" WRITING: Frame %d",i) }
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
RT_WriteFile(CMDFrames,"%d",i,Append=True)
Kept = Kept + 1
}
Crud lump synthesised, not produced on your clips. Think, 100% satisfactory on both clips.
__________________
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; 2nd January 2020 at 23:09. |
|
|
|
|
|
#82 | Link |
|
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,391
|
Cute lil chipmonks here : https://www.youtube.com/watch?v=n3M7IR6jkpc
Dont hold that against me, it has been a difficult task. So far as I am concerned, tis fixed (let me know how it goes on longer clips).
__________________
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; 19th December 2014 at 00:31. |
|
|
|
|
|
#83 | Link |
|
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,391
|
Post #1 of 2 (update script for RT_Stats v2.0, converted to using RT_ Arrays instead of DBase)
Fsel_Eduardobedoya_Batch_04Dec2016.avs Part 1 Code:
# ############################
# Fsel_Eduardobedoya_Batch.avs, by StainlessS
# Remove Undos from painting captures.
########################################################################
THRESH = 0.015 # (0.015) Max LumaTol due to crud between undone/undo frames. (set about double CrudMax)
# (CrudMax only valid as Check when results are satisfactory)
# Upper Limit for self tuning LumaTol.
#
LUMATOL_SCALE = 1.0 # (1.0) Range 1.0 -> 2.0. Should never need change from 1.0.
# LumaTol is self tuning but could possibly be in error where without this setting would fail miserably.
# If self tune LumaTol is set too low then will not find matching UNDONE frames. This setting allows
# to increase LumaTol as LumaTol is multiplied by it, and then restricted at upper limit by THRESH above.
# If ever need to be changed, suggest something like 1.00001. (temporary change only)
#
LUMATOL_ADD = 0.0 # (0.0) Range 0.0 -> 1.0. Additional adjustment added to LumaTol, probably never necessary, but if so then
# something like 0.000001. Applied before limiting to THRESH as above.
#
MIN_EDITLEN = 4 # (4) An edit has to be at least this many frames long (frames between UNDONE and UNDO, exclusive)
OVR_PIXCNT_THR = 4 # (4) Thresh for RT_LumaPixelsDifferentCount, only pixel differences greater than this are counted.
OVR_PIXCNT_LIM = 50 # (50)If RT_LumaPixelsDifferentCount(Thresh=OVR_PIXCNT_THR) greater than this then is OVERRIDDEN as false detection.
# Above OVR_ settings for detecting override where difference between undone/undo is too visible (ie not crud).
#
ScanAheadSecs = 10 * 60 # Search ahead range in seconds
ChromaWeight = 1.0/3.0 # (1.0/3.0) YUV Chroma Weighting, 0.0 -> 1.0
FPS = 15.0 # Play speed for output script.
VERBOSITY = 0 # (0) 0 to 3. Debug & logging verbosity.
########################################################################
# Chop off crud around outsides
GLOBAL CROP_L = 128 # Crop Left
GLOBAL CROP_T = 128 # Crop Top
GLOBAL CROP_R = 328 # Crop Right (Including that thumbnail with the delayed UNDO and additional crap)
GLOBAL CROP_B = 128 # Crop Bottom
########################################################################
# During Testing
GLOBAL CREATE = True
GLOBAL DELETE_ARR = false
########################################################################
GLOBAL PC709 = True
GLOBAL CROP_L = (CROP_L / 4) * 4 GLOBAL CROP_T = (CROP_T / 4) * 4
GLOBAL CROP_R = (CROP_R / 4) * 4 GLOBAL CROP_B = (CROP_B / 4) * 4
FSEL_TITLE="Select AVI files"
FSEL_DIR="."
FSEL_FILT="Avi files|*.avi"
FSEL_MULTI=True
AVIFILE_LIST = RT_FSelOpen(title=FSEL_TITLE,dir=FSEL_DIR,filt=FSEL_FILT,multi=FSEL_MULTI)
Assert(AVIFILE_LIST.IsString,"RT_FSelOpen: Error="+String(AVIFILE_LIST))
NFILES=RT_TxtQueryLines(AVIFILE_LIST) # Query Number of lines in String ie number of files.
myName="Fsel_Eduardobedoya_Batch: "
LOG="Fsel_Eduardobedoya_Batch.Log"
RT_WriteFile(LOG,"%s\n",LOG,Append=False)
S=RT_String("THRESH = %f LUMATOL_SCALE=%f LUMATOL_ADD=%f\nMIN_EDITLEN=%d OVR_PIXCNT_THR=%d OVR_PIXCNT_LIM=%d",
\ THRESH,LUMATOL_SCALE,LUMATOL_ADD,MIN_EDITLEN,OVR_PIXCNT_THR,OVR_PIXCNT_LIM)
RT_WriteFile(LOG,"%s",S,Append=True)
RT_DebugF("%s",S,name=myName)
S=RT_String("ScanAheadSecs=%d ChromaWeight=%f OutFPS=%f",ScanAheadSecs,ChromaWeight,FPS)
RT_WriteFile(LOG,"%s",S,Append=True)
RT_DebugF("%s",S,name=myName)
S=RT_String("PC709=%s CROPPING=%d,%d,%d,%d",PC709,CROP_L,CROP_T,CROP_R,CROP_B)
RT_WriteFile(LOG,"%s",S,Append=True)
RT_DebugF("%s",S,name=myName)
GLOBAL Global_CrudMax = 0.0
Global Global_PixCntMax = 0
Crud_S="""
AMP=True
PCTHRESH=@
aviName=$@@$
PC709=@@@
Path=RT_FilenameSplit(AviName,3)
Node=RT_FilenameSplit(AviName,4)
CrudFrames = Path + $CrudInspect_Frames_$ + Node + $.TXT$
Avisource(AviName)
Crop(CROP_L,CROP_T,-CROP_R,-CROP_B)
ConvertToYV12(matrix=(PC709)?$PC.709$:$PC.601$)
NUMBERSCLIP=FrameSel(Cmd=CrudFrames,Ordered=False,SHOW=TRUE)
NUMBERSCLIP=NUMBERSCLIP.CROP(0,0,20*10,1*20).POINTResize(20*10*2,1*20*2)
NA=NUMBERSCLIP.SelectEven
NB=NUMBERSCLIP.SelectODD
FrameSel(Cmd=CrudFrames,Ordered=False)
A=SelectEven
B=SelectODD
DELTA = Clipdelta(A,B,AMP)
DELTA = DELTA.OVERLAY(NA,X=0,Y=DELTA.HEIGHT-NA.HEIGHT).OVERLAY(NB,X=DELTA.WIDTH-NB.WIDTH,Y=DELTA.HEIGHT-NA.HEIGHT)
DELTA
SC=$$$
pc=RT_LumaPixelsDifferentCount(A,B)
pct=RT_LumaPixelsDifferentCount(A,B,THRESH=PCTHRESH)
ld=RT_LumaDifference(A,B)
fd=RT_FrameDifference(A,B)
S=RT_String($UNDO=%d] LumaDif=%f FrameDif=%f LumaPixelsDifferent=%d LumaPixelsDifferentByMoreThan_%d=%d$,current_frame,ld,fd,pc,PCTHRESH,pct)
Subtitle(S,size=24,font=$Courier New$)
$$$
ScriptClip(SC)
return Last
# Return Clip Difference of input clips (amp==true = Amplified, show==true = show background)
Function ClipDelta(clip clip1,clip clip2,bool $amp$,bool $show$) {
amp=Default(amp,false)
show=Default(show,false)
c2=clip1.levels(128-32,1.0,128+32,128-32,128+32).greyscale()
c1=clip1.subtract(clip2)
c1=(amp)?c1.levels(127,1.0,129,0,255):c1
return (show)?c1.Merge(c2):c1
}
"""
GSCript("""
TOTSTART = RT_TimerHP
For(i=0,NFILES-1) {
START = RT_TimerHP
FN=RT_TxtGetLine(AVIFILE_LIST,i) # Filename of avi file i
S=RT_String("\n%d/%d ] Processing '%s'\n",i+1,NFILES, FN)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
DropUndo(FN,Crud_S,ScanAheadSecs,thresh=THRESH,Min_EditLen=MIN_EDITLEN,
\ log=LOG,ChromaWeight=ChromaWeight,fps=FPS,
\ ovr_pixcnt_thr=OVR_PIXCNT_THR,ovr_pixcnt_lim=OVR_PIXCNT_LIM,
\ LumaTol_Scale=LUMATOL_SCALE,LumaTol_Add=LUMATOL_ADD,Verbosity=VERBOSITY)
T = RT_TimerHP - START
S=RT_String("%d/%d '%s' Tot File Time = %.2f Seconds (%.2f Mins)",i+1,NFILES,FN, T,T/60.0)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
T = RT_TimerHP - TOTSTART
S=RT_String("\nBATCH TOTAL Time = %.2f Seconds (%.2f Mins)\nGlobal CrudMax=%f\nGlobal MaxLumaPixelsDifferentBy_%d = %d",
\ T,T/60.0,GLOBAL_CrudMax,OVR_PIXCNT_THR,Global_PixCntMax)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
S=RT_String("\nDONE\n\n%s",S)
S=RT_StrReplace(S,Chr(10),"\n")
""")
Return blankclip(length=24*60*60*24).Subtitle(S,Align=5,Y=100,lsp=0,Size=30)
__________________
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 ??? |
|
|
|
|
|
#84 | Link |
|
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,391
|
Post #2 of 2
Fsel_Eduardobedoya_Batch_04Dec2016.avs Part 1 Code:
Function DropUndo(String AviName,String Crud_S,Float "ScanAheadSecs",Float "THRESH",Int "Min_EditLen",
\ String "Log",Float "ChromaWeight",float "fps",Int "ovr_pixcnt_thr",Int "ovr_pixcnt_lim",
\ Float "LumaTol_Scale",Float "LumaTol_Add", Int "Verbosity") {
myName="DropUndo: "
ScanAheadSecs=Float(Default(ScanAheadSecs,10.0*60.0))
THRESH=Float(Default(THRESH,0.02))
MIN_EDITLEN=Default(MIN_EDITLEN,4)
LOG = Default(LOG,"DropUndo.LOG")
ChromaWeight = Float(Default(ChromaWeight,1.0/3.0))
FPS = Float(Default(FPS,FPS))
OVR_PIXCNT_THR=Default(OVR_PIXCNT_THR,4)
OVR_PIXCNT_LIM=Default(OVR_PIXCNT_LIM,50)
LumaTol_Scale = Float(Default(LumaTol_Scale,1.0))
LumaTol_Add = Float(Default(LumaTol_Add,0.0))
VERBOSITY=Default(VERBOSITY,0)
Assert(Exist(AviName),myName+AviName+" Does Not Exist")
Avisource(AviName)
ORG=Last
Crop(CROP_L,CROP_T,-CROP_R,-CROP_B) # Crop crud
ConvertToYV12(Matrix=(PC709)?"PC.709":"PC.601")
Assert(ScanAheadSecs>0.0,myName+"ScanAheadSecs Must be greater than zero")
Assert(THRESH>0.0, myName+"THRESH Must be greater than zero")
Assert(MIN_EDITLEN>0,myName+"Greater than zero please")
Assert(ChromaWeight>=0.0 && ChromaWeight<=1.0, myName+"ChromaWeight range 0.0 -> 1.0")
Assert(OVR_PIXCNT_THR>=0 && OVR_PIXCNT_THR<=8, myName+"OVR_PIXCNT_THR range 0 -> 8")
Assert(OVR_PIXCNT_LIM>=0 && OVR_PIXCNT_LIM<=100, myName+"OVR_PIXCNT_LIM range 0 -> 100")
Assert(LumaTol_Scale>=1.0 && LumaTol_Scale<=2.0, myName+"LUMATOL_SCALE range 1.0 -> 2.0")
Assert(LumaTol_Add>=0.0 && LumaTol_Add<=1.0, myName+"LUMATOL_ADD range 0.0 -> 1.0")
Assert(VERBOSITY>=0 && VERBOSITY<=3, myName+"VERBOSITY range 0 -> 3")
Path = RT_FilenameSplit(AviName,3) # Drive + Dir
Node = RT_FilenameSplit(AviName,4) # Name
PathAndNode = Path+Node # Drive + Dir + Name
CMDFrames=PathAndNode+"_Frames.TXT"
Ranges=PathAndNode+"_Ranges.TXT"
ScriptFile=Path+"_AVS_"+Node+"_SelectFrames.AVS"
CrudScript = Path + "_CRUD_INSPECT_" + Node + ".AVS"
CrudFrames = Path + "CrudInspect_Frames_" + Node + ".TXT"
Fnd_S = RT_String("CROP_L\nCROP_T\nCROP_R\nCROP_B\n$\n@@@\n@@\n@\n")
Rep_S = RT_String("%d\n%d\n%d\n%d\n%c\n%s\n%s\n%d",CROP_L,CROP_T,CROP_R,CROP_B,34,PC709,RT_GetFullPathName(AviName),OVR_PIXCNT_THR)
Crud_S = RT_StrReplaceMulti(Crud_S,Fnd_S,Rep_S)
ScanAheadFrames = Int(ScanAheadSecs*FrameRate)
ARR=PathAndNode+".ARR"
PREV=PathAndNode + "_Prev.ARR"
NEXT=PathAndNode + "_Next.ARR"
RT_FileDelete(CMDFrames) # Delete any existing frames file
RT_FileDelete(Ranges) # Delete any existing Ranges file
RT_FileDelete(CrudFrames)
RT_FileDelete(CrudScript)
CRUD_DB="~"+RT_LocalTimeString+".DB"
RT_DBaseAlloc(CRUD_DB,0,"ii") # CRUD_DB int,int
### TEMPLATE script
FrameSel_Select="""
Show=False # Set True to show original Frame Number
fn="%s"
Avisource(fn)
(Show) ? ScriptClip("Subtitle(String(current_frame))") : NOP
PathAndNode="%s"
CmdFrames=PathAndNode+"_Frames.txt"
Ranges=PathAndNode+"_Ranges.txt"
Ex=Exist(CmdFrames)
(Ex) ? FrameSel_CmdReWrite(Ranges,cmd=CmdFrames,reject=False) : NOP # Informational ONLY
(Ex) ? FrameSel(cmd=CmdFrames,reject=False) : NOP
Return Last.AssumeFPS(%f)
"""
###
Select_S = FrameSel_Select
Select_S = RT_StrReplaceDeep(RT_StrReplace(Select_S,Chr(9)," ")," "," ") # TAB and SPACE compact
Select_S = RT_String(Select_S,AviName,PathAndNode,FPS) # Insert filenames
FramesSearched = 0
CrudMax = 0.0
CrudMaxFrame = -1
PixCntMax = 0
PixCntMaxFrame = -1
Kept = 0
GSCript("""
if(CREATE) {
START = RT_TimerHP
RT_QwikScanCreate(ARR,prev="",next=NEXT,debug=true)
T= RT_TimerHP - START
S = RT_String("QWIK Scan ARRAY creation = %.2f Secs (%.2f Mins)",T,T/60.0)
RT_WriteFile(LOG,"%s",S,Append=True)
}
START = RT_TimerHP
LastFrame=FrameCount-1
RT_DebugF(" QWIK Scanning file ... Please Wait",name=myName)
for(i=LastFrame,0,-1) {
SKIP = False
if(i > 0) {
PreUndoDif = RT_FrameDifference(Last,Last,n=i,n2=i-1,ChromaWeight=ChromaWeight)
FramesSearched = FramesSearched + 1
if(PreUndoDif > 0.0) {
StartFrame = Max(i-ScanAheadFrames,0)
EndFrame = (i - 1 - MIN_EDITLEN)
# We are looking for an UNDONE frame that is more similar to i frame than i-1.
# If i is an UNDO frame then UNDONE frame will be more similar to i than i-1, so LumaTol estimate will find it fast.
# Alternatively, if i is not an UNDO frame then LumaTol estimate will speed up NOT FINDING frame.
# If estimate greater than THRESH, then i could still be an UNDO frame just i-1 is quite a lot different to i frame, so we
# limit LumaTol to THRESH assuming well set for Crud max.
# Below two lines speed up whole script significantly (rather than just using THRESH setting for LumaTol).
# arg frame order IS SIGNIFICANT (we are matching to i frame, estimate is for i-1).
LumaTol = RT_QwikScanEstimateLumaTol(Last,Last,n=i,n2=i-1)
LumaTol = LumaTol_Scale * LumaTol + LumaTol_Add
LumaTol = (LumaTol>THRESH) ? THRESH : LumaTol
DifThresh = PreUndoDif*0.999999 # We are looking for BETTER match, NOT equal
if(VERBOSITY>=1) {
S = RT_String("%5d] NEWSEARCH: SearchStart=%d SearchEnd=%d Seeking FDif <= %E {LumaTol=%E}",
\ i,StartFrame,EndFrame,DifThresh,LumaTol)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
For(j=StartFrame,EndFrame) {
MaxDistance = EndFrame - j
if(VERBOSITY>=2) {
S = RT_String(" SEARCH: SearchStart=%d MaxDistance=%d",j,MaxDistance)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
# XP=3, strictly better than, ie left most frame (first found, furthest from i).
# MaxDistance limits search to exclude MIN_EDITLEN frames.
Result=RT_QwikScan(Last,j,Last,i,ARR,NEXT,lumatol=LumaTol,Flags=$04,fd=DifThresh,maxdistance=MaxDistance,XP=3)
if(Result>=0) { # Exit Condition succeeds
FramesSearched = FramesSearched + (QWKS_BM_FD_FRM-j+1)
if(VERBOSITY>=2) {
S = RT_String(" MATCH: Frame=%5d FrameDifference=%E ",QWKS_BM_FD_FRM,QWKS_BM_FD)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
CrudPix=RT_LumaPixelsDifferentCount(Last,Last,n=i,n2=QWKS_BM_FD_FRM,Thresh=OVR_PIXCNT_THR)
FramesSearched = FramesSearched + 1
if(CrudPix <= OVR_PIXCNT_LIM) {
YCrudDif = RT_QwikScanEstimateLumaTol(Last,Last,n=i,n2=QWKS_BM_FD_FRM) # Crud measured by LumaTol estimate
FramesSearched = FramesSearched + 1
if(YCrudDif > CrudMax) {
CrudMax = YCrudDif
CrudMaxFrame = i
}
if(CrudPix > PixCntMax) {
PixCntMax = CrudPix
PixCntMaxFrame = i
}
RT_DBaseAppend(CRUD_DB,QWKS_BM_FD_FRM,i)
if(VERBOSITY==0) {
S=RT_String("%5d] UNDO: Matched %d -> %d : Skip %d to %d : (FDif=%E : LumaPixelsDifferentBy_%d = %d)",
\ i,QWKS_BM_FD_FRM,i,QWKS_BM_FD_FRM+1,i,QWKS_BM_FD,OVR_PIXCNT_THR,CrudPix)
} Else {
S=RT_String(" UNDO: Matched %d -> %d : Skip %d to %d : (FDif=%E : LumaPixelsDifferentBy_%d = %d)",
\ QWKS_BM_FD_FRM,i,QWKS_BM_FD_FRM+1,i,QWKS_BM_FD,OVR_PIXCNT_THR,CrudPix)
}
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
i = QWKS_BM_FD_FRM+1 # Skip edited Frames up to and including UNDO frame: Rescan @ i - 1
SKIP = True # Dont write i
if(VERBOSITY>=2) {
S=RT_String(" RESCAN: @ %d",i-1)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
j = EndFrame # Break
} Else {
if(VERBOSITY>=2){
S=RT_String(" OVERRIDE: LumaPixelsDifferentBy_%d = %d (I -> Matched Frame)",OVR_PIXCNT_THR,CrudPix)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
j = QWKS_BM_FD_FRM # Continue search
}
} Else { # Result < 0, Exit condition fails
FramesSearched = FramesSearched + MaxDistance + 1 # Searched full extent
if(VERBOSITY>=3) {
if(QWKS_BM_FLAGS!=0) { # Got a Best Match Only
S = RT_String(" NOT FOUND: Best Match Frame=%5d FDif=%E",QWKS_BM_FD_FRM,QWKS_BM_FD)
} Else { # Did not even get a Best match
S = RT_String(" NOT FOUND: No Best Match:")
}
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
j = EndFrame # Break
}
} # End for j
} Else { # PreUndoDif <= 0.0
if(VERBOSITY>=2) {
d = i-1
for(k=d-1,0,-1) {
Dif = RT_FrameDifference(Last,Last,n=i,n2=k,ChromaWeight=ChromaWeight)
FramesSearched = FramesSearched + 1
if(Dif == 0.0) {
d = k
} Else {
k = - 1
}
}
S=RT_String("%5d] IDENTICAL: Frames %d to %d : Skipping Frames %d to %d",i,d,i,d+1,i)
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
i = d+1 # Retry at d
}
SKIP = True # Dont write i
}
} # i == 0
if(!SKIP || i==0) {
if(VERBOSITY>=3 || i==0) {
if(i==0) {S=RT_String("%5d] WRITING: Frame %d",i,i) }
Else {S=RT_String(" WRITING: Frame %d",i) }
RT_DebugF("%s",S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
}
RT_WriteFile(CMDFrames,"%d",i,Append=True)
Kept = Kept + 1
}
}
# Delayed write of crud frames (cannot now use FrameSel(Ordered=True) in Crud_Inspect script due to RESCAN duplicate frames Nos)
for(i=RT_DBaseRecords(CRUD_DB)-1,0,-1) {
RT_WriteFile(CrudFrames,"%d\n%d",RT_DBaseGetField(CRUD_DB,i,0),RT_DBaseGetField(CRUD_DB,i,1),Append=True)
}
RT_FileDelete(CRUD_DB)
RT_WriteFile(ScriptFile,"%s",Select_S)
RT_WriteFile(CrudScript,"%s",Crud_S)
(DELETE_ARR) ? RT_FileDelete(ARR) : NOP
(DELETE_ARR) ? RT_FileDelete(NEXT) : NOP
T = RT_TimerHP - START
FT=FrameCount / FrameRate
S=RT_String("\nKept %d of %d frames [%dx%d %.2f secs (%.2f Mins) @ %.2f FPS]",Kept, FrameCount,ORG.Width,ORG.Height,FT,FT/60.0,FrameRate)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
S=RT_String("File Max Successful CrudMax = %E CrudMaxFrame=%d",CrudMax,CrudMaxFrame)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
S=RT_String("File Max Successful LumaPixelsDifferentBy_%d = %d @ Frame = %d",ovr_pixcnt_thr,PixCntMax,PixCntMaxFrame)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
S=RT_String("QWIK SCAN %.2f Secs (%.2f Mins) InFPS=%.2f OutFPS=%.2f FramesSearched=%d FramesSearchedFPS=%.2f",
\ T,T/60.0,FrameCount/T,Kept/T,FramesSearched,FramesSearched/T)
RT_DebugF(S,name=myName)
RT_WriteFile(LOG,"%s",S,Append=True)
Global Global_CrudMax = Max(Global_CrudMax,CrudMax)
Global Global_PixCntMax = Max(Global_PixCntMax,PixCntMax)
""")
Return 0
}
__________________
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 ??? |
|
|
|
![]() |
| Tags |
| avisynth, detection, duplicated, frames, trim |
| Thread Tools | |
| Display Modes | |
|
|