recap: switch subtitles from pre-encoded webm to .ass + libass filter
The pre-encoded subtitle webm path had two compounding bugs on the
oven build: libvpx-vp9 silently dropped alpha (encoded as yuv420p
instead of yuva420p, so every frame came through as opaque black and
hid the slides), and the concat-demuxer→fps filter pattern produced
sparse PTS that truncated the main encode at ~half length.
Switching to ffmpeg's `subtitles=` filter (libass) sidesteps both:
- Subtitles render directly into the video stream at composite time —
no separate alpha-codec encode required.
- Single filter, sub-second overhead instead of 5+ minutes of webm
pre-encode.
- Frame-perfect cue timing from the .ass Dialogue lines.
- Pill styling replicated via BorderStyle=4 (opaque box) +
PrimaryColour cream + OutlineColour magenta + translucent BackColour.
bin/subtitle-track.mjs now emits subs.ass instead of subtitle-track.webm.
build-filter.mjs adds a single `subtitles=...:fontsdir=...` filter on
the slide chain. compose.fish drops the subtitle-track input; waltz
moves from input #3 back to input #2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>