ffmpeg op Deno Deploy

Waarom draait ffmpeg niet op Deno Deploy? Geen subprocess — dus roep de API aan.

Deno Deploy voert je code uit in V8-isolates zonder subprocess en zonder FFI, waardoor de ffmpeg-binary niet kan starten. Roep in plaats daarvan Fotovid aan via fetch() — de encode draait elders en je krijgt gewoon een https-link naar het bestand terug.

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

Het isolate-model laat ffmpeg helemaal niet draaien

Deno Deploy is gebouwd op V8-isolates voor snelle edge-logica, niet voor CPU-zware media-encoding. Er is geen subprocess-API om een native binary te starten en geen FFI om er een te laden, waardoor het ffmpeg-proces nooit start. Dit is geen configuratievlag of recht dat je kunt toekennen — de primitieven die ffmpeg nodig heeft, bestaan simpelweg niet in de isolate-sandbox. Er bestaan WebAssembly-versies van ffmpeg, maar die overschrijden de CPU- en geheugenlimieten van een isolate bij elke echte video en kunnen geen groot bestand streamen.

  • Geen subprocess: Deno.Command en child_process kunnen de ffmpeg-binary niet starten binnen een isolate.
  • Geen FFI: je kunt geen native ffmpeg-library via dlopen laden en er direct in aanroepen.
  • Wasm-ffmpeg put de CPU en het geheugen van een isolate uit bij echte video's en kan geen grote bestanden streamen.
  • Het platform is afgestemd op korte edge-requests, niet op encode-taken van meerdere seconden.

Manieren waarop teams proberen ffmpeg op Deno Deploy te draaien

Vóór Fotovid waren dit de opties — stuk voor stuk werk dat je liever niet zelf doet.

OptionWhat it costs youVerdict
ffmpeg bundelen in je Deno Deploy-functieGeen subprocess om de ffmpeg-binary te starten
Zelf een container of VM hostenAlways-on kosten plus patchen, schalen en monitoren
Een jobqueue + worker draaienNieuwe infra: een queue, workers, retries, dead-letter-afhandeling
Transcoderen in de browser (Wasm)Traag, geheugenhongerig en crasht op mobiel
De Fotovid API aanroepenEén HTTPS-request; niets om te draaien, te packagen of te schalen
How it works

Je eerste call in drie stappen

  1. 1
    Haal een gratis API-key op

    Meld je aan en maak een key aan — geen kaart nodig om te starten. Je krijgt een key-ID en secret die samen een Bearer-token vormen in de vorm p6_<key_id>:<secret>. Sla het op in een Deno Deploy-omgevingsvariabele, zodat je isolate kan authenticeren zonder ook maar één binary mee te leveren.

  2. 2
    POST naar het watermerk-endpoint

    Doe vanuit je Deno-handler een gewone fetch om te POST'en naar https://api.fotovid.co/v1/video/watermark met je Bearer-token. Stuur de standaard envelope mee: een source_url die naar de HTTPS-URL van je invoervideo wijst, plus een params-object dat het watermerk beschrijft — type (image, text of combo), de watermark_image_url of text, een position zoals bottom-right, opacity en scale. Fotovid haalt de bron op, draait ffmpeg op zijn eigen infrastructuur en antwoordt voordat je isolate een timeout krijgt.

  3. 3
    Gebruik de teruggegeven URL

    De response is platte JSON: een id, een type en een url die naar de afgeronde, door Fotovid gehoste video wijst, plus expires_at en duration. Geef die url direct door aan je client, of haal hem server-side op en sla je eigen kopie op in de bucket die je al gebruikt. De meeste operaties kosten 1 credit, dus een watermerk-call kost één credit van je saldo.

Veelgestelde vragen

Zet het live met één API-aanroep

Pak een gratis key en doe je eerste aanroep in minder dan vijf minuten.