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.
| Option | What it costs you | Verdict |
|---|---|---|
| Empaquetar ffmpeg dentro de tu función de AWS Lambda | Solo cabe mediante un layer que tú mismo empaquetas, sufres el cold start y ajustas | |
| Autoalojar un contenedor o una VM | Costo permanente, más parcheo, escalado y monitoreo | |
| Montar una cola de trabajos + worker | Infraestructura 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 Fotovid | Una sola solicitud HTTPS; nada que ejecutar, empaquetar ni escalar |
Tu primera llamada en tres pasos
- 1Consigue 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).
- 2Enví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.
- 3Usa 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.
