FFmpeg Media · IntroductionNEW
FFmpeg media processing API: transcode, compress, scale, trim, frame extraction, single-frame grab, watermark, subtitle burn-in, character nameplates, concat, concat with transitions, mux, timeline audio mux, audio extraction, GIF conversion, thumbnail, media probe, deep QC, and file upload. Flow: (1) upload a file to get a CDN URL → (2) call an operation (use that URL as input) → (3) poll by taskId until succeeded / failed. Inputs only accept URLs on a trusted allowlist domain (platform CDN or a trusted-source CDN); if an asset is already on a trusted CDN you can skip upload and use it directly. Billed by credits: charged when the task starts running (the price can only be determined after probing the input), not yet charged while queued, auto-refunded in full on failure; invalid parameters and insufficient balance are rejected before any charge. A busy platform is not an error: when every node is busy, submit still returns a taskId and the task waits as queued, then starts automatically — just keep polling, no need to retry yourself.
How to call
- Upload:
POST /v1/ffmpeg/upload(multipart), get a CDN URL. - Submit:
POST /v1/ffmpeg/{operation}, use that URL as input, returns a taskId. - Query:
GET /v1/ffmpeg/info?id=taskId, poll until status = succeeded.
Operations
💰 See the pricing page for prices →
Concurrency & Limits
- Per-account concurrent tasks: limited by your account quota (shared with generation tasks on the site); both queued and running count. Submissions beyond the quota return 429 with your limit in the message (max N)
- A busy platform is not an error: when every node is busy, submit still returns a taskId and the task waits as queued, then starts automatically — just keep polling, no need to retry
- Single-task timeout: 300s (refunded on timeout)
- Upload limit 200MB; task input download limit 1GB
- Input URLs must be on a trusted allowlist domain (platform CDN + trusted-source CDN)
Common Errors
| Code | msg | Meaning | How to fix |
|---|---|---|---|
| 400 | invalid params / non-allowlist url | Invalid params or input URL not on allowlist (rejected before charge) | Check enum/range; upload input first to get a CDN URL |
| 429 | Task limit reached (max N) | Exceeds your account concurrent-task quota (shared with generation tasks on the site; both queued and running count); the max N in the message is your limit | Wait for existing tasks to finish, or contact us to raise the quota. Note: a busy platform alone never returns 429 — those tasks simply wait as queued |
| 500 | failed / timeout | Processing failed or timed out (300s); credits auto-refunded, see data.errorMsg | Adjust input/params per errorMsg and retry |