Appelle ffmpeg sur Cloudflare Workers, ne l'embarque pas.
Les Workers tournent dans un isolate V8 — pas de filesystem, pas de binaires natifs, des limites CPU strictes. Ton Worker envoie une URL à Fotovid via HTTPS ; l'encodage s'exécute hors de l'isolate et revient sous forme de lien hébergé, sans jamais entamer ton budget CPU.
export default {
async fetch(req: Request, env: { FOTOVID_API_KEY: string }): Promise<Response> {
const { videoUrl, logoUrl } = await req.json();
const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
method: "POST",
headers: {
Authorization: `Bearer ${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 Response.json({ url });
},
};Pourquoi ton Worker cale sur ffmpeg
Cloudflare Workers ne tournent pas dans un conteneur, mais dans un isolate V8. Il n'y a pas de filesystem pour écrire des fichiers temporaires, aucun moyen de lancer un binaire natif via un shell, et des limites de temps CPU strictes par requête. Le binaire ffmpeg ne peut tout simplement pas exister là-dedans. Le build WASM se charge techniquement, mais il est bridé par le budget mémoire et CPU de l'isolate et plante dès qu'on dépasse un clip minuscule. Une API hébergée est le seul chemin réaliste.
- Pas de filesystem : ffmpeg a besoin de fichiers temporaires pour lire l'entrée et écrire la sortie — les Workers n'en fournissent aucun.
- Pas de binaires natifs : impossible d'installer ou d'exécuter le binaire ffmpeg dans un isolate V8.
- ffmpeg en WASM se charge, mais reste plafonné par les limites de mémoire et de CPU de l'isolate — il se bloque ou expire sur une vraie vidéo.
- Le budget CPU strict par requête rend irréalisable toute tâche aussi longue qu'un transcodage.
Comment les équipes essaient de faire tourner ffmpeg sur Cloudflare Workers
Avant Fotovid, c'était les options — et chacune est un boulet que tu préférerais ne pas te traîner.
| Option | What it costs you | Verdict |
|---|---|---|
| Embarquer ffmpeg dans ta fonction Cloudflare Workers | Les Workers ne peuvent exécuter aucun binaire natif | |
| Auto-héberger un conteneur ou une VM | Coût permanent, plus patchs, scaling et supervision | |
| Faire tourner une file d'attente + un worker | Nouvelle infra : une queue, des workers, des 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é. Tu obtiens un token Authorization: Bearer p6_<key_id>:<secret> qui authentifie chaque appel vers https://api.fotovid.co. Aucune infrastructure, aucun build ffmpeg — juste un header.
- 2Envoie ta vidéo en POST depuis le Worker
Appelle POST /v1/video/watermark avec l'enveloppe standard : une source_url pointant vers l'URL HTTPS de ta vidéo d'entrée, et un objet params — définis type sur image, text ou combo, plus position (par ex. bottom-right), opacity et scale. C'est un simple fetch depuis ton Worker, donc ça s'intègre parfaitement au modèle de requête de l'isolate.
- 3Utilise l'URL hébergée du résultat
Fotovid renvoie un JSON plat : { id, type, url, expires_at, duration }. L'url pointe vers ta vidéo finie, avec filigrane, hébergée par Fotovid. Transmets-la directement à ton client, ou copie-la dans ton propre bucket pour en garder une copie permanente — le résultat hébergé est temporaire.
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.
