View Single Post
Old 29th April 2015, 21:57   #14  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,980
Both scripts have had several updates (In RT_Stats zip) which have not been posted here (mainly due to D9 post size restriction).

Matchframes.avs Part 1 of 2
Code:
############################################################################
# MatchFrames v1.10, by StainlessS:
#
# Find And return frames in c clip that are best matched to frames in f clip.
# v1.10 Planar, YUY2, RGB24/32. Previously YV12 only.
# Null Audio returned.
# ##################################
# Based on FindFrame() (c) Gavino.     http://forum.doom9.org/showthread.php?p=1569622#post1569622
# Required: GScript    (c) Gavino:     http://forum.doom9.org/showthread.php?t=147846
# Required: RT_Stats (c) StainlessS:   http://forum.doom9.org/showthread.php?p=1584313
# Recommended FrameSel (c) StainlessS: http://forum.doom9.org/showthread.php?t=167971
# Recommended DebugView utility to view and capture output: http://technet.microsoft.com/en-gb/sysinternals/bb545027
# MatchFrames  THREAD:                 http://forum.doom9.org/showthread.php?t=164766
# LocateFrames POST:                   http://forum.doom9.org/showthread.php?p=1600961#post1600961
# ##################################
#
# MatchFrames(clip c,clip f,bool "Show",float "Thresh",float "Thresh2",string "FileName",string "LogFile", \
#               int "Start",int "Stop",bool "XP",Bool "Chroma",Float "ChromaWeight",string "Title",bool "debug")
#
# Args:
#
# c       = clip, Source clip.
# f       = clip, Consisting of frames that you wish to find in the c clip.
# Show    = bool[true], True returns both find and found frames using StackHorizontal. NOTE, hires clips, may cause problems in eg VDUB
#                if StackHorizontal width goes over some VD imposed limit.
# Thresh  = float[0.0 == Search for 1st exact match or best possible if no exact match found]. Threshold for declaring match (diff <= Thresh).
#           Range 0.0 -> 255.0.
# Thresh2 = float[0.0 == NOT time ordered]. Both a 'time ordered' indicator and a threshold.
#           If (Thresh < Thresh2) Then clip f is taken as time ordered (in c), ie frames in both f and c clips are temporally ordered.
#           If f clip is known to be time ordered (in c), this arg can significantly cut down on the time taken to search for frames.
#
#           Assuming time ordered f clip (Thresh < Thresh2),
#
#               If a match found where diff of find to found frame <= Thresh,
#                    Next frame search will start from found frame + 1.
#               Else if diff of find to Full Scan BEST found frame < Thresh2
#                    Next frame search will start from BEST found frame + 1.
#               Else
#                    Next frame search will start from current start position.
#               End if
#               *** Where above 'Full Scan' means scan from current start postion to the last valid search frame.
#
# FileName= string["MatchFramesCmd.txt"], Output Frames command file.
#             Can use FrameSel() Plugin to select frames using MatchFramesCmd.txt Command file.
#             FrameSel() Plugin can be found here:- http://forum.doom9.org/showthread.php?t=167971
#             Can monitor the MatchFramesCmd.txt file during scanning to view progress (ie view in notepad, [Read-Only viewer maybe safer]).
#
# LogFile = string["MatchFrames.Log"], Output Log file. Can monitor as for command file.
#             The Logfile might produce an output line like that below:
#
#             "0]=[1100] Diff=0.239 (T1:XP) S=1000 E =1101 XPCNT=5"
#
#             Where eg 0] is find frame number, [1100] is found frame,
#             Diff is the Difference (Luma + optional Chroma) between find and found frames.
#             S and E are the search start and end positions that were searched for that frame.
#             The "(T1:XP)" stuff presents just a little info about the search:
#              "(BM:  )" Best Match, where no frame was found with a Diff <= Thresh, the returned frame was best match found in search area.
#              "(BM:T2)" Same as "(BM:  )" but was an Ordered search & because Diff<Thresh2, then next frame search will start at Best Match+1.
#              "(T1:  )" Means that the found frame had a Diff <= Thresh.
#              "(T1:XP)" Same as "(T1:  )" but Xtra Paranoia (XP) successfully found a better matching frame following the one that
#              initially broke thresh. If this flag is shown, you will also see "XPCNT" which will tell how many successive better frames
#              were found after the initial frame that broke Thresh.
#             v1.10, See Debug arg below to view real time output in DebugView window without slight risk involved reading open log file.
#
# Start   = int[0, == First frame of clip], Start frame to search from (eg Skip introduction).
# Stop    = int[0, == Last frame of clip + 1], Frame prior to which, c clip is searched (Exclusive). (eg Skip end credits).
# XP      = bool[true == Extra Paranoid] Main purpose of XP is so that you can use Thresh > 0.0 even if you dont fully trust a non best search.
#               If diff of find to found frame <= Thresh, then search would normally stop at that frame, but when
#               XP is true (Default), it will continue to search so long as subsequent frames provide a better match. Will usually result
#               in 1 extra frame being compared (providing that your Thresh is not too high).
#               If Thresh is set to 0.0 (default) then will only stop search on EXACT match, and so is likely to do a full search
#               (unless exact frame exists). XP allows you to settle for a close match by setting thresh a little above 0.0, and when a close
#               match is found, it will continue to edge forward 1 frame at a time until matches cease to be better.
#               If exact match was found, ie diff == 0.0 then will not scan extra frames (no better match possible).
#
# Chroma   = bool[false==Luma diff Only], If true then also uses chroma difference as per ChromaWeight.
# ChromaWeight=float[1.0/3.0 ie 0.33333]. If Chroma==true then LumaWeight = 1.0-ChromaWeight.
#               If Chroma==false then ChromaWeight is ignored and only luma difference is used.
#               v1.10, Chroma and ChromaWeight are for YUV only, not used for Y8 or RGB, no real advantage to using Luma only.
# Title    = string[""== none], Allows you to place a string of text in the Log and Command file headers, eg "Hires Test#2" or whatever.
# Debug    = bool[True == Debug info sent to debugview], True, send logging info to DebugView window (google DebugView),
#            allows monitoring of progress without the slightly risky method of reading the open LogFile. New v1.10.
#            Default True as cannot change your mind in middle of long search, does not have significant overhead in producing debug log.
#            False, switch real time debug logging off.
#            This setting has nothing whatever to do with below pre v1.10 DEBUG MODE, see below.
# ##################################
# DEBUG MODE: If the f FrameCount and c[START,STOP] FrameCount (ie STOP-START) are same AND Thresh < Thresh2 (ie Ordered), then the script is put
# into DEBUG MODE. This would be easiest achieved when START and STOP are at their default 0 values meaning 'All of c clip' and lengths of
# f and c are same.
# In Debug Mode, there is no searching for best match, log is produced with difference between all corresponding frames
# and in the footer of the log, it will show Average Diff, Min Diff, and Max Diff for the entire frame set.
# In DEBUG MODE, the command file is cleared, prints header only.
# ##################################
#
# Will take some time to show results, it is not a bug if it seems to hang, it is WORKING HARD.
#
############################################################################
#
__________________
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; 31st May 2015 at 15:12.
StainlessS is offline   Reply With Quote