Início rápido
Rode sua primeira tarefa FFmpeg no FFHub em 3 minutos.
Este guia te leva pela primeira chamada à API: pegar a chave, enviar uma tarefa de transcodificação e ler o resultado.
1. Pegue uma API Key
Cadastre-se em ffhub.io e crie uma chave em dashboard/api-keys. A chave tem o formato sk_xxxxx — guarde em segredo.
Você ganha créditos grátis ao se cadastrar, então o passo a passo abaixo sai de graça.
2. Envie uma tarefa
Mande qualquer comando FFmpeg para POST /v1/tasks. As entradas precisam ser URLs públicas — caminhos locais são rejeitados pelo worker.
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"]
A resposta traz um task_id que você usa pra consultar o status:
{
"task_id": "01abcd…",
"status": "pending",
"created_at": "2026-05-10T12:00:00Z"
}
3. Consulte até concluir
curl https://api.ffhub.io/v1/tasks/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
Consulte a cada 2–5 segundos. Quando status virar completed, vem a URL pública pra download:
{
"task_id": "01abcd…",
"status": "completed",
"progress": 100,
"outputs": [
{
"filename": "output.mp4",
"url": "https://storage.ffhub.io/outputs/01abcd…/output.mp4",
"size": 10485760
}
]
}
URLs de saída expiram em 24 horas — baixe o que quiser guardar.
Subir arquivos locais
Se sua entrada ainda não é uma URL pública, faz upload antes pra pegar uma. Dois passos:
# 1. Peça uma URL PUT assinada de uso único
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. PUT o arquivo direto no R2 — seu servidor nunca vê os bytes
curl -X PUT "$(echo "$SIGNED" | jq -r '.upload_url')" \
-H "Content-Type: video/mp4" \
--data-binary "@./input.mp4"
# O campo .public_url é o que você passa em `-i` no comando da tarefa.
Passo a passo completo em Upload de arquivos.
Próximos passos
- CLI — rode FFmpeg do terminal, arquivos locais sobem automaticamente
- Integração n8n — fluxos visuais
- Skill do Claude Code — chama FFHub do Claude Code
- Spec OpenAPI — cada endpoint, cada parâmetro