FFMPEG tutorial, da zero a 100 in poco tempo

Un video tutorial in italiano e una collezione di comandi per imparare ad usare FFMPEG in poco tempo.

Contenuti nascondi

FFMPEG è il coltellino svizzero per editare e convertire audio e video da riga di comando. In questa guida scoprirai:

  • che cos’è FFMPEG
  • dove scaricare FFMPEG
  • come installare FFMPEG su Windows
  • come usare FFMPEG da riga di comando

Tutte queste nozioni le puoi imparare direttamente in questo video tutorial in italiano di circa 2 ore, prodotto in collaborazione Andrea Ciraolo di Officine.me.

Qui sotto trovi la raccolta dei comandi illustrati nel video e che ti permetteranno di sfruttare al massimo questo fantastico tool.
Ricorda che i comandi sui sistemi Windows devono essere richiamati con l’estensione .exe:
ffmpeg → ffmpeg.exe

Iniziamo dall’Help

Comando per consultare l’help

ffmpeg -h full | more
ffmpeg -h encoder=mp3 -hide_banner (encoder/decoder/demuxer/muxer/filter)
ffmpeg -formats audio (audio/video)
ffmpeg -codecs

Comando per info sul file

ffmpeg -i file
ffprobe file

FFPROBE estrae dettagli in formato testo parsabile

Estrai formato e stream del file:

ffprobe -v error -show_format -show_streams input.mp4

Estrai la dimensione del file:

ffprobe -v error -show_entries format=size input.mp4

Comando precedente con output in formato json:

ffprobe -v error -show_entries format=size -print_format json input.mp4

Convertire audio da un formato all’altro (WAV to MP3)

ffmpeg -i audio.wav audio.mp3

ffmpeg -i audio.wav -c:a mp3 -b:a 192k -ar 44100 -ac 2 output.mp3

Convertire video da un formato all’altro (MKV to MP4)

Convertire video in MP4 

ffmpeg -i input.mkv -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 64k -ac 2 out.mp4

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

Convertire video in MKV

ffmpeg -i input.mp4 -c:v libx264 -crf 18 -c:a aac output.mkv

ffmpeg -i input.mp4 -c:v h264 -c:a aac output.mkv

Convertire video in audio (MP4 to MP3)

ffmpeg -i INPUT.mp4 -vn -c:a mp3 -b:a 192k -ar 44100 -ac 2 OUTPUT.mp3

Selezionare audio multitraccia da file video

Maggiori dettagli sullo switch -map sono disponibili a questo link della wiki ufficiale.

ffmpeg -i AAA.mkv -map 0:1 -acodec mp3 -bitrate 128 AAA.mp3

ffmpeg -i AAA.mkv -map 0:1 -c:a mp3 -b:a 192k -ar 44100 -ac 2 AAA.mp3

Convertire audio in video con immagine statica (es. MP3 to MP4 o pubblicare podcast su Youtube)

ffmpeg -loop 1 -framerate 2 -i IMMAGINE.jpg -i PODCAST.mp3 -c:v libx264 -preset fast -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p output.mp4

Convertire Video in GIF (MKV to GIF o MP4 to GIF)

ffmpeg -i video.mkv video.gif
ffmpeg -i video.mkv -r 4 video.gif (-r = framerate per secondo)
ffmpeg -i video.mkv -r 4 -vf scale=640:-1 video.gif (scale a 640*auto)

Tagliare audio o video

Dal secondo X per X secondi

ffmpeg -i input.mp4 -ss start_seconds -t duration_seconds output.mp4

ffmpeg.exe -i Fireplace-12-hours.mp4 -ss 00:00:00 -t 21600 -c:v copy -c:a copy  Fireplace-6-hours.mp4

Dal secondo X al secondo Y

ffmpeg -i input.mkv -ss start_seconds -to end_seconds output.mp4

ATTENZIONE: anteporre lo switch di seeking

L’ encoder legge il file da t0 (inizio) e perde tempo fin da subito a codificare anche quella parte di video che non ci serve. Evitiamolo spostando lo switch:

ffmpeg -ss [start_seconds] -i input.avi -t [duration_seconds] output.avi

Sostituire audio al video

Rimuovere audio dal video

ffmpeg -i INPUT.mp4 -c:v copy -an OUTPUT.mp4

Unire stream audio al video

ffmpeg -i OUTPUT.mp4 -i AUDIO.wav -shortest -c:v copy -c:a aac -b:a 256k COMBINED.mp4

ATTENZIONE: cosa significa “-shortest”

Questo switch stoppa la codifica quando termina lo stream di input più corto.

Regolare i LUFS per Alexa, Youtube, Spotify

Tabella valori Loudness da osservare sulle piattaforme online

tabella comparativa LUFS

LUFS per Alexa skill Flash Briefing

Link alla documentazione ufficiale Alexa Amazon Skill

ffmpeg -i PODCAST.mp3 -af loudnorm=I=-14:TP=-3:LRA=11:print_format=json -f mp3 PODCAST-Alexa.mp3

LUFS per Google Home

Link alla documentazione ufficiale Google Home

1-pass:

ffmpeg -i PODCAST.mp3 -af loudnorm=I=-16:dual_mono=true:TP=-1.5:LRA=11:print_format=summary -f null -

