Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions guides/ffmpeg.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "FFmpeg command guide"

Check warning on line 2 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L2

Did you really mean 'FFmpeg'?
sidebarTitle: "FFmpeg"
description: "Run any FFmpeg command in the cloud. ~120 whitelisted flags, 8-layer sandboxed execution, signed download URL. Same FFmpeg syntax you know."

Check warning on line 4 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L4

Did you really mean 'FFmpeg'?

Check warning on line 4 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L4

Did you really mean 'sandboxed'?
icon: "terminal"
keywords: ["ffmpeg guide", "ffmpeg in cloud", "ffmpeg sandboxed execution", "ffmpeg flags whitelist", "ffmpeg command api"]
---
Expand All @@ -24,7 +24,7 @@
}}
/>

You write the FFmpeg command. Rendobar downloads inputs, runs the command in an isolated container, returns a signed download URL. Same syntax you'd run locally.

Check warning on line 27 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L27

Did you really mean 'FFmpeg'?

Check warning on line 27 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L27

Did you really mean 'Rendobar'?

```bash
curl -X POST https://api.rendobar.com/jobs \
Expand All @@ -40,15 +40,15 @@
```

<Tip>
From a shell? Use [the CLI](/cli/overview): `rb ffmpeg -i input.mp4 -vf scale=1280:720 out.mp4`. Local files upload automatically.

Check warning on line 43 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L43

Did you really mean 'ffmpeg'?
</Tip>

## How it runs

1. **Validate**: command parsed against 8 security layers (flag whitelist, format/filter blocklists)
2. **Download**: input URLs pulled to a sandboxed worker

Check warning on line 49 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L49

Did you really mean 'sandboxed'?
3. **Substitute**: URLs replaced with local paths in the FFmpeg command

Check warning on line 50 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L50

Did you really mean 'FFmpeg'?
4. **Execute**: FFmpeg runs in an isolated container with network disabled

Check warning on line 51 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L51

Did you really mean 'FFmpeg'?
5. **Upload**: output goes to R2
6. **Return**: signed `output.file.url` available via `GET /jobs/{id}`

Expand All @@ -67,21 +67,24 @@

Reach for the `inputs` map only when a file can't go inline: a file a filter reads by name (see below), inline text you don't want to host, an already-uploaded asset, or when you need a stable filename. Each key is a filename staged under that exact name, and the command references it by bare name.

A value can be one of four shapes:
A value can be one of three shapes:

| Value | Use it for |
|---|---|
| `"https://..."` | A remote file. Shorthand for `{ "url": "..." }` |
| `{ "url": "https://..." }` | A remote file, explicit form |
| `{ "content": "...text..." }` | Inline text you don't want to host (≤64 KB) |
| `{ "ref": "asset_abc123" }` | A file you already uploaded, by its asset ID (returned by the uploads endpoint) |

A file you already uploaded is referenced by its **content URL**: the `url`
returned by the uploads endpoint, like `https://api.rendobar.com/assets/asset_abc123/content`.
Pass it like any other URL.

