▶ Video e streaming

FFmpeg per la transcodifica: i comandi essenziali spiegati

Struttura di un comando FFmpeg, scelta di codec e qualità, ridimensionamento, taglio, estrazione dell'audio e mappatura delle tracce, con esempi pronti.

FFmpeg è lo strumento a riga di comando che sta dietro a una parte enorme del software video esistente: molti programmi di conversione, lettori e servizi online lo usano internamente. Impararne le basi permette di fare in pochi secondi operazioni che con un'interfaccia grafica richiederebbero molti passaggi, e soprattutto di sapere esattamente cosa succede al file. Non serve memorizzare centinaia di opzioni: bastano una struttura chiara e una decina di comandi ricorrenti.

La struttura di un comando

Un comando FFmpeg segue sempre lo stesso schema:

ffmpeg [opzioni di ingresso] -i ingresso [opzioni di uscita] uscita

La regola più importante è che le opzioni si applicano al file che segue. Un'opzione scritta prima di -i riguarda l'ingresso; scritta dopo, riguarda l'uscita. Molti errori nascono da opzioni messe nel posto sbagliato.

Le opzioni più usate hanno un suffisso che indica il tipo di flusso: :v per il video, :a per l'audio, :s per i sottotitoli. Per esempio -c:v sceglie il codec video e -b:a il bitrate audio.

Prima di tutto: guardare cosa c'è nel file

Prima di convertire conviene sapere cosa si ha davanti:

ffprobe -hide_banner video.mp4

Il risultato elenca ogni flusso con codec, risoluzione, frame rate e lingua. Da qui si decide se basta un remux o se serve ricodificare.

Conversione standard per la massima compatibilità

ffmpeg -i ingresso.mov -c:v libx264 -preset slow -crf 21 -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart uscita.mp4

Che cosa fa ogni parte:

  • -c:v libx264: codifica il video in H.264;
  • -preset slow: usa più tempo per comprimere meglio; i preset vanno da ultrafast a veryslow;
  • -crf 21: fissa il livello di qualità;
  • -pix_fmt yuv420p: usa il formato pixel più compatibile;
  • -c:a aac -b:a 160k: audio AAC a 160 kbps;
  • -movflags +faststart: sposta l'indice all'inizio del file, così la riproduzione online parte prima che il file sia scaricato tutto.

Copiare senza ricodificare

Se il codec va bene e serve solo cambiare container:

ffmpeg -i ingresso.mkv -c copy uscita.mp4

Si può anche copiare un flusso e ricodificarne un altro, per esempio mantenere il video e convertire solo l'audio:

ffmpeg -i ingresso.mkv -c:v copy -c:a aac -b:a 192k uscita.mp4

Ridimensionare

Il filtro scale cambia la risoluzione. Indicando -2 per una delle dimensioni, FFmpeg calcola l'altra mantenendo le proporzioni e arrotondando a un numero pari, richiesto da molti codec:

ffmpeg -i ingresso.mp4 -vf "scale=1280:-2" -c:v libx264 -crf 22 -c:a copy uscita_720p.mp4

Tagliare un estratto

ffmpeg -ss 00:01:30 -i ingresso.mp4 -t 00:00:45 -c:v libx264 -crf 20 -c:a aac estratto.mp4

-ss prima di -i fa partire la lettura dal punto indicato in modo rapido, -t stabilisce la durata. Ricodificando, il taglio è preciso al fotogramma. Con -c copy è molto più veloce ma il punto di inizio si sposta al keyframe più vicino.

Estrarre o sostituire l'audio

Estrarre l'audio senza ricodificarlo, se il codec è AAC:

ffmpeg -i video.mp4 -vn -c:a copy audio.m4a

Sostituire l'audio di un video con un altro file:

ffmpeg -i video.mp4 -i nuovo_audio.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest uscita.mp4

La mappatura delle tracce

Per impostazione predefinita FFmpeg sceglie automaticamente un solo flusso video e un solo flusso audio, di solito quelli con qualità più alta. Se un file contiene più lingue o sottotitoli, vanno selezionati esplicitamente con -map:

ffmpeg -i film.mkv -map 0:v:0 -map 0:a:0 -map 0:a:1 -map 0:s:0 -c copy uscita.mkv

La sintassi 0:a:1 significa «dal primo file in ingresso, il secondo flusso audio» (la numerazione parte da zero). Con -map 0 si copiano tutti i flussi.

Ricodificare un'intera cartella

Su Linux e macOS un ciclo nella shell converte tutti i file di una cartella:

for f in *.mov; do ffmpeg -i "$f" -c:v libx264 -crf 21 -c:a aac "${f%.mov}.mp4"; done

Le virgolette intorno ai nomi evitano problemi con gli spazi.

Abitudini che evitano errori

  1. Non sovrascrivete mai l'originale: scrivete sempre su un file nuovo.
  2. Provate su un estratto di 20-30 secondi prima di convertire un file lungo.
  3. Leggete l'output: FFmpeg segnala in giallo e rosso avvisi ed errori, spesso con indicazioni precise.
  4. Controllate il risultato con ffprobe, non solo guardandolo.

In sintesi

  • Le opzioni si applicano al file che le segue: prima di -i l'ingresso, dopo l'uscita.
  • Usate ffprobe per capire cosa contiene un file prima di convertirlo.
  • -c copy cambia container senza perdite; la ricodifica serve per cambiare codec o qualità.
  • -map seleziona esplicitamente le tracce da includere.
  • Provate sempre su un estratto e non sovrascrivete l'originale.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche