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>
| 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 |