```json
{
"type": "ffmpeg",
"inputs": {
"clip.mp4": "https://example.com/clip.mp4",
"logo.png": { "ref": "asset_brandlogo" }
"logo.png": "https://api.rendobar.com/assets/asset_brandlogo/content"
},
"params": {
"command": "ffmpeg -i clip.mp4 -i logo.png -filter_complex overlay=10:10 output.mp4"
Expand All @@ -91,7 +94,7 @@

### Auxiliary files read by a filter

Some files aren't passed as `-i` arguments. Filters like `subtitles=`, `lut3d=`, and `drawtext fontfile=`, and the lists read by the `concat` demuxer, read a file by name from the working directory. Provide those through `inputs` so they're staged before the command runs.

Check warning on line 97 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L97

Did you really mean 'demuxer'?

This burns a subtitle track that lives only in the request, with no file to host:

Expand All @@ -115,8 +118,8 @@
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `type` | string | yes | - | `"ffmpeg"` |
| `inputs` | object | yes | - | Working directory for the command. Maps a filename to a source (URL, `{url}`, `{content}`, or `{ref}`). `{}` when every input is an inline `-i` URL. See [Input sources](#input-sources) |
| `inputs` | object | yes | - | Working directory for the command. Maps a filename to a source (URL, `{url}`, or `{content}`; an uploaded asset's content URL is just a URL). `{}` when every input is an inline `-i` URL. See [Input sources](#input-sources) |
| `params.command` | string | yes | - | Real FFmpeg command starting with `ffmpeg`. Input URLs go in `-i` positions |

Check warning on line 122 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L122

Did you really mean 'FFmpeg'?
| `params.outputFormat` | string | no | inferred | Override container format. Inferred from trailing filename if omitted |
| `params.timeout` | int | no | `120` | Server-side max execution in seconds. Range 1–900 |

Expand All @@ -140,13 +143,13 @@
|---|---|
| `-i` | Input file |
| `-f` | Force format |
| `-c:v`, `-c:a` | Video / audio codec (stream specifiers like `-c:v:0` work) |

Check warning on line 146 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L146

Did you really mean 'codec'?
| `-vf`, `-af` | Video / audio filter |
| `-filter_complex` | Complex filter graph |
| `-map` | Stream mapping |
| `-ss`, `-t` | Seek position, duration |
| `-r`, `-s` | Frame rate, resolution |
| `-b:v`, `-b:a` | Video / audio bitrate |

Check warning on line 152 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L152

Did you really mean 'bitrate'?
| `-crf`, `-preset` | Quality + preset |
| `-an`, `-vn` | Disable audio / video |
| `-y` | Overwrite output |
Expand All @@ -158,14 +161,14 @@

Every command is validated before it runs, then executed in an isolated, network-restricted sandbox.

- **Flag allowlist.** Only known-safe flags pass. Anything unrecognised is rejected with `VALIDATION_ERROR` before dispatch.

Check warning on line 164 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L164

Did you really mean 'allowlist'?
- **No reads through filters.** Filters and formats that read from disk, fetch over the network, or run external code are blocked.
- **Path containment.** Inputs are limited to the files you provide. Path traversal and access to system paths are rejected.
- **Sandboxed execution.** Each job runs in an isolated container with a clean environment, restricted I/O, and no ambient network access.

Check warning on line 167 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L167

Did you really mean 'Sandboxed'?

## Cost & timeout

Priced per compute second from your [credit balance](/concepts/credits), the wall-clock time FFmpeg ran, excluding file transfer. Typical cost ~$0.05/min.

Check warning on line 171 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L171

Did you really mean 'FFmpeg'?

Plan timeouts: 5 min (Free), 15 min (Pro). See [plan limits](/support/limits) for the full table. Exceeding the timeout returns `PROVIDER_TIMEOUT`; no credits charged.

Expand Down Expand Up @@ -223,9 +226,9 @@

The filenames your command writes define the output. You get back every file it produced.

Every completed job, FFmpeg or otherwise, returns the same `output` shape. [Job output](/concepts/job-output) documents it in full. The short version:

Check warning on line 229 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L229

Did you really mean 'FFmpeg'?

- `output.data`: the computed answer (a probe result, a transcript). `null` for FFmpeg jobs, which only write files.

Check warning on line 231 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L231

Did you really mean 'FFmpeg'?
- `output.file`: the headline result you play or download, one file or a stream manifest. `null` for pure file sets.
- `output.files`: every file the job produced, the complete list.
- `output.expiresAt`: Unix ms when the URLs expire, present when `files` is non-empty.
Expand Down Expand Up @@ -326,7 +329,7 @@

## Error handling

A failed job carries an `error` object with `code`, `message`, `detail`, and `retryable`. When FFmpeg exits non-zero, `error.detail` holds the last ~2 KB of the real stderr. Fetch the job to see exactly why FFmpeg stopped.

Check warning on line 332 in guides/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

guides/ffmpeg.mdx#L332

Did you really mean 'FFmpeg'?

```json
{
Expand Down
4 changes: 2 additions & 2 deletions job-types/ffmpeg.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "FFmpeg reference"

Check warning on line 2 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L2

Did you really mean 'FFmpeg'?
sidebarTitle: "FFmpeg"
description: "Execute a custom FFmpeg command via API with ~120 whitelisted flags, sandboxed execution, and signed output URL. Live on all plans, ~$0.05/min."

Check warning on line 4 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L4

Did you really mean 'FFmpeg'?

Check warning on line 4 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L4

Did you really mean 'sandboxed'?
icon: "terminal"
tag: "Live"
keywords: ["ffmpeg api reference", "ffmpeg cloud", "ffmpeg sandboxed", "ffmpeg rest api", "ffmpeg command api"]
Expand All @@ -14,7 +14,7 @@
"@context": "https://schema.org",
"@type": "TechArticle",
"@id": "https://rendobar.com/docs/job-types/ffmpeg/#article",
"headline": "FFmpeg reference",

Check warning on line 17 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L17

Did you really mean 'FFmpeg'?
"description": "Execute a custom FFmpeg command with whitelisted flags, sandboxed execution, and signed output URL. Live on all plans.",
"datePublished": "2026-03-20",
"dateModified": "2026-05-24",
Expand All @@ -29,7 +29,7 @@
**Live.** Production-ready, available on all plans.
</Check>

Execute a custom FFmpeg command with whitelisted flags. The `inputs` map stages source files into the working directory by name. The command references them by bare name, and inline `-i` URLs also work.

Check warning on line 32 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L32

Did you really mean 'FFmpeg'?

<Info>
**Timeout:** 900 s max (plan-capped) · **Accepts:** video, audio, image
Expand Down Expand Up @@ -100,10 +100,10 @@
`{ "url": "https://..." }`. Remote file, explicit form.
</ResponseField>
<ResponseField name="content" type="object">
`{ "content": "...text..." }`. Inline text staged verbatim, up to 64 KB. For subtitles, `concat` lists, and LUTs with nothing to host.

Check warning on line 103 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L103

Did you really mean 'LUTs'?
</ResponseField>
<ResponseField name="ref" type="object">
`{ "ref": "asset_abc123" }`. A file you already uploaded, by its asset ID (returned by the uploads endpoint).
<ResponseField name="uploaded file" type="string">
A file you already uploaded is referenced by its content URL: the `url` returned by the uploads endpoint, like `https://api.rendobar.com/assets/asset_abc123/content`. Pass it like any other URL string.
</ResponseField>
</Expandable>

Expand All @@ -111,7 +111,7 @@
</ParamField>

<ParamField body="command" type="string" required>
Real FFmpeg command starting with `ffmpeg`. Input URLs go in `-i` positions, or reference staged `inputs` files by name.

Check warning on line 114 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L114

Did you really mean 'FFmpeg'?
</ParamField>

<ParamField body="outputFormat" type="enum" default="inferred">
Expand All @@ -130,7 +130,7 @@

Poll `GET /jobs/{id}` until `status: "complete"`. On success the job carries an `output` object. On failure it carries an `error` object. The filenames your command writes define the output.

`output` is one shape for every job type, documented in full on [Job output](/concepts/job-output). FFmpeg jobs set `output.data` to `null` and return their files in `output.file` and `output.files`. Read `output.file.url` for the file to play or download, and `output.files` for the full list.

Check warning on line 133 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L133

Did you really mean 'FFmpeg'?

<ResponseField name="error" type="object">
Present when `status` is `failed`.
Expand Down Expand Up @@ -166,4 +166,4 @@
- [CLI overview](/cli/overview): the same job from your terminal with `rb ffmpeg`
- [Credits and billing](/concepts/credits): per-compute-second pricing detail
- [Plan limits](/support/limits): file-size caps, timeouts, and concurrency per plan
- [FFmpeg in the cloud](https://rendobar.com/ffmpeg/): every operation Rendobar supports

Check warning on line 169 in job-types/ffmpeg.mdx

View check run for this annotation

Mintlify / Mintlify Validation (rendobar) - vale-spellcheck

job-types/ffmpeg.mdx#L169

Did you really mean 'Rendobar'?
Loading