ffmpeg su Cloudflare Workers

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.

OptionWhat it costs youVerdict
Incorporare ffmpeg nel bundle della tua funzione Cloudflare WorkersI Workers non possono eseguire binari nativi in alcun modo
Fare il self-hosting di un container o una VMCosto continuo, più aggiornamenti, scalabilità e monitoraggio
Gestire una coda di job + workerNuova 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 FotovidUna richiesta HTTPS; niente da eseguire, pacchettizzare o scalare
How it works

La tua prima chiamata in tre passaggi

  1. 1
    Procurati 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.

  2. 2
    Fai 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.

  3. 3
    Usa 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.