ffmpeg en AWS Lambda

ffmpeg en AWS Lambda sin cargar con la Lambda

Lambda puede ejecutar ffmpeg, pero heredas el empaquetado, los cold starts y el mantenimiento. Fotovid te quita las tres cosas de encima: envías una solicitud, recibes un archivo alojado y te saltas la compilación del layer.

// handler.mjs — Node 18+ runtime (global fetch)
export const handler = async (event) => {
  const { videoUrl, logoUrl } = JSON.parse(event.body);

  const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.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 { statusCode: 200, body: JSON.stringify({ url }) };
};

Solo querías ponerle una marca de agua a un archivo subido

Sí, Lambda puede ejecutar ffmpeg. Construyes un layer por debajo del límite de 250MB sin comprimir, configuras /tmp como espacio temporal (hasta 10GB) y te mantienes dentro del tope de 15 minutos. Ahí empieza el trabajo real: fijar una compilación estática de ffmpeg, ajustar la memoria para que una codificación en 1080p no falle por timeout, absorber los cold starts en la primera solicitud, y hacerte cargo de todo eso para siempre. Es mucha infraestructura para levantar solo para estampar un logo en un video.

  • Empaquetar y versionar un binario estático de ffmpeg como layer, por debajo del límite de 250MB sin comprimir
  • Ajustar memoria y timeout por operación para que las codificaciones no fallen al chocar con el límite de 15 minutos
  • Absorber la latencia de los cold starts justo en la solicitud que un usuario está esperando
  • Mantener, parchear y monitorear una Lambda con ffmpeg que nunca quisiste tener que gestionar

Formas en que los equipos intentan ejecutar ffmpeg en AWS Lambda

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

OptionWhat it costs youVerdict
Empaquetar ffmpeg dentro de tu función de AWS LambdaSolo cabe mediante un layer que tú mismo empaquetas, sufres el cold start y ajustas
Autoalojar un contenedor o una VMCosto permanente, más parcheo, 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 móviles
Llamar a la API de FotovidUna sola solicitud HTTPS; nada que ejecutar, empaquetar ni escalar
How it works

Tu primera llamada en tres pasos

  1. 1
    Consigue una clave de API gratis

    Crea una clave de Fotovid para obtener un token con el formato p6_<key_id>:<secret>. Envíalo como encabezado Authorization: Bearer en cada solicitud. Sin rol de AWS, sin layer, sin pipeline de build: el uso funciona con credits ($1 = 100 credits, la mayoría de las operaciones cuestan 1 credit).

  2. 2
    Envía tu video por POST a /v1/video/watermark

    Llama a POST https://api.fotovid.co/v1/video/watermark con la estructura estándar de solicitud: un source_url que apunta a tu archivo de entrada por HTTPS, más un objeto params. Para una marca de agua, define type (image, text o combo), el watermark_image_url o text, una position como bottom-right y, opcionalmente, opacity, scale y padding. Fotovid descarga la fuente, ejecuta ffmpeg y responde de forma síncrona: sin cola que consultar, sin Lambda que mantener caliente.

  3. 3
    Usa la URL del resultado alojado

    La respuesta es un JSON plano: un id, type y una url que apunta al archivo terminado y alojado en Fotovid (más expires_at y, para video, duration). Pasa esa URL directo a tu frontend o descárgala para guardar tu propia copia. El mismo flujo funciona para /v1/video/trim, /v1/video/extract-audio, /v1/video/extract-cover, /v1/video/probe y los endpoints de imagen y audio.

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.