Below is a mental model I’ve found useful when turning FFmpeg (or yt‑dlp + FFmpeg) into a tiny “MCP server” that feels as friendly as, say, an image‑resize API:
- Job = ( source → transform → destination )
- source – URL, upload, or pipe
- transform – one of a handful of named presets (audio‑only/mp3, “YouTube → HLS 360p”, sprite‑sheet, etc.)
- destination – file download, cloud bucket, or a streamable response
- The user POSTs a tiny JSON blob; the server turns it into the full FFmpeg command, runs it, and returns a
job_id
.