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.
| Option | What it costs you | Verdict |
|---|---|---|
| ffmpeg bundelen in je AWS Lambda-functie | Past alleen via een layer die je zelf bundelt, tunt en tegen cold starts optimaliseert | |
| Zelf een container of VM hosten | Continue kosten, plus patchen, schalen en monitoren | |
| Een job queue + worker draaien | Nieuwe infra: een queue, workers, retries, dead-letter-afhandeling | |
| Transcoderen in de browser (WASM) | Traag, geheugenhongerig en crasht op mobiel | |
| De Fotovid-API aanroepen | Eén HTTPS-request; niets om te draaien, bundelen of schalen |
Je eerste call in drie stappen
- 1Haal 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).
- 2POST 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.
- 3Gebruik 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.
