ffmpeg auf AWS Lambda

ffmpeg auf AWS Lambda – ohne eigene Lambda

Lambda kann ffmpeg ausführen – aber Packaging, Cold Starts und Betrieb bleiben an dir hängen. Fotovid nimmt dir alle drei ab: Request schicken, gehostete Datei bekommen, keine Layer-Builds mehr.

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

Du wolltest nur einen Upload mit einem Wasserzeichen versehen

Ja, Lambda kann ffmpeg ausführen. Du baust einen Layer, der unter dem 250-MB-Limit (entpackt) bleibt, nutzt /tmp als Scratch-Speicher (bis zu 10 GB) und bleibst innerhalb der 15-Minuten-Grenze. Dann fängt die eigentliche Arbeit an: einen statischen ffmpeg-Build pinnen, den Speicher so tunen, dass ein 1080p-Encode nicht ins Timeout läuft, bei jedem ersten Request den Cold Start ausbaden – und das Ganze für immer selbst betreuen. Ziemlich viel Infrastruktur, nur um ein Logo in ein Video zu stempeln.

  • Ein statisches ffmpeg-Binary als Layer paketieren und versionieren – unter dem 250-MB-Limit (entpackt)
  • Speicher und Timeout pro Operation tunen, damit Encodes nicht an der 15-Minuten-Grenze scheitern
  • Cold-Start-Latenz genau bei dem Request abfangen, auf den ein Nutzer gerade wartet
  • Eine ffmpeg-Lambda warten, patchen und überwachen, die du nie betreiben wolltest

Wie Teams versuchen, ffmpeg auf AWS Lambda zu betreiben

Vor Fotovid gab es nur diese Optionen – und jede davon ist Arbeit, die du dir lieber sparst.

OptionWhat it costs youVerdict
ffmpeg in deine AWS Lambda-Funktion bundelnGeht nur über einen selbst gebauten Layer – inklusive Cold Starts und Tuning
Container oder VM selbst hostenDauerkosten rund um die Uhr, dazu Patching, Skalierung und Monitoring
Job-Queue + Worker betreibenNeue Infrastruktur: 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

    Leg einen Fotovid-Schlüssel an – du bekommst ein Token in der Form p6_<key_id>:<secret>. Schick es bei jedem Request als Authorization: Bearer Header mit. Keine AWS-Rolle, kein Layer, keine Build-Pipeline – abgerechnet wird über Credits ($1 = 100 Credits, die meisten Operationen kosten 1 Credit).

  2. 2
    Schick dein Video per POST an /v1/video/watermark

    Ruf POST https://api.fotovid.co/v1/video/watermark mit dem üblichen Envelope auf: eine source_url, die per HTTPS auf deine Eingabedatei zeigt, plus ein params-Objekt. Für ein Wasserzeichen setzt du type (image, text oder combo), die watermark_image_url oder den text, eine position wie bottom-right und optional opacity, scale und padding. Fotovid holt sich die Quelldatei, führt ffmpeg aus und antwortet synchron – keine Queue zum Pollen, keine Lambda, die du warm halten musst.

  3. 3
    Nutze die gehostete Ergebnis-URL

    Die Response ist flaches JSON: eine id, ein type und eine url, die auf die fertige, von Fotovid gehostete Datei zeigt (dazu expires_at und bei Video duration). Gib diese URL direkt an dein Frontend weiter oder lade die Datei herunter, um sie selbst zu speichern. Derselbe Ablauf gilt für /v1/video/trim, /v1/video/extract-audio, /v1/video/extract-cover, /v1/video/probe sowie die Image- und Audio-Endpoints.

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.