Tool to find matching start and end points in a looping video, e.g. in a concentric mosaic light field dataset
Install depencencies listed in environment.yml.
If Anaconda is set up, simply run:
conda env create -f environment.ymlCheck video_loop_finder.py --help for possible options.
Video Loop Finder
USAGE:
video_loop_finder.py [options] VIDEO_PATH [START_FRAME_IDX [DURATION_HINT]]
ARGUMENTS:
VIDEO_PATH Path to a video file or printf-style escaped path to image
sequence, e.g. '/path/to/image%04d.png'
START_FRAME_IDX Index of first frame of loop [default: 0]
DURATION_HINT Estimated duration of loop in frames [default: video duration]
OPTIONS:
-r RANGE --range=RANGE Search for end frame ±RANGE frames around
START_FRAME + DURATION_HINT [default: 50]
-w WIDTH --width=WIDTH Image width in pixels used in computations. Set to 0
to use full original image resolution [default: 256]
-f PIXELS --flow-filter=PIXELS Filters out optical flow vectors that,
when chaining forward and backward flows together,
do not map back onto themselves within PIXELS. Set
to 'off' to disable filtering. [default: 0.2]
-i --interactive Enable interactive alignment of start and end frames
-d --debug Enable more verbose logging and plot intermediate
results
-o --outfile=OUTFILE Save trimmed version of video in OUTFILE
--ffmpeg-opts=OPTS Pass options OPTS (one quoted string) to ffmpeg,
e.g. --ffmpeg-opts="-b:v 1000 -c:v h264 -an"
-h --help Show this help text
DESCRIPTION:
Finds a loop in a repeating video, such as a concentric mosaic dataset, stored in
VIDEO_PATH.
This script will find the best matching frame pair in terms of lowest sum of absolute
pixel differences and localise the end frame relative to the actual beginning/end of the
loop.
For example, if in a concentric mosaic video, the first frame is assumed at 0° and the
closest end frame is found at 359.1°, then the relative position of the latter is
359.1°/360° = 99.75%.