ffmpeg su Deno Deploy

Perché ffmpeg non può girare su Deno Deploy? Niente sottoprocessi — quindi chiama l'API.

Deno Deploy esegue il tuo codice in isolate V8 senza sottoprocessi e senza FFI, quindi il binario ffmpeg non può essere avviato. Chiama invece Fotovid tramite fetch() — l'encoding gira altrove e ricevi come risposta un semplice link https al file.

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 });
});

Il modello a isolate non permette a ffmpeg di girare — punto e basta

Deno Deploy si basa su isolate V8 pensati per una logica edge veloce, non per l'encoding media ad alto uso di CPU. Non c'è un'API per i sottoprocessi con cui avviare un binario nativo, né un FFI per caricarne uno, quindi il processo ffmpeg non parte mai. Non è un flag di configurazione o un permesso che puoi concedere — le primitive di cui ffmpeg ha bisogno semplicemente non esistono nella sandbox dell'isolate. Esistono porting WebAssembly di ffmpeg, ma superano i limiti di CPU e memoria dell'isolate su qualsiasi video reale e non riescono a far transitare in streaming un file di grandi dimensioni.

  • Niente sottoprocessi: Deno.Command e child_process non possono avviare il binario ffmpeg all'interno di un isolate.
  • Niente FFI: non puoi fare dlopen su una libreria ffmpeg nativa e chiamarla direttamente.
  • ffmpeg in Wasm esaurisce CPU/memoria dell'isolate su video reali e non riesce a far transitare in streaming input di grandi dimensioni.
  • La piattaforma è calibrata per richieste edge brevi, non per job di encoding di più secondi.

Come i team provano a far girare ffmpeg su Deno Deploy

Prima di Fotovid erano queste le opzioni — e ognuna è un lavoro che preferiresti non avere.

OptionWhat it costs youVerdict
Includere ffmpeg nella tua funzione Deno DeployNessun sottoprocesso per avviare il binario ffmpeg
Fare self-hosting su container o VMCosto always-on più patching, scaling e monitoring
Gestire una coda di job + workerNuova infrastruttura: una coda, worker, retry, gestione dead-letter
Transcodifica nel browser (WASM)Lenta, avida di memoria, e va in crash su mobile
Chiamare l'API FotovidUna richiesta HTTPS; niente da eseguire, pacchettizzare o scalare
How it works

La tua prima chiamata in tre passaggi

  1. 1
    Ottieni una API key gratuita

    Registrati e crea una key — nessuna carta richiesta per iniziare. Ottieni un key ID e un secret che si combinano in un token Bearer nella forma p6_<key_id>:<secret>. Salvalo in una variabile d'ambiente di Deno Deploy così il tuo isolate può autenticarsi senza dover includere alcun binario.

  2. 2
    Fai una POST all'endpoint watermark

    Dal tuo handler Deno, esegui una normale fetch in POST verso https://api.fotovid.co/v1/video/watermark con il tuo token Bearer. Invia la busta standard: un source_url che punta all'URL HTTPS del tuo video di input, più un oggetto params che descrive il watermark — type (image, text o combo), il watermark_image_url o text, la position come bottom-right, l'opacity e lo scale. Fotovid recupera la sorgente, esegue ffmpeg sulla propria infrastruttura e risponde prima che il tuo isolate vada in timeout.

  3. 3
    Usa l'URL restituito

    La risposta è JSON piatto: un id, un type e una url che punta al video finito, ospitato da Fotovid, più expires_at e duration. Passa direttamente quella url al tuo client, oppure recuperala lato server e conserva una tua copia nel bucket che già usi. La maggior parte delle operazioni costa 1 credit, quindi una chiamata watermark addebita un solo credit sul tuo saldo.

Domande frequenti

Rilascialo con una sola chiamata API

Prendi una chiave gratuita e fai la tua prima chiamata in meno di cinque minuti.