ffmpeg su AWS Lambda

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.

OptionWhat it costs youVerdict
Includere ffmpeg nella tua funzione AWS LambdaCi sta solo con un layer che impacchetti, gestisci i cold start e tari tu stesso
Ospitare tu stesso un container o una VMCosto always-on più patch, scalabilità e monitoraggio
Gestire una coda di job + workerNuova 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 FotovidUna sola richiesta HTTPS; niente da eseguire, impacchettare o scalare
How it works

La tua prima chiamata in tre passi

  1. 1
    Ottieni 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).

  2. 2
    Invia 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.

  3. 3
    Usa 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.