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.
| Option | What it costs you | Verdict |
|---|---|---|
| ffmpeg in deine AWS Lambda-Funktion bundeln | Geht nur über einen selbst gebauten Layer – inklusive Cold Starts und Tuning | |
| Container oder VM selbst hosten | Dauerkosten rund um die Uhr, dazu Patching, Skalierung und Monitoring | |
| Job-Queue + Worker betreiben | Neue Infrastruktur: Queue, Worker, Retries, Dead-Letter-Handling | |
| Im Browser transkodieren (WASM) | Langsam, speicherhungrig, stürzt auf Mobilgeräten ab | |
| Die Fotovid-API aufrufen | Ein HTTPS-Request – nichts zu betreiben, zu paketieren oder zu skalieren |
Dein erster Call in drei Schritten
- 1Hol 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).
- 2Schick 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.
- 3Nutze 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.
