====== 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 640x480 :
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 320x240 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" .