Esegui ffmpeg su Cloudflare Workers chiamandolo, non incorporandolo nel bundle.
I Workers girano in un V8 isolate — niente filesystem, niente binari nativi, limiti di CPU rigidi. Il tuo Worker invia a Fotovid un URL via HTTPS; la codifica viene eseguita fuori dall'isolate e torna come link ospitato, così non consuma mai il tuo budget di 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 });
},
};Perché ffmpeg manda in crisi il tuo Worker
Cloudflare Workers non girano in un container — girano dentro un V8 isolate. Non c'è un filesystem su cui scrivere file temporanei, nessun modo di lanciare un binario nativo, e limiti rigidi di tempo CPU per richiesta. Il binario ffmpeg semplicemente non può esistere lì. La build WASM tecnicamente si carica, ma viene limitata dal budget di memoria e CPU dell'isolate e si blocca su qualsiasi cosa oltre una clip banale. Un'API ospitata è l'unica strada realistica.
- Niente filesystem: ffmpeg ha bisogno di file temporanei per leggere l'input e scrivere l'output — i Workers non te ne danno nessuno.
- Niente binari nativi: non puoi installare o eseguire il binario ffmpeg in un V8 isolate.
- ffmpeg in WASM si carica, ma è limitato dai vincoli di memoria e CPU dell'isolate — si blocca o va in timeout su un video reale.
- Il rigido budget di CPU per richiesta rende impraticabile qualsiasi job di transcodifica.
Come i team provano a far girare ffmpeg su Cloudflare Workers
Prima di Fotovid le opzioni erano queste — ognuna comporta un lavoro che preferiresti evitare.
| Option | What it costs you | Verdict |
|---|---|---|
| Incorporare ffmpeg nel bundle della tua funzione Cloudflare Workers | I Workers non possono eseguire binari nativi in alcun modo | |
| Fare il self-hosting di un container o una VM | Costo continuo, più aggiornamenti, scalabilità e monitoraggio | |
| Gestire una coda di job + worker | Nuova infrastruttura: coda, worker, retry, gestione delle dead-letter | |
| Transcodificare nel browser (WASM) | Lento, affamato di memoria e va in crash su mobile | |
| Chiamare l'API di Fotovid | Una richiesta HTTPS; niente da eseguire, pacchettizzare o scalare |
La tua prima chiamata in tre passaggi
- 1Procurati un'API key gratuita
Registrati e crea una key. Otterrai un token Authorization: Bearer p6_<key_id>:<secret> che autentica ogni chiamata a https://api.fotovid.co. Niente infrastruttura, niente build di ffmpeg — solo un header.
- 2Fai una POST del tuo video dal Worker
Chiama POST /v1/video/watermark con l'envelope standard: un source_url che punta all'URL HTTPS del tuo video di input, e un oggetto params — imposta type su image, text o combo, più position (es. bottom-right), opacity e scale. È una semplice fetch dall'interno del tuo Worker, quindi si adatta perfettamente al modello di richiesta dell'isolate.
- 3Usa l'URL del risultato ospitato
Fotovid restituisce un JSON flat: { id, type, url, expires_at, duration }. L'url punta al tuo video finito e con watermark, ospitato su Fotovid. Passalo direttamente al tuo client, oppure copialo nel tuo bucket per conservarne una copia permanente — il risultato ospitato è temporaneo.
Domande frequenti
Rilascialo con una sola chiamata API
Prendi una chiave gratuita e fai la tua prima chiamata in meno di cinque minuti.
