By: Michael Lynch <git@mtlynch.io>
Make video transcoding durable and tune the encoder Rework background video transcoding so it survives restarts and fails visibly, and tune ffmpeg for the resolutions we actually serve. - Treat media_items 'processing' rows as a durable queue: the worker drains the DB (ReadNextProcessingVideo) and resumes any video left processing by a crash or restart. The HTTP handler no longer blocks on a full in-memory channel. - Retain original video uploads under --originals-dir (defaults beside the DB) as both the worker's transcode source and the record DESIGN requires, instead of a deleted temp file. - Add a 'failed' media status so a deterministic transcode error shows the uploader a re-upload notice rather than a perpetual "processing" one. Crash -> still processing (retried); error -> failed. - Shut down gracefully: cancel the in-flight ffmpeg on SIGTERM via exec.CommandContext and an http.Server/Server.Shutdown handshake; the cancelled item stays processing and resumes next start. - Cap served video to a 2560px box (no upscale), add VP9 speed flags, and seek past the blank opening frame for thumbnails. Missing ffmpeg or ffprobe surfaces at conversion time, not startup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
| Time to Start | Worker time | Duration | Time to finish | |
| Config | 1s | 11s | 11s | 12s |
| Eval | 10s | 51s | 51s | 1m02s |
| Build | 15s | 5m34s | 1m03s | 1m19s |
| Test | - | - | - | - |
| Deploy | - | - | - | - |
| Suite | 1s | 6m36s | 1m17s | 1m19s |