1 15/05/2026 9 min

FFmpeg su Ubuntu 20.04 è uno di quei mattoni che finiscono quasi sempre in mezzo a flussi diversi: transcodifica video, estrazione audio, thumbnail, taglio clip, normalizzazione, ingest per streaming, automazioni batch. La differenza tra usarlo bene e usarlo “a tentativi” sta nel capire due cose: quali pacchetti installare e come leggere il comportamento reale del file multimediale prima di lanciare una conversione.

Su Ubuntu 20.04 la scelta più semplice è installare il pacchetto dai repository ufficiali. Per casi standard va bene; se ti servono codec più recenti o opzioni non presenti nella build stock, allora conviene valutare un repository esterno o una compilazione dedicata. In questa guida parto dal percorso più pulito e ripetibile, poi passo agli usi pratici che servono davvero in amministrazione di sistemi e hosting.

Installazione di FFmpeg su Ubuntu 20.04

Prima di installare, aggiorna l’indice dei pacchetti. È banale, ma evita di pescare una versione vecchia o dipendenze incoerenti.

sudo apt update
sudo apt install ffmpeg

Controlla subito la versione installata. Non basta sapere che il comando esiste: devi vedere quali codec e filtri sono stati compilati dentro quella build.

ffmpeg -version
ffmpeg -buildconf

Il primo comando mostra la versione e le librerie collegate; il secondo è più utile in pratica perché ti dice come è stato costruito il binario. Se stai cercando supporto per un codec specifico, qui capisci subito se la build stock basta o no.

Per verificare i codec disponibili, usa un filtro mirato invece di scorrere l’output a mano.

ffmpeg -codecs | grep -E '264|265|aac|mp3|opus|vp9|av1'
ffmpeg -formats | grep -E 'mp4|mkv|webm|mov|mp3'

Se il comando non viene trovato dopo l’installazione, il problema non è FFmpeg ma il PATH o un ambiente ridotto. Su una shell normale `which ffmpeg` deve restituire un percorso come `/usr/bin/ffmpeg`.

Capire un file prima di convertirlo

La prima abitudine utile è leggere il file sorgente con ffprobe. FFmpeg fa il lavoro, ma ffprobe ti evita conversioni inutili o scelte sbagliate sul mapping delle tracce.

ffprobe -hide_banner input.mp4

Per un’analisi più leggibile, chiedi stream, codec, durata e bitrate in formato compatto.

ffprobe -v error \
  -show_entries format=filename,duration,size,bit_rate \
  -show_entries stream=index,codec_type,codec_name,width,height,r_frame_rate,channels,sample_rate \
  -of default=noprint_wrappers=1 input.mp4

Questa uscita ti dice se il file contiene più tracce audio, sottotitoli, metadati o un video con risoluzione diversa da quella che pensavi. Nei flussi operativi è il passaggio che riduce di più gli errori “perché il risultato è senza audio” o “perché il file finale pesa il doppio”.

Conversioni base: video, audio e container

Il caso più comune è convertire un file in un formato più compatibile. Qui il punto non è solo cambiare estensione, ma decidere se ricodificare o copiare gli stream. Se puoi evitare la ricodifica, risparmi CPU e tempo.

Per ricodificare un video in H.264 con audio AAC dentro un contenitore MP4:

ffmpeg -i input.mkv -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output.mp4

Qui -crf governa la qualità del video: più è basso, più il file cresce. Il valore 23 è un punto di partenza ragionevole per uso generale. Se il file di partenza è già in H.264 e l’obiettivo è solo cambiare contenitore, puoi copiare i flussi senza ricodifica.

ffmpeg -i input.mkv -c copy output.mp4

Attenzione però: il copia-incolla dei flussi funziona solo se il contenitore di destinazione supporta quei codec. Se il file ha audio o video non compatibili con MP4, FFmpeg fallisce o produce un output non riproducibile.

Per estrarre solo l’audio da un video e salvarlo in MP3 o AAC:

ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a aac -b:a 160k output.m4a

-vn disabilita il video. È un’opzione semplice, ma utile quando devi fare podcast estratti da webinar o generare tracce audio per workflow successivi.

Taglio, join e selezione delle tracce

Per tagliare un segmento, FFmpeg offre due strade. La più veloce usa il copia-flussi, la più precisa ricodifica. La scelta dipende da dove vuoi mettere il limite tra velocità e accuratezza.

Taglio rapido senza ricodifica, adatto quando basta una finestra approssimativa:

ffmpeg -ss 00:01:00 -to 00:02:30 -i input.mp4 -c copy clip.mp4

Se invece vuoi un taglio preciso al frame, metti il seek dopo l’input e ricodifica il segmento:

ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c:v libx264 -crf 23 -c:a aac clip_preciso.mp4

Per unire più file, il metodo più affidabile è usare un file di lista. È più pulito dei tentativi con wildcard o concatenazioni improvvisate.

printf "file 'part1.mp4'\nfile 'part2.mp4'\nfile 'part3.mp4'\n" > files.txt
ffmpeg -f concat -safe 0 -i files.txt -c copy joined.mp4

Il requisito qui è che i segmenti abbiano parametri compatibili. Se cambiano codec, risoluzione o layout audio, il concat demuxer può non funzionare e devi passare a una ricodifica completa.

Ridimensionamento, crop e filtri video

