====== 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" .