Disclosure first: I maintain the Rust crate ez-ffmpeg (no relation to the JavaScript "Ez FFmpeg" that once hit the HN front page). That is why the "who should not use it" section is the honest one.

What you type into a search box is never "how do I initialize an AVFormatContext" — it is "ffmpeg extract audio command." You already know the command; what stops you in a Rust project is the mapping: which API does this command correspond to? For the last year this article would have been a hand-written lookup table — you find your row, you translate -c:v libx264 -crf 23 into builder calls one flag at a time. ez-ffmpeg 0.15's cli feature does something less tedious and more interesting: paste the command string, and it either runs it in-process (from_cli) or translates it into compile-ready Rust (emit_rust_code).

The interesting part is not that it translates — it is the attitude with which it translates. It sorts every command into three classes: verified (safe to run), unverified (generates scaffolding code with a loud warning, and refuses to execute), and unrecognized (rejected on the spot with a token-anchored, typed error). It would rather refuse you clearly than "run, but come out subtly different from ffmpeg" — because that second failure mode is the one that destroys trust. This post is about that contract: how to use it, and why it is built this way.