HeartlessS Usurer
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.
#
############################################################################
#
Last edited by StainlessS; 31st May 2015 at 15:12.
|