Il vero punto forte di FFmpeg è la filtergraph. Anche in un contesto sysadmin, una catena semplice risolve spesso lavori che altrimenti richiederebbero software separato.

Ridimensionare un video a 1280 pixel di larghezza mantenendo il rapporto d’aspetto:

ffmpeg -i input.mp4 -vf scale=1280:-2 -c:a copy output_720p.mp4

Il valore -2 fa arrotondare l’altezza a un numero pari, utile per evitare errori con codec che richiedono dimensioni allineate. Se vuoi un crop centrale, puoi fare così:

ffmpeg -i input.mp4 -vf "crop=1280:720:(in_w-1280)/2:(in_h-720)/2" -c:a copy output_crop.mp4

Per ruotare o correggere orientamento, spesso basta un filtro semplice. È frequente con file generati da smartphone o workflow misti.

ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy rotated.mp4

Se devi fare batch processing, prova sempre il filtro su un solo file campione prima di lanciare una coda su decine di file. Un filtro sintatticamente corretto può comunque produrre un output non voluto se il materiale di partenza ha aspect ratio strano o metadati di rotazione.

Estrazione di immagini e miniature

FFmpeg è comodo anche per generare thumbnail da video, preview o immagini di copertina. In hosting e media management questa parte è molto usata per automatizzare anteprime.

Estrai un frame a un timestamp preciso:

ffmpeg -ss 00:00:10 -i input.mp4 -frames:v 1 thumbnail.jpg

Per generare una miniatura ogni 10 secondi:

ffmpeg -i input.mp4 -vf fps=1/10 thumb_%03d.jpg

Se l’obiettivo è una singola immagine rappresentativa, spesso conviene scegliere un timestamp lontano da intro nere o fade-in. Un frame “tecnicamente corretto” ma visivamente inutile non serve a nessuno.

Streaming e uso in pipeline

FFmpeg non è solo un convertitore locale. Può leggere da input remoti, scrivere su pipe, spingere verso RTMP, generare HLS e integrarsi in script shell o servizi systemd. In un ambiente server questo è spesso il suo impiego migliore.

Invio verso un endpoint RTMP:

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server.example.com/live/streamkey

-re fa leggere il file in tempo reale, utile quando simuli un flusso live. Se invece vuoi creare segmenti HLS per distribuzione HTTP:

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 6 -hls_list_size 0 stream.m3u8

Qui il parametro -hls_time controlla la durata dei segmenti. Segmenti più brevi migliorano la reattività, ma aumentano il numero di file e il carico sul web server o sul bucket di storage.

In automazione, FFmpeg si comporta bene anche dentro script che controllano file in arrivo. Un esempio semplice è un batch su directory:

for f in /data/incoming/*.mkv; do
  [ -e "$f" ] || continue
  out="/data/processed/$(basename "${f%.*}").mp4"
  ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac "$out"
done

In produzione, però, conviene aggiungere controllo di spazio disco, logging e file temporanei separati. FFmpeg può produrre output grandi molto in fretta, quindi una coda non sorvegliata può saturare lo storage del nodo.

Problemi tipici su Ubuntu 20.04

Il primo errore classico è installare FFmpeg e poi scoprire che un codec non è disponibile. La verifica da fare è sempre la stessa: controlla la build con ffmpeg -buildconf e i codec con ffmpeg -codecs. Se il codec manca, non hai un problema nel file: hai una build che non include quel supporto.

Il secondo errore è credere che -c copy funzioni sempre. In realtà dipende da compatibilità tra codec e contenitore. Se il container finale non supporta uno stream, devi ricodificare quello stream specifico invece di copiare tutto.

Il terzo errore è ignorare i messaggi di FFmpeg. L’output non è rumore: indica quasi sempre il punto esatto in cui il flusso si rompe. Esempi da non trascurare sono errori su dimensioni video, sample rate non supportati, timestamp non monotoni e mancanza di spazio su disco.

Per diagnosticare bene, tieni sempre a portata questi tre comandi:

ffmpeg -hide_banner -i input.mp4
ffprobe -hide_banner input.mp4
df -h

Il primo mostra i problemi di parsing del file, il secondo i dettagli tecnici dei flussi, il terzo elimina subito il sospetto del disco pieno. In ambienti server, questa triade risolve più casi di quanto sembri.

Perché usare FFmpeg in modo disciplinato

La tentazione è usare un comando lungo preso al volo e considerarlo “soluzione”. In realtà FFmpeg rende bene quando segui una sequenza precisa: ispeziona il file, definisci il risultato atteso, scegli se copiare o ricodificare, verifica l’output. Questo approccio evita di accumulare file inutili, CPU sprecata e artefatti difficili da spiegare a distanza di giorni.

Su Ubuntu 20.04, il pacchetto ufficiale è sufficiente per una grossa fetta di casi operativi. Quando non basta, il motivo va verificato con metodo: codec richiesto, formato di uscita, opzioni di build, limiti del container. È un tool potente proprio perché non nasconde la complessità; la espone chiaramente, e questo per chi gestisce sistemi è un vantaggio.

Se devi fare un’ultima prova prima di mettere un flusso in produzione, usa un file piccolo, salva l’output in una directory separata e confronta durata, dimensione e riproducibilità con ffprobe. È il modo più semplice per evitare di scoprire tardi che un parametro apparentemente innocuo ha cambiato il risultato in modo sostanziale.