ffmpeg sur AWS Lambda

ffmpeg sur AWS Lambda, sans avoir à gérer la Lambda

Lambda peut faire tourner ffmpeg — mais tu hérites du packaging, des cold starts et de l'exploitation. Fotovid t'enlève ces trois soucis : tu envoies une requête, tu récupères un fichier hébergé, tu oublies les layers.

// 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 }) };
};

Tu voulais juste ajouter un filigrane à un upload

Oui, Lambda peut faire tourner ffmpeg. Tu construis un layer sous la limite de 250 MB une fois décompressé, tu configures /tmp comme espace de travail temporaire (jusqu'à 10 GB), et tu restes sous le plafond de 15 minutes. Ensuite le vrai travail commence : figer une version statique de ffmpeg, ajuster la mémoire pour qu'un encodage 1080p ne dépasse pas le timeout, encaisser les cold starts dès la première requête, et gérer tout ça pour toujours. C'est beaucoup d'infrastructure à mettre en place juste pour poser un logo sur une vidéo.

  • Empaqueter et versionner un binaire ffmpeg statique en tant que layer, sous la limite de 250 MB une fois décompressé
  • Ajuster la mémoire et le timeout par opération pour que les encodages ne butent pas contre la limite des 15 minutes
  • Absorber la latence du cold start pile sur la requête que l'utilisateur est en train d'attendre
  • Maintenir, patcher et surveiller une Lambda ffmpeg que tu n'as jamais voulu gérer

Comment les équipes essaient de faire tourner ffmpeg sur AWS Lambda

Avant Fotovid, c'étaient les options — et chacune est un travail que tu préférerais ne pas avoir à gérer.

OptionWhat it costs youVerdict
Intégrer ffmpeg dans ta fonction AWS LambdaNe tient qu'en layer que tu empaquettes, dont tu subis le cold start et que tu ajustes toi-même
Héberger toi-même un container ou une VMCoût permanent, plus patchs, scaling et surveillance
Faire tourner une queue de jobs + un workerNouvelle infra : une queue, des workers, des retries, la gestion des dead-letter
Transcoder dans le navigateur (WASM)Lent, gourmand en mémoire, et plante sur mobile
Appeler l'API FotovidUne seule requête HTTPS ; rien à faire tourner, empaqueter ou scaler
How it works

Ton premier appel en trois étapes

  1. 1
    Récupère une clé API gratuite

    Crée une clé Fotovid pour obtenir un token au format p6_<key_id>:<secret>. Envoie-le dans un header Authorization: Bearer à chaque requête. Pas de rôle AWS, pas de layer, pas de pipeline de build — l'usage fonctionne avec des credits ($1 = 100 credits, la plupart des opérations coûtent 1 credit).

  2. 2
    Envoie ta vidéo en POST vers /v1/video/watermark

    Appelle POST https://api.fotovid.co/v1/video/watermark avec l'enveloppe standard : une source_url qui pointe vers ton fichier source en HTTPS, plus un objet params. Pour un filigrane, définis type (image, text ou combo), la watermark_image_url ou le text, une position comme bottom-right, et en option opacity, scale et padding. Fotovid récupère la source, exécute ffmpeg, et répond de façon synchrone — pas de queue à interroger, pas de Lambda à garder chaude.

  3. 3
    Utilise l'URL du résultat hébergé

    La réponse est un JSON plat : un id, un type, et une url qui pointe vers le fichier final hébergé par Fotovid (plus expires_at et, pour la vidéo, duration). Passe cette URL directement à ton frontend, ou télécharge-la pour en garder ta propre copie. Le même flux fonctionne pour /v1/video/trim, /v1/video/extract-audio, /v1/video/extract-cover, /v1/video/probe, ainsi que les endpoints image et audio.

Questions fréquentes

Déploie-le avec un seul appel API

Récupère une clé gratuite et fais ton premier appel en moins de cinq minutes.