Api referenceCommands
Run Multiple Commands
Submit up to 10 independent FFmpeg commands that execute in parallel. Returns an array of command IDs.
Run Multiple Commands
POST /api/v1/run-multiple-ffmpeg-commandsSubmit multiple independent FFmpeg commands that execute in parallel. Each command runs in its own sandbox with its own input and output files. This is useful for batch processing -- for example, generating multiple renditions of the same source, or processing unrelated files at once.
Authentication
Requires API key via X-API-KEY header.
Request
Headers
| Header | Type | Required | Description |
|---|---|---|---|
Content-Type | string | Yes | Must be application/json |
X-API-KEY | string | Yes | Your API key with ffsk_ prefix |
Body
interface RunMultipleCommandsRequest {
commands: RunFFmpegCommandRequest[]; // Max 10 commands, executed in parallel
}Each element in the commands array follows the same shape as the Run FFmpeg Command request body:
interface RunFFmpegCommandRequest {
input_files: Record<string, string>;
output_files: Record<string, string>;
ffmpeg_command: string;
metadata?: Record<string, string | number | boolean>;
webhook_url?: string;
}| Field | Type | Required | Description |
|---|---|---|---|
commands | RunFFmpegCommandRequest[] | Yes | Array of command objects to execute in parallel. Maximum 10 commands. |
Response
200 OK
{
command_ids: string[];
}| Field | Type | Description |
|---|---|---|
command_ids | string[] | Array of unique identifiers, one per submitted command, in the same order as the input array. |
Error responses
| Status | Error | Description |
|---|---|---|
400 | INVALID_REQUEST | Missing required fields, invalid aliases, or malformed FFmpeg commands. |
401 | UNAUTHORIZED | Missing or invalid API key. |
422 | VALIDATION_ERROR | Validation failed (e.g., more than 10 commands, invalid command structure). |
429 | RATE_LIMITED | Too many requests. Retry after the period indicated in the Retry-After header. |
Examples
curl -X POST https://renderio.dev/api/v1/run-multiple-ffmpeg-commands \
-H "Content-Type: application/json" \
-H "X-API-KEY: ffsk_your_api_key_here" \
-d '{
"commands": [
{
"input_files": { "in_video": "https://example.com/sample.mp4" },
"output_files": { "out_video": "720p.mp4" },
"ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}"
},
{
"input_files": { "in_video": "https://example.com/sample.mp4" },
"output_files": { "out_video": "480p.mp4" },
"ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}"
},
{
"input_files": { "in_video": "https://example.com/sample.mp4" },
"output_files": { "out_thumb": "thumbnail.jpg" },
"ffmpeg_command": "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}"
}
]
}'import requests
response = requests.post(
"https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
headers={
"Content-Type": "application/json",
"X-API-KEY": "ffsk_your_api_key_here",
},
json={
"commands": [
{
"input_files": {"in_video": "https://example.com/sample.mp4"},
"output_files": {"out_video": "720p.mp4"},
"ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
},
{
"input_files": {"in_video": "https://example.com/sample.mp4"},
"output_files": {"out_video": "480p.mp4"},
"ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
},
{
"input_files": {"in_video": "https://example.com/sample.mp4"},
"output_files": {"out_thumb": "thumbnail.jpg"},
"ffmpeg_command": "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
},
],
},
)
data = response.json()
print("Command IDs:", data["command_ids"])interface RunCommandRequest {
input_files: Record<string, string>;
output_files: Record<string, string>;
ffmpeg_command: string;
}
interface MultipleCommandsResponse {
command_ids: string[];
}
const commands: RunCommandRequest[] = [
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_video: "720p.mp4" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
},
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_video: "480p.mp4" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
},
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_thumb: "thumbnail.jpg" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
},
];
const response = await fetch(
"https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "ffsk_your_api_key_here",
},
body: JSON.stringify({ commands }),
},
);
const { command_ids } = (await response.json()) as MultipleCommandsResponse;
console.log("Command IDs:", command_ids);const response = await fetch(
"https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "ffsk_your_api_key_here",
},
body: JSON.stringify({
commands: [
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_video: "720p.mp4" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
},
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_video: "480p.mp4" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
},
{
input_files: { in_video: "https://example.com/sample.mp4" },
output_files: { out_thumb: "thumbnail.jpg" },
ffmpeg_command:
"ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
},
],
}),
},
);
const { command_ids } = await response.json();
console.log("Command IDs:", command_ids);<?php
$ch = curl_init("https://renderio.dev/api/v1/run-multiple-ffmpeg-commands");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-API-KEY: ffsk_your_api_key_here",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"commands" => [
[
"input_files" => ["in_video" => "https://example.com/sample.mp4"],
"output_files" => ["out_video" => "720p.mp4"],
"ffmpeg_command" => "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
],
[
"input_files" => ["in_video" => "https://example.com/sample.mp4"],
"output_files" => ["out_video" => "480p.mp4"],
"ffmpeg_command" => "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
],
[
"input_files" => ["in_video" => "https://example.com/sample.mp4"],
"output_files" => ["out_thumb" => "thumbnail.jpg"],
"ffmpeg_command" => "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
],
],
]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo "Command IDs: " . implode(", ", $data["command_ids"]) . "\n";