Pourquoi ffmpeg ne peut pas tourner sur Deno Deploy ? Pas de sous-processus — alors appelle l'API.
Deno Deploy exécute ton code dans des isolates V8 sans sous-processus ni FFI, donc le binaire ffmpeg ne peut pas démarrer. Appelle plutôt Fotovid via fetch() : l'encodage tourne ailleurs et tu récupères en réponse un simple lien https vers le fichier.
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 });
});Le modèle isolate empêche purement et simplement ffmpeg de tourner
Deno Deploy repose sur des isolates V8 conçus pour de la logique edge rapide, pas pour de l'encodage média gourmand en CPU. Il n'y a ni API de sous-processus pour lancer un binaire natif, ni FFI pour en charger un, donc le processus ffmpeg ne démarre jamais. Ce n'est pas un flag de config ou une permission à accorder : les primitives dont ffmpeg a besoin n'existent tout simplement pas dans le sandbox de l'isolate. Des portages WebAssembly de ffmpeg existent, mais ils dépassent largement les limites de CPU et de mémoire des isolates sur toute vidéo réelle, et ne peuvent pas faire transiter un gros fichier en streaming.
- Pas de sous-processus : Deno.Command et child_process ne peuvent pas lancer le binaire ffmpeg dans un isolate.
- Pas de FFI : impossible de faire un dlopen sur une bibliothèque ffmpeg native et de l'appeler directement.
- ffmpeg en Wasm épuise le CPU/la mémoire de l'isolate sur de vraies vidéos et ne peut pas streamer de gros fichiers en entrée.
- La plateforme est calibrée pour des requêtes edge courtes, pas pour des jobs d'encodage de plusieurs secondes.
Comment les équipes essaient de faire tourner ffmpeg sur Deno Deploy
Avant Fotovid, c'étaient les seules options — et chacune est un travail dont tu te passerais bien.
| Option | What it costs you | Verdict |
|---|---|---|
| Embarquer ffmpeg dans ta fonction Deno Deploy | Pas de sous-processus pour lancer le binaire ffmpeg | |
| Héberger toi-même un conteneur ou une VM | Coût permanent, plus les correctifs, le scaling et le monitoring | |
| Faire tourner une file de jobs + un worker | Nouvelle infra : une queue, des workers, les retries, la gestion des dead-letters | |
| 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, packager ou scaler |
Ton premier appel en trois étapes
- 1Récupère une clé API gratuite
Inscris-toi et crée une clé — pas de carte bancaire nécessaire pour démarrer. Tu obtiens un key ID et un secret qui se combinent en un token Bearer de la forme p6_<key_id>:<secret>. Stocke-le dans une variable d'environnement Deno Deploy pour que ton isolate puisse s'authentifier sans embarquer le moindre binaire.
- 2Envoie un POST vers l'endpoint watermark
Depuis ton handler Deno, fais un fetch classique en POST vers https://api.fotovid.co/v1/video/watermark avec ton token Bearer. Envoie l'enveloppe standard : un source_url pointant vers l'URL HTTPS de ta vidéo source, plus un objet params décrivant le watermark — type (image, text ou combo), le watermark_image_url ou text, la position comme bottom-right, l'opacity et le scale. Fotovid récupère la source, exécute ffmpeg sur sa propre infrastructure, et répond avant que ton isolate n'atteigne son timeout.
- 3Utilise l'URL renvoyée
La réponse est un JSON plat : un id, un type, et une url pointant vers la vidéo finalisée hébergée par Fotovid, plus expires_at et duration. Transmets cette url directement à ton client, ou récupère-la côté serveur pour en garder ta propre copie dans le bucket que tu utilises déjà. La plupart des opérations coûtent 1 credit, donc un appel watermark ne débite qu'un seul credit de ton solde.
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.
