f080322f

By: Michael Lynch <git@mtlynch.io>

Make convert package fully stream-based

writeConvertedFile mixed two representations of the same data: the source
was both an io.Reader and a srcPath, and the destination both an io.Writer
and a dstPath. Replace it with runFFmpeg, which confines all temp-file and
path handling to one internal helper. Callers and per-format converters now
deal only in io.Reader/io.Writer.

ffmpeg still needs real seekable files (its AVIF muxer rejects non-seekable
output), so runFFmpeg does the stream-to-temp-file bookkeeping and supplies
the input (-i), output path, and output format (-f). The per-format
converters supply only path-free codec args.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Suite timing

Time to Start Worker time Duration Time to finish
Config 4s 29s 29s 33s
Eval 30s 22s 22s 53s
Build 37s 4m46s 1m25s 2m03s
Suite 4s 5m39s 1m59s 2m03s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s2m