ffmpeg su AWS Lambda senza dover gestire la Lambda
Lambda può eseguire ffmpeg — ma ti ritrovi a gestire il packaging, i cold start e l'operatività. Fotovid ti toglie tutti e tre i problemi: invii una richiesta, ottieni un file hosted, salti la creazione dei layer.
// 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 }) };
};Volevi solo aggiungere un watermark a un upload
Sì, Lambda può eseguire ffmpeg. Costruisci un layer sotto il limite di 250MB decompresso, colleghi /tmp come scratch space (fino a 10GB) e resti entro il tetto di 15 minuti. Poi inizia il vero lavoro: fissare una build statica di ffmpeg, tarare la memoria perché un encode 1080p non vada in timeout, assorbire i cold start alla prima richiesta e gestire tutto questo per sempre. Un bel po' di infrastruttura solo per mettere un logo su un video.
- Impacchettare e versionare un binario ffmpeg statico come layer, sotto il limite di 250MB decompresso
- Tarare memoria e timeout per ogni operazione perché gli encode non falliscano contro il muro dei 15 minuti
- Assorbire la latenza del cold start proprio sulla richiesta che un utente sta aspettando
- Mantenere, patchare e monitorare una Lambda ffmpeg che non avresti mai voluto gestire
Come i team provano a eseguire ffmpeg su AWS Lambda
Prima di Fotovid erano queste le opzioni — e ognuna è un lavoro che preferiresti non doverti accollare.
| Option | What it costs you | Verdict |
|---|---|---|
| Includere ffmpeg nella tua funzione AWS Lambda | Ci sta solo con un layer che impacchetti, gestisci i cold start e tari tu stesso | |
| Ospitare tu stesso un container o una VM | Costo always-on più patch, scalabilità e monitoraggio | |
| Gestire una coda di job + worker | Nuova infrastruttura: una coda, worker, retry, gestione delle dead-letter | |
| Fare il transcoding nel browser (WASM) | Lento, avido di memoria e va in crash su mobile | |
| Chiamare l'API di Fotovid | Una sola richiesta HTTPS; niente da eseguire, impacchettare o scalare |
La tua prima chiamata in tre passi
- 1Ottieni una chiave API gratuita
Crea una chiave Fotovid per ottenere un token nel formato p6_<key_id>:<secret>. Inviala come header Authorization: Bearer in ogni richiesta. Nessun ruolo AWS, nessun layer, nessuna build pipeline — l'utilizzo funziona a credits ($1 = 100 credits, la maggior parte delle operazioni costa 1 credit).
- 2Invia il tuo video con POST a /v1/video/watermark
Effettua una richiesta POST a https://api.fotovid.co/v1/video/watermark con la busta standard: un source_url che punta al tuo input via HTTPS, più un oggetto params. Per un watermark, imposta type (image, text o combo), watermark_image_url oppure text, una position come bottom-right e, in modo facoltativo, opacity, scale e padding. Fotovid recupera la source, esegue ffmpeg e risponde in modo sincrono — nessuna coda da interrogare, nessuna Lambda da tenere calda.
- 3Usa l'URL del risultato hosted
La risposta è un JSON piatto: un id, un type e un url che punta al file finito, hosted su Fotovid (più expires_at e, per i video, duration). Passa quell'URL direttamente al tuo frontend oppure scaricalo per conservarne una tua copia. Lo stesso flusso funziona per /v1/video/trim, /v1/video/extract-audio, /v1/video/extract-cover, /v1/video/probe e gli endpoint per immagini e audio.
Domande frequenti
Rilascialo con una sola chiamata API
Prendi una chiave gratuita e fai la tua prima chiamata in meno di cinque minuti.