Qui sotto il risultato:

Input Integrated:    -27.2 LUFS --- da inserire nel comando sotto
Input True Peak:     -14.4 dBTP --- da inserire nel comando sotto
Input LRA:             0.1 LU
Input Threshold:     -37.7 LUFS --- da inserire nel comando sotto

Output Integrated:   -15.5 LUFS
Output True Peak:     -2.7 dBTP
Output LRA:            0.0 LU
Output Threshold:    -26.2 LUFS

Normalization Type:   Dynamic
Target Offset:        -0.5 LU

2-pass con i valori misurati:

ffmpeg -i PODCAST.mp3 -af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-27.2:measured_TP=-14.4:measured_LRA=0.1:measured_thresh=-37.7:offset=-0.5:linear=true:print_format=summary output.wav

Modificare risoluzione, framerate e bitrate video

Rimuovere audio al video e ridimensionare a 640px

ffmpeg -i input -an -c:v libx264 -crf 26 -vf scale=640:-1 out.mp4

Ridimensionare risoluzione Video a 1080p

ffmpeg -i input -acodec copy -c:v libx264 -crf 26 -vf scale=1920:1080 out.mp4

Ridurre bitrate Video da 5M a 500k

ffmpeg -i input.mkv -b:v 500k -c:a copy output.mkv

CRF factor (Constant Rate Factor), quale valore utilizzare

########### CRF factor ###########
0 -------- 18 -------- 23 -------- 28 -------- 51
lossless --- better ---||--- worse ---------- worst

Concatenare più tracce audio

ffmpeg.exe -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3 -filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]' -map '[out]' AudioUnito.mp3

ATTENZIONE: il primo file 1.mp3 corrisponde a 0:0 e così via.

Mixare più tracce audio in una sola

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex ‘amix=inputs=3:duration=first:dropout_transition=3’ OUTPUT

Spettro audio (waveform) per video Podcast

ffmpeg -y -i audio-podcast.mp3 -loop 1 -i image-fhd-1920x1080.png -filter_complex "[0:a]showwaves=s=1920x150:colors=Yellow:mode=line,format=yuv420p[v];[1:v][v]overlay=0:550[outv]" -map "[outv]" -pix_fmt yuv420p -map 0:a -c:v libx264 -c:a copy -shortest spettro-waveform-ffmpeg-podcast.mkv -hide_banner

Comando con tabulazione per shell Linux

ffmpeg -y -i audio-podcast.mp3 -loop 1 -i image-fhd-1920x1080.png -filter_complex
    "[0:a]showwaves=s=1920x150:colors=Yellow:mode=line,format=yuv420p[v]; \
    [1:v][v]overlay=0:550[outv]" \
    -map "[outv]" -pix_fmt yuv420p \
    -map 0:a -c:v libx264 -c:a copy -shortest spettro-waveform-ffmpeg-podcast.mkv \
    -hide_banner

Note alla sintassi

-y = sovrascrive senza conferma file di output se esistente
[0] = audio-podcast.mp3
[1] = image-fhd-1920x1080.png
1920x150 = larghezza x altezza waveform/spettro
overlay=0:350 = 0px da destra, 350px dall’alto
-hide_banner = non stampa a video le info iniziali, utili ai developer di FFMPEG
Ecco il risultato.

Encoding veloce con accelerazione hardware GPU

Per velocizzare encoding o transcode dei video, è possibile utilizzare la potenza di calcolo della GPU.
A questo link è possibile leggere una introduzione alle varie API integrate in FFMPEG per sfruttare questa opportunità.
Qui sotto un elenco di comandi da utilizzare sulle GPU dei produttori Intel, Nvidia e AMD.

Check accelerazione hardware

ffmpeg -hwaccels

Encoding con GPU Intel

A questo link Intel illustra come utilizzare l’accelerazione hardware di FFMPEG sulle proprie architetture.

ffmpeg.exe -hwaccel qsv -i input.mkv -c:v h264_qsv -b:v 1M -look_ahead 1 -c:a copy output.mkv

"-look_ahead 1" = migliora la qualità video ma può essere rimosso se non supportato

Encoding con GPU Nvidia (WARNING da testare)

A questo link Nvidia illustra come funziona l’accelerazione hardware di FFMPEG sulle proprie architetture.

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mkv -c:v h264_nvenc -b:v 500k -c:a copy output.mkv

Ciclo FOR per compressione videolezioni

Questo ciclo FOR da usare su shell (Linux o Windows WLS). Campi modificabili:
– filtro per MKV, modificare a piacimento (mkv, mp4, mov)
– mantiene il nome del file sorgente modificando il contenitore di output (MKV -> MP4)

for lez in $(ls|grep mkv);
do
	ffmpeg -i "${lez}" -c:v libx264 -crf 40 -filter:v fps=fps=10 -c:a libopus -application voip -b:a 16k -ac 1 -cutoff 12000 $(echo "${lez}"|sed 's/mkv/mp4/');
done

Comments? Dubbi? Perplessità?

Nel piè di pagina troverai i miei contatti.
Preferisco che tu mi scriva una mail.

In the footer you will find my contacts.
I’d rather you write me an e-mail.