ffmpeg en Deno Deploy

¿Por qué ffmpeg no puede correr en Deno Deploy? Sin subprocess, así que llama a la API.

Deno Deploy ejecuta tu código en isolates de V8 sin subprocess ni FFI, así que el binario de ffmpeg no puede arrancar. Llama a Fotovid con fetch() en su lugar: ejecuta la codificación en otro sitio y responde con un enlace https directo al archivo.

Deno.serve(async (req) => {
  const { videoUrl, logoUrl } = await req.json();

  const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${Deno.env.get("FOTOVID_API_KEY")}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      source_url: videoUrl,
      params: { type: "image", watermark_image_url: logoUrl, position: "bottom-right" },
    }),
  });

  const { url } = await res.json();
  return Response.json({ url });
});

El modelo de isolates no deja correr ffmpeg, y punto.

Deno Deploy está construido sobre isolates de V8 pensados para lógica rápida en el edge, no para codificación de video con alto consumo de CPU. No hay API de subprocess para lanzar un binario nativo ni FFI para cargar uno, así que el proceso de ffmpeg nunca llega a iniciarse. Esto no es una opción de configuración ni un permiso que puedas conceder: los mecanismos que ffmpeg necesita simplemente no existen dentro del sandbox del isolate. Existen versiones de ffmpeg compiladas a WebAssembly, pero superan con creces los límites de CPU y memoria del isolate con cualquier video real, y no pueden transmitir un archivo grande en streaming.

  • Sin subprocess: Deno.Command y child_process no pueden lanzar el binario de ffmpeg dentro de un isolate.
  • Sin FFI: no puedes hacer dlopen de una librería nativa de ffmpeg ni llamarla directamente.
  • El ffmpeg en Wasm agota la CPU y la memoria del isolate con videos reales y no puede transmitir entradas grandes en streaming.
  • La plataforma está optimizada para peticiones cortas en el edge, no para trabajos de codificación de varios segundos.

Formas en que los equipos intentan correr ffmpeg en Deno Deploy

Antes de Fotovid, estas eran las opciones. Cada una es trabajo que preferirías no asumir.

OptionWhat it costs youVerdict
Incluir ffmpeg en tu función de Deno DeployNo hay subprocess para lanzar el binario de ffmpeg
Autoalojar un contenedor o VMCosto permanente más parches, escalado y monitoreo
Montar una cola de trabajos + workerInfraestructura nueva: una cola, workers, reintentos, manejo de dead-letter
Transcodificar en el navegador (WASM)Lento, consume mucha memoria y falla en dispositivos móviles
Llamar a la API de FotovidUna petición HTTPS; nada que correr, empaquetar ni escalar
How it works

Tu primera llamada en tres pasos

  1. 1
    Consigue una API key gratis

    Regístrate y crea una key: no necesitas tarjeta para empezar. Obtienes un key ID y un secret que se combinan en un Bearer token con el formato p6_<key_id>:<secret>. Guárdalo en una variable de entorno de Deno Deploy para que tu isolate se autentique sin necesidad de distribuir ningún binario.

  2. 2
    Haz un POST al endpoint de marca de agua

    Desde tu handler de Deno, haz un fetch normal con POST a https://api.fotovid.co/v1/video/watermark con tu Bearer token. Envía el envelope estándar: un source_url que apunte a la URL HTTPS de tu video de entrada, más un objeto params que describa la marca de agua: type (image, text o combo), el watermark_image_url o text, position como bottom-right, opacity y scale. Fotovid descarga la fuente, ejecuta ffmpeg en su propia infraestructura y responde antes de que tu isolate llegue al timeout.

  3. 3
    Usa la URL devuelta

    La respuesta es JSON plano: un id, un type y una url que apunta al video terminado y alojado por Fotovid, más expires_at y duration. Pasa esa url directamente a tu cliente, o descárgala desde tu servidor y guarda tu propia copia en el bucket que ya uses. La mayoría de las operaciones cuestan 1 credit, así que una llamada de marca de agua es un solo credit contra tu saldo.

Preguntas frecuentes

Lánzalo con una sola llamada a la API

Consigue una key gratis y haz tu primera llamada en menos de cinco minutos.