Five minutes from zero to converted video
Most FFmpeg tutorials start with installing FFmpeg. This one doesn't. You'll convert a video using a REST API in under 5 minutes. No binary to install. No server to configure.
Here's what we'll do:
Get an API key
Submit an FFmpeg command
Poll for the result
Download the output
Three HTTP requests. That's the whole thing.
The problem with local FFmpeg
The typical FFmpeg experience: install it, spend 30 minutes debugging codec support, figure out the right flags, and get your video transcoding working. Then you deploy.
In production, you discover that your server's FFmpeg build doesn't support libx264 because it wasn't compiled with --enable-gpl. Or your Docker image is 800MB because FFmpeg pulls in every library. Or your Lambda function times out because video encoding takes longer than 15 minutes.
A REST API skips all of that. You send a command string. You get a processed file back.
Step 1: Get your API key
Sign up at renderio.dev. Plans start at $9/mo.
Navigate to the Dashboard and create an API key. It'll look like this:
Store it somewhere safe. You'll need it for every request.
Step 2: Convert a video with curl
Let's convert a sample MP4 to WebM format:
The response returns immediately:
The video is being processed in an isolated container. Your terminal isn't blocked. Your server isn't busy.
Step 3: Poll for the result
Use the command_id to check status:
While processing:
When complete:
Step 4: Download the output
The output_files URLs are pre-signed. Download directly:
Four commands total. The video processed on RenderIO's servers — nothing ran locally.
Full Python example
Here's a complete Python script with polling and error handling:
Run it:
Full Node.js example
Same operation in JavaScript:
Handling errors
Three things can go wrong:
Bad API key: You get a
401. Check your key.Invalid command: You get a
400with details about what's wrong in the FFmpeg syntax.Processing failure: The command runs but FFmpeg errors out. Status becomes
failedwith an error message.
Always check the status. Always handle the failed case:
What to try next
Now that you've converted a video, try these operations:
Resize to 720p:
Extract first frame as thumbnail:
Trim to first 30 seconds (see the full trim guide for frame-accurate cutting and batch operations):
Extract audio:
Each of these works the same way: change the ffmpeg_command, adjust the output extension, submit, poll, download.
For 20 more ready-to-use examples, see the curl examples. The FFmpeg cheat sheet covers 50 commands with explanations.
Common mistakes
A few things that trip people up on their first integration:
Forgetting the X-API-KEY header on poll requests. The submit call works, but polling returns 401. Both endpoints need the key.
Using local file paths instead of URLs. The API can't access files on your machine. Upload to S3, R2, or any public URL first, then pass the URL as input.
Not handling the failed status. If your FFmpeg command has a syntax error (wrong filter name, missing codec), the job will fail. Always check for "status": "FAILED" and read the error message.
Expecting instant results. Short videos finish in seconds, but a 1GB file might take a couple minutes. Set your polling interval to 2-3 seconds and add a reasonable timeout.
FAQ
Is this the same as running FFmpeg locally?
The commands are identical. If you have a working FFmpeg command on your machine, wrap it in the API format (replace file paths with {placeholders}) and it runs the same way. RenderIO uses FFmpeg 7.x with all major codecs enabled.
How do I upload files that aren't publicly accessible?
Upload to a storage service first (S3, R2, Google Cloud Storage) and use a pre-signed URL. The API fetches the file from that URL before processing.
Can I chain multiple FFmpeg commands?
Yes. RenderIO supports chained commands where the output of one step feeds into the next. See the complete API guide for the chained commands endpoint.
What's the maximum file size?
The API handles files up to several GB. Processing time scales with file size, so for very large files, consider trimming or splitting first.
Do I need to worry about FFmpeg version compatibility?
No. RenderIO runs a consistent FFmpeg 7.x build with all codecs. You don't have to think about --enable-gpl or missing libraries.
Start building
The Starter plan at $9/mo includes 500 commands. Get your API key to start converting video. For language-specific guides, see the Python and Node.js tutorials.