recap: pre-encode subtitle-track to webm so frames present continuously
Concat-demuxer + image2 produces a sparse PTS stream (one frame per
file= entry, with timing as a "duration before next frame" gap). When
that's piped into ffmpeg's overlay filter as input #2, the overlay sees
gaps and truncates the output stream — the previous build encoded only
~157s of a 281s timeline.
Fix: subtitle-track.mjs now does a 1-3 second pre-encode pass that
converts the concat-demuxer timeline into a proper 30 fps libvpx-vp9
WebM with yuva420p alpha (~hundreds of KB). The main compose just adds
that webm as -i input #2; build-filter overlays it once. Cache via
hash on (subs[*] timing + total duration); skip the encode when cached.
This is the previously projected fix for the 6-hour compose bottleneck
on oven, now actually working.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>