Schnellstart
Dein erster FFmpeg-Job auf FFHub in 3 Minuten.
Diese Anleitung führt dich durch den ersten API-Call: API-Key holen, Transkodierungs-Job einreichen und Ergebnis abholen.
1. API-Key holen
Auf ffhub.io registrieren und unter Dashboard / API Keys einen Key erstellen. Format: sk_xxxxx — geheim halten.
Bei der Registrierung gibt's kostenloses Guthaben, die Schritte hier kosten dich also nichts.
2. Job einreichen
Beliebiger FFmpeg-Befehl an POST /v1/tasks. Eingaben müssen öffentliche URLs sein — lokale Pfade lehnt der Cloud-Worker ab.
curl -X POST https://api.ffhub.io/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"command": "ffmpeg -i https://storage.ffhub.io/Sample_Video_File_100MB.mp4 -c:v libx264 -preset fast output.mp4"
}'
const res = await fetch("https://api.ffhub.io/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FFHUB_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
command:
"ffmpeg -i https://storage.ffhub.io/Sample_Video_File_100MB.mp4 -c:v libx264 -preset fast output.mp4",
}),
});
const { task_id } = await res.json();
import os, requests
res = requests.post(
"https://api.ffhub.io/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['FFHUB_API_KEY']}"},
json={
"command": "ffmpeg -i https://storage.ffhub.io/Sample_Video_File_100MB.mp4 -c:v libx264 -preset fast output.mp4",
},
)
task_id = res.json()["task_id"]
Die Antwort enthält eine task_id, mit der du den Status abfragst:
{
"task_id": "01abcd…",
"status": "pending",
"created_at": "2026-05-10T12:00:00Z"
}
3. Bis zum Abschluss pollen
curl https://api.ffhub.io/v1/tasks/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
Alle 2–5 Sekunden abfragen. Sobald status auf completed springt, enthält die Antwort eine öffentliche Download-URL:
{
"task_id": "01abcd…",
"status": "completed",
"progress": 100,
"outputs": [
{
"filename": "output.mp4",
"url": "https://storage.ffhub.io/outputs/01abcd…/output.mp4",
"size": 10485760
}
]
}
Output-URLs verfallen nach 24 Stunden — was du behalten willst, vorher herunterladen.
Lokale Dateien hochladen
Wenn deine Eingabe noch keine öffentliche URL ist, lad sie zuerst hoch, um eine zu bekommen. Zwei Schritte:
# 1. Eine einmalige signierte PUT-URL anfordern
SIGNED=$(curl -s -X POST https://api.ffhub.io/v1/uploads/sign \
-H "Authorization: Bearer $FFHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename":"input.mp4","size":12345678,"content_type":"video/mp4"}')
# 2. Datei direkt per PUT nach R2 — dein Server sieht die Bytes nie
curl -X PUT "$(echo "$SIGNED" | jq -r '.upload_url')" \
-H "Content-Type: video/mp4" \
--data-binary "@./input.mp4"
# Das Feld .public_url ist das, was du im Task-Befehl an `-i` übergibst.
Komplette Anleitung in Dateien hochladen.
Wie es weitergeht
- CLI — FFmpeg vom Terminal aus, lokale Dateien werden automatisch hochgeladen
- n8n-Integration — visuelle Workflows
- Claude-Code-Skill — FFHub aus Claude Code aufrufen
- OpenAPI-Spec — alle Endpunkte, alle Parameter