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.
| Option | What it costs you | Verdict |
|---|---|---|
| Intégrer ffmpeg dans ta fonction AWS Lambda | Ne 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 VM | Coût permanent, plus patchs, scaling et surveillance | |
| Faire tourner une queue de jobs + un worker | Nouvelle 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 Fotovid | Une seule requête HTTPS ; rien à faire tourner, empaqueter ou scaler |
Ton premier appel en trois étapes
- 1Ré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).
- 2Envoie 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.
- 3Utilise 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.
