Cloud FFmpeg API
Run FFmpeg commands via API
Xora lets you run any FFmpeg command in the cloud. Replace local command-line dependencies with a simple HTTP request, apply pre-configured recipes, and write outputs directly to your own storage.
Submit Input
Point Xora at any source video URL (S3, Cloudflare R2, GCP Buckets, or HTTP links). No files to upload manually.
Configure & Process
Apply pre-configured recipes or supply custom FFmpeg parameters. Xora runs your commands in a high-performance cloud environment.
Receive Hook
Get instantly notified via webhook when finished. Outputs are saved to your own cloud storage bucket.
Platform Capabilities
Developer-first video infrastructure
A single scalable API that completely replaces complex FFmpeg script servers, task queues, and storage integrations.
BYOB Bucket Storage
Directly route transcoded outputs to your S3, Google Cloud Storage, or Cloudflare R2 bucket. Xora handles signed URL access, credential isolation, and secure handshakes automatically.
Transcoding Presets
Create reusable output templates via the dashboard. Trigger complex compression parameters, codec selections, and resolution matrices with a single preset ID.
Custom FFmpeg Flags
Full parameter override. Pass raw encoding arguments directly inside the API payload to target custom filters, codecs, frame-rates, and complex media pipelines.
Concurrently Scalable Pipelines
Process dozens of media files simultaneously. Xora scales machine provisioning and queue priorities automatically, ensuring your applications never wait for a processing slot.
Simple Integration
Fits directly into your codebase
Build video pipelines using native client requests. Select your language of choice, grab the snippet, and issue request triggers from your application backend.
curl -X POST https://api.xora.sh/v1/jobs \
-H "Authorization: Bearer rmux_live_k8a9f..." \
-H "Content-Type: application/json" \
-d '{
"mode": "ffmpeg",
"input_files": { "in_1": "s3://bucket/raw.mov" },
"output_files": { "out_1": "output.mp4" },
"ffmpeg": {
"args": ["-i", "{{in_1}}", "-vf", "scale=1280:720", "-c:v", "libx264", "-crf", "23", "{{out_1}}"]
}
}' const response = await fetch('https://api.xora.sh/v1/jobs', {
method: 'POST',
headers: {
'Authorization': 'Bearer rmux_live_k8a9f...',
'Content-Type': 'application/json'
},
body: JSON.stringify({
mode: 'ffmpeg',
input_files: { in_1: 's3://bucket/raw.mov' },
output_files: { out_1: 'output.mp4' },
ffmpeg: {
args: ['-i', '{{in_1}}', '-vf', 'scale=1280:720', '-c:v', 'libx264', '-crf', 23, '{{out_1}}']
}
})
});
const data = await response.json(); import requests
response = requests.post(
"https://api.xora.sh/v1/jobs",
headers={
"Authorization": "Bearer rmux_live_k8a9f...",
"Content-Type": "application/json"
},
json={
"mode": "ffmpeg",
"input_files": { "in_1": "s3://bucket/raw.mov" },
"output_files": { "out_1": "output.mp4" },
"ffmpeg": {
"args": ["-i", "{{in_1}}", "-vf", "scale=1280:720", "-c:v", "libx264", "-crf", "23", "{{out_1}}"]
}
}
)
job = response.json() package main
import (
"bytes"
"net/http"
)
func main() {
jsonPayload := []byte(`{"mode":"ffmpeg","input_files":{"in_1":"s3://bucket/raw.mov"},"output_files":{"out_1":"output.mp4"},"ffmpeg":{"args":["-i","{{in_1}}","-vf","scale=1280:720","-c:v","libx264","-crf","23","{{out_1}}"]}}`)
req, _ := http.NewRequest("POST", "https://api.xora.sh/v1/jobs", bytes.NewBuffer(jsonPayload))
req.Header.Set("Authorization", "Bearer rmux_live_k8a9f...")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
} use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION, CONTENT_TYPE};
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let mut headers = HeaderMap::new();
headers.insert(AUTHORIZATION, HeaderValue::from_static("Bearer rmux_live_k8a9f..."));
headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
let client = reqwest::Client::new();
let res = client.post("https://api.xora.sh/v1/jobs")
.headers(headers)
.json(&json!({
"mode": "ffmpeg",
"input_files": { "in_1": "s3://bucket/raw.mov" },
"output_files": { "out_1": "output.mp4" },
"ffmpeg": {
"args": ["-i", "{{in_1}}", "-vf", "scale=1280:720", "-c:v", "libx264", "-crf", "23", "{{out_1}}"]
}
}))
.send()
.await?;
Ok(())
} Comprehensive support
Supported codecs and formats
Covering standard container wraps, audio streams, and web image outputs.
Ready to offload your video processing infrastructure?
Get started with free trial minutes. Set up API credentials in seconds and begin delivering optimised assets directly to your buckets.