ffmpeg auf Deno Deploy

Warum läuft ffmpeg nicht auf Deno Deploy? Kein Subprocess – ruf die API auf.

Deno Deploy führt deinen Code in V8-Isolates aus – ohne Subprocess, ohne FFI. Das ffmpeg-Binary lässt sich also gar nicht erst starten. Ruf stattdessen Fotovid per fetch() auf: Das Encoding läuft woanders, zurück kommt schlicht ein https-Link auf die fertige Datei.

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

Das Isolate-Modell lässt ffmpeg nicht laufen – gar nicht

Deno Deploy baut auf V8-Isolates – gemacht für schnelle Edge-Logik, nicht für CPU-lastiges Media-Encoding. Es gibt keine Subprocess-API, um ein natives Binary zu starten, und kein FFI, um eines zu laden – der ffmpeg-Prozess kommt also nie zustande. Das ist kein Config-Flag und keine Berechtigung, die du erteilen kannst: Die Primitive, die ffmpeg braucht, existieren in der Isolate-Sandbox schlicht nicht. WebAssembly-Ports von ffmpeg gibt es, aber die sprengen bei jedem echten Video die CPU- und Speichergrenzen des Isolates und können große Dateien nicht durchstreamen.

  • Kein Subprocess: Deno.Command und child_process können das ffmpeg-Binary im Isolate nicht starten.
  • Kein FFI: Du kannst keine native ffmpeg-Bibliothek per dlopen einbinden und direkt aufrufen.
  • Wasm-ffmpeg frisst bei echten Videos CPU und Speicher des Isolates auf und kann große Inputs nicht streamen.
  • Die Plattform ist auf kurze Edge-Requests ausgelegt, nicht auf Encode-Jobs über mehrere Sekunden.

Übliche Versuche, ffmpeg auf Deno Deploy zu betreiben

Vor Fotovid blieben nur diese Optionen – jede davon Arbeit, die du dir lieber nicht aufhalst.

OptionWhat it costs youVerdict
ffmpeg in deine Deno-Deploy-Function bundelnKein Subprocess, um das ffmpeg-Binary zu starten
Container oder VM selbst hostenDauerkosten plus Patching, Skalierung und Monitoring
Job-Queue + Worker betreibenNeue Infra: Queue, Worker, Retries, Dead-Letter-Handling
Im Browser transkodieren (WASM)Langsam, speicherhungrig, stürzt auf Mobilgeräten ab
Die Fotovid-API aufrufenEin HTTPS-Request – nichts zu betreiben, zu paketieren oder zu skalieren
How it works

Dein erster Call in drei Schritten

  1. 1
    Hol dir einen kostenlosen API-Schlüssel

    Registriere dich und leg einen Schlüssel an – zum Start ohne Kreditkarte. Du bekommst eine Key-ID und ein Secret, die zusammen einen Bearer-Token der Form p6_<key_id>:<secret> ergeben. Leg ihn in einer Deno-Deploy-Umgebungsvariable ab, damit sich dein Isolate authentifizieren kann, ohne irgendein Binary mitzuliefern.

  2. 2
    POST an den Wasserzeichen-Endpoint

    Setz aus deinem Deno-Handler heraus einen ganz normalen fetch ab: POST https://api.fotovid.co/v1/video/watermark mit deinem Bearer-Token. Schick den Standard-Envelope – eine source_url, die auf die HTTPS-URL deines Eingangsvideos zeigt, plus ein params-Objekt, das das Wasserzeichen beschreibt: type (image, text oder combo), watermark_image_url oder text, position wie bottom-right, opacity und scale. Fotovid holt sich die Quelle, führt ffmpeg auf eigener Infrastruktur aus und antwortet, bevor dein Isolate ins Timeout läuft.

  3. 3
    Nimm die zurückgegebene URL

    Die Antwort ist flaches JSON: eine id, ein type und eine url auf das fertige, von Fotovid gehostete Video, dazu expires_at und duration. Reich die url direkt an deinen Client durch oder hol sie serverseitig ab und leg eine eigene Kopie in dem Bucket ab, den du ohnehin nutzt. Die meisten Operationen kosten 1 Credit – ein Wasserzeichen-Call schlägt also mit einem einzigen Credit auf deinem Guthaben zu Buche.

Häufige Fragen

Mit einem API-Call live gehen

Hol dir einen kostenlosen Schlüssel und mach deinen ersten Call in unter fünf Minuten.