#!/usr/bin/env bash # Extract a clip to a PNG sequence for the take builder. # # Frames are pre-extracted rather than decoded in the page on purpose: browser # video seeking by currentTime is approximate and requestVideoFrameCallback only # delivers frames at playback speed, so neither gives a deterministic per-frame # pass. A PNG sequence is exact, instantly seekable, and reproducible. set -euo pipefail src="${1:?usage: ./extract.sh CLIP [FPS] [OUTDIR]}" fps="${2:-24}" out="${3:-frames}" rm -rf "$out" mkdir -p "$out" ffmpeg -hide_banner -loglevel warning -i "$src" -vf "fps=$fps" "$out/%04d.png" echo "$(ls -1 "$out" | wc -l) frames at ${fps}fps -> $out/"