Indice

Usare FFmpeg

Autore: Fabio Di Matteo
Ultima revisione: 04/10/2023 - 09:27

«FFmpeg è una suite software completa per registrare, convertire e riprodurre audio e video. Si basa su libavcodec, libreria per la codifica audio/video. FFmpeg è sviluppato su Linux, ma può essere compilato ed eseguito su qualunque dei principali sistemi operativi, incluso Microsoft Windows. »

Da Wikipedia, l'enciclopedia libera.

Tutti i comandi contenuti in questa pagina possono,naturalmente, essere combinati tra di loro per ottenere il risultato desiderato.

Elencare i formati disponibili

Il seguente comando fornisce un elenco di formati disponibili per codifica(E) e decodifica(D):

ffmpeg -formats

Elencare i codecs disponibili

Il seguente comando fornisce un elenco dei codecs disponibili per codifica(E) e decodifica(D):

ffmpeg -codecs

in cima all'output del comando c'è anche una legenda esplicativa.

Ricavare informazioni su un file

E' possibile ricavare informazioni su un file semplicemente con il seguente comando:

ffmpeg -i input.mp4

Eseguire una codifica

Di seguito alcuni esempi di codifiche di filmati con tanto di traccia audio.

Matroska libtheora e libvorbis

In questo esempio andremo a creare un file matroska con un bitrate video di 1920k (-b:v 1920k) , un bitrate audio di 96k (-b:a 96k) specificando come codificatore video libtheora, dodificatore audio libvorbis e formato contenitore matroska (estenzione .mkv) (-f matroska).

ffmpeg -i input.avi -b:v 1920k -b:a 96k -vcodec libtheora -acodec libvorbis   -f matroska output.mkv

Matroska x264 e ac3

ffmpeg -i input.avi -c:v  libx264   -b:v 1920k   -codec:a ac3  -b:a 256k  -map 0:v -map 0:a output.mkv

Avi xvid

Qui invece andremo a creare un file avi con un bitrate video di 1920k (-b:v 1920k) , un bitrate audio di 256k (-b:a 256k) specificando come codificatore video mpeg4, dodificatore audio libmp3lame e formato contenitore avi (estenzione .avi , -f avi) .

ffmpeg -i input.mkv -c:v mpeg4 -b:v 1920k  -vtag xvid  -codec:a libmp3lame -b:a 256k -f avi -map 0:v -map 0:a output.avi 

Con -map 0:v -map 0:a indichiamo che vogliamo rippare tuitte le tracce video e tutte quelle audio.

Divisione dei file

Dividiamo un file video(o audio) in base al tempo lasciando inalterata la codifica. Ecco la sintassi:

ffmpeg -i inputfile.mkv -ss ORE:MINUTI:SECONDI -t ORE:MINUTI:SECONDI -acodec copy -vcodec copy outputfile.mkv

-acodec copy -vcodec copy indicano che non deve essere eseguita alcuna codifica al file.

Concatenazione di file

In questo caso metteremo il percorso dei file da concatenare in un file di testo e poi useremo il filtro concat di ffmpeg per concatenare i file lasciando inalterata la codifica.

lista.txt

file 'video0.mkv'
file 'video1.mkv'
file 'video2.mkv'

e poi impartiremo il seguente comando:

 ffmpeg -f concat -i lista.txt -c copy

-c copy indica che non deve essere eseguita alcuna ulteriore codifica al file.

Estrazione audio

In questo esempio estraiamo solo l'audio (-vn) del file input.mp4 con un bitrate di 128kb/s (-ab 128k) che verra salvato su un file mp3 (outputfile.mp3).

ffmpeg -i input.mp4 -vn -ab 128k outputfile.mp3

Estrazione video

Possiamo estrarre solo la traccia video da un file multimediale grazie al parametro (-an):

ffmpeg -i inputfile.avi -an outputfile.avi

Ridimenzionare fotogrammi traccia video

Con il comando sottostante andremo a ridimenzionare i fotogrammi del video a 640×480 :

ffmpeg -i input.mp4 -s 640x480  output.mp4

Ritagliare porzioni di un video

Per ritagliare porzioni di video possiamo usare il filtro crop specificando larghezza, altezza e coordinate di origine della selezione rettangolare da ritagliare:

ffmpeg -i input.mp4 -filter:v "crop=320:240:0:0" -acodec copy    out.mp4

dall'esempio si evince che sto facendo un ritaglio con una selezione rettangolare da 320×240 pixel partendo dalle coordinate 0,0 . Inoltre in questo caso ho deciso di non codificare l'audio ulteriormente. Di default il codec video utilizzato è h264.

Uno script per codificare video da mandare con whatsapp

#!/bin/bash
 
FILE="$1"
OUT="${FILE%%.*}".mp4
 
ffmpeg -i $1 -s 640x480 -aspect 16:9 -vcodec libx264 -acodec aac /home/$USER/Desktop/$OUT
echo
echo "Video sul desktop."

Unire traccia audio con traccia video

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a copy output.mkv

Catturare schermo con e senza audio

#!/bin/env bash
 
data=$(date '+%Y-%m-%d_%H-%M-%S')
 
audio=" -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo -ac 2 "
 
ffmpeg $audio  -f x11grab  -show_region 1 -framerate 25 -video_size 1366x768\
 -i :0.0  capture_$data.mkv

Se non vogliamo impostare la cattura dell'audio eliminiamo la variabile $audio.
Per determinare quale periferica di input dobbiamo usare possiamo utilizzare il comando :

pactl list short sources

in questo caso abbiamo usato “alsa_input.pci-0000_00_1b.0.analog-stereo” .

Catturare solo audio

Catturare solo audio (per esempio dal microfono)

#!/bin/env bash
 
data=$(date '+%Y-%m-%d_%H-%M-%S')
 
audio=" -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo -ac 2 "
 
ffmpeg $audio   capture_$data.m4a

Per determinare quale periferica di input dobbiamo usare possiamo utilizzare il comando :

pactl list short sources

in questo caso abbiamo usato “alsa_input.pci-0000_00_1b.0.analog-stereo” .