ffmpeg op Netlify Functions: te groot om te bundelen, wij hosten het voor je.
Netlify Functions draaien op AWS Lambda, waardoor ffmpeg zowel de bundlelimiet als de standaard timeout overschrijdt. Geef de klus aan Fotovid: één request eruit, een kant-en-klare result-URL terug — ruim binnen elke timeout.
// netlify/functions/watermark.mts
export default async (req: Request) => {
const { videoUrl, logoUrl } = await req.json();
const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
method: "POST",
headers: {
Authorization: `Bearer ${Netlify.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 });
};Waarom ffmpeg op Netlify blijft mislukken
Netlify Functions draaien op AWS Lambda, en dat is precies waar ffmpeg tegen muren aanloopt. Een statische ffmpeg-binary is veel te groot voor de bundlelimiet van ~50MB gezipt / 250MB uitgepakt, dus de deploy mislukt of de binary wordt stilletjes niet meegeleverd. Zelfs als je hem erin geperst krijgt, maakt de standaard timeout van 10s korte metten met elke echte transcode — background functions geven je 26s, wat voor het meeste videowerk nog steeds niet genoeg is. Het is de klassieke val van 'werkt op mijn laptop, geeft een timeout in productie'.
- ffmpeg-binary + libs overschrijden de Lambda-bundlelimiet van 250MB uitgepakt
- Standaard timeout van 10s (26s background) breekt echte transcodes halverwege af
- Cold starts en geklooi met layers zorgen voor extra latency en packaging-ellende
- Succes lokaal is geen garantie in de gedeployde function
Manieren waarop teams ffmpeg op Netlify proberen te draaien
Vóór Fotovid waren dit de opties — stuk voor stuk werk dat je liever niet zelf doet.
| Option | What it costs you | Verdict |
|---|---|---|
| ffmpeg bundelen in je Netlify function | Overschrijdt de 250MB-bundle en loopt tegen de 10s function-timeout aan | |
| Zelf een container of VM hosten | Always-on kosten plus patchen, schalen en monitoren | |
| Een job queue + worker draaien | Nieuwe infra: een queue, workers, retries, dead-letter handling | |
| Transcoden in de browser (WASM) | Traag, geheugenhongerig en crasht op mobiel | |
| De Fotovid API aanroepen | Eén HTTPS-request; niets om te draaien, te bundelen of te schalen |
Je eerste call in drie stappen
- 1Haal een gratis API key op
Meld je aan en maak een key aan. Je authenticeert met een Authorization: Bearer p6_<key_id>:<secret> header — geen binaries, geen Lambda layers, niets om in je Netlify Function te bundelen.
- 2POST je video naar het watermark endpoint
Roep vanuit je Netlify Function POST /v1/video/watermark aan op https://api.fotovid.co. Stuur de standaard envelope: een source_url die naar je inputvideo wijst, plus een params object — zet type op image, text of combo, kies dan een positie zoals bottom-right, plus opacity, scale en padding. Fotovid doet het ffmpeg-werk off-platform, dus je function doet gewoon één snel HTTPS-request in plaats van een binary aan te roepen via de shell, die hij toch niet kan meeleveren.
- 3Gebruik de gehoste result-URL
De response is platte JSON met een id, type, url en expires_at. De url wijst naar de afgeronde, door Fotovid gehoste video. Geef hem terug aan je client of sla je eigen kopie op — omdat resultaten tijdelijk gehost worden, download je hem en bewaar je hem bij je overige assets.
Veelgestelde vragen
Zet het live met één API-aanroep
Pak een gratis key en doe je eerste aanroep in minder dan vijf minuten.
