Inicio rápido — Procesa tu primer video en 3 minutos

Ejecuta tu primera tarea de FFmpeg en FFHub en menos de 3 minutos.

Esta guía te lleva paso a paso por tu primera llamada a la API de FFmpeg: obtén una clave API, envía una tarea de transcodificación y lee el resultado.

1. Obtén una clave API

Regístrate en ffhub.io y crea una clave API en el panel. La clave tiene el formato sk_xxxxx — mantenla en privado.

Al registrarte también recibes créditos gratuitos, así que los pasos a continuación no tienen ningún costo.

2. Envía una tarea

Envía cualquier comando de FFmpeg a POST /v1/tasks. Las entradas deben ser URLs públicas — las rutas locales son rechazadas por el worker en la nube.

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"]

La respuesta incluye un task_id que usarás para consultar el estado mediante polling:

{
  "task_id": "01abcd…",
  "status": "pending",
  "created_at": "2026-05-10T12:00:00Z"
}

3. Espera a que termine (polling)

curl https://api.ffhub.io/v1/tasks/TASK_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Consulta cada 2–5 segundos. Cuando status cambie a completed, la respuesta incluye una URL pública para descargar el archivo:

{
  "task_id": "01abcd…",
  "status": "completed",
  "progress": 100,
  "outputs": [
    {
      "filename": "output.mp4",
      "url": "https://storage.ffhub.io/outputs/01abcd…/output.mp4",
      "size": 10485760
    }
  ]
}

Las URLs de salida expiran después de 24 horas — descarga lo que quieras conservar.

Subir archivos locales

Si tu entrada no es una URL pública, primero súbela para obtener una. Son dos pasos:

# 1. Solicita una URL firmada de un solo uso para hacer PUT
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. Sube el archivo directamente a R2 — tu servidor nunca toca los bytes
curl -X PUT "$(echo "$SIGNED" | jq -r '.upload_url')" \
  -H "Content-Type: video/mp4" \
  --data-binary "@./input.mp4"

# El campo .public_url es lo que pasas a `-i` en el comando de la tarea.

Guía completa en Subir archivos.

Próximos pasos

Inicio rápido — Procesa tu primer video en 3 minutos — FFHub Docs