18 lines
665 B
Bash
18 lines
665 B
Bash
|
|
#!/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/"
|