ffmpeg op AWS Lambda

ffmpeg op AWS Lambda — zonder eigen Lambda

Lambda kan ffmpeg draaien — maar de packaging, de cold starts en de ops komen voor jouw rekening. Fotovid neemt je alle drie uit handen: stuur een request, krijg een gehost bestand, sla de layer-builds over.

// handler.mjs — Node 18+ runtime (global fetch)
export const handler = async (event) => {
  const { videoUrl, logoUrl } = JSON.parse(event.body);

  const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.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 { statusCode: 200, body: JSON.stringify({ url }) };
};

Je wilde gewoon een upload watermerken

Ja, Lambda kan ffmpeg draaien. Je bouwt een layer die onder de uitgepakte 250MB-limiet blijft, gebruikt /tmp als scratch-ruimte (tot 10GB) en blijft binnen de 15-minutengrens. Dan begint het echte werk: een statische ffmpeg-build vastpinnen, het geheugen zo tunen dat een 1080p-encode niet vastloopt op een timeout, cold starts opvangen op het eerste request, en dit alles voor altijd zelf onderhouden. Dat is nogal wat infrastructuur om alleen een logo op een video te stempelen.

  • Een statisch ffmpeg-binary als layer bundelen en versioneren, onder de uitgepakte 250MB-limiet
  • Geheugen en timeout per operatie tunen zodat encodes niet stranden op de 15-minutengrens
  • Cold-start-latency opvangen op precies het request waar een gebruiker op wacht
  • Een ffmpeg-Lambda onderhouden, patchen en monitoren die je nooit had willen beheren

Manieren waarop teams ffmpeg op AWS Lambda proberen te draaien

Vóór Fotovid waren dit de opties — en elke optie is werk dat je liever niet zelf doet.

OptionWhat it costs youVerdict
ffmpeg bundelen in je AWS Lambda-functiePast alleen via een layer die je zelf bundelt, tunt en tegen cold starts optimaliseert
Zelf een container of VM hostenContinue kosten, plus patchen, schalen en monitoren
Een job queue + 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, bundelen of schalen
How it works

Je eerste call in drie stappen

  1. 1
    Haal een gratis API-key op

    Maak een Fotovid-key aan en je krijgt een token in de vorm p6_<key_id>:<secret>. Stuur die bij elk request mee als Authorization: Bearer header. Geen AWS-rol, geen layer, geen build pipeline — je betaalt met credits ($1 = 100 credits, de meeste operaties kosten 1 credit).

  2. 2
    POST je video naar /v1/video/watermark

    Roep POST https://api.fotovid.co/v1/video/watermark aan met de standaard envelope: een source_url die via HTTPS naar je input wijst, plus een params-object. Voor een watermerk stel je type in (image, text of combo), de watermark_image_url of text, een position zoals bottom-right, en optioneel opacity, scale en padding. Fotovid haalt de bron op, draait ffmpeg en antwoordt synchroon — geen queue om te pollen, geen Lambda om warm te houden.

  3. 3
    Gebruik de gehoste result-URL

    De response is platte JSON: een id, type en een url die naar het voltooide, door Fotovid gehoste bestand wijst (plus expires_at en bij video ook duration). Geef die URL rechtstreeks door aan je frontend of download het bestand om je eigen kopie te bewaren. Dezelfde flow werkt voor /v1/video/trim, /v1/video/extract-audio, /v1/video/extract-cover, /v1/video/probe en de image- en audio-endpoints.

Veelgestelde vragen

Zet het live met één API-aanroep

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