Inviato da Marco Brenna il Lun, 25/11/2019 - 15:23
Elaborazione video da terminale

Eccoci alle prese con un altro problema che spesso capita quando si deve fare delle pubblicazioni; ci chiedono di tagliare dei pezzi di video, aggiungere delle schermate di testo di presentazione, unire due o più filmati tra di loro e non sappiamo come fare.

Se preferiamo dei programmi per il video editing su Linux possiamo installare dei programmi come Openshot e usare il mouse per tagliare le parti di video che ci servono, concatenare e creare effetti. Questo comporta un po' di abilità nell'uso del software oltre che alcune basi sulla ricodifica dei video per evitare di ottenere un video in output con caratteristiche diverse.

Quando le operazioni da effettuare sono più elementari oppure vogliamo trovare una tecnica più veloce oppure ancora abbiamo bisogno di creare degli script per effettuare le operazioni in automatico ecco che si può fare del video editing anche col semplice uso del terminale utilizzando ffmpeg.

Vediamo ora le operazioni più utili che si possono effettuare.

Installazione di ffmpeg su Ubuntu

sudo apt-get install ffmpeg
In alcune vecchie versioni di Ubuntu, se il comando sopra non dovesse funzionare il provare: sudo apt-get install avconv e usare il comando avconv invece di ffmpeg. E' infatti una versione ricompilata con un nome diverso di ffmpeg ma il suo utilizzo è pressochè invariato per ciò che dobbiamo fare noi)

Togliere l'audio ad un video utilizzando linux e ffmpeg da terminale
ffmpeg -i input_file.mp4 -an -vcodec copy output_file.mp4

Aggiungere l'audio ad un video utilizzando linux e ffmpeg da terminale
ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 -shortest output.mp4

Nota: il parametro -shortest permette di tagliare il video o l'audio a seconda del canale più corto tra i due. In pratica se è più corto l'audio verrà tagliato un pezzo di video, se è più corto il video verrà tagliato un pezzo di audio. Se omettete questo parametro non verranno effettuati tagli.

Riduzione dimensione del video
ffmpeg -y -i source.mp4 -r 25 -s 1920x1080 -c:v libx264 -b:v 3M -strict -2 -movflags faststart destination.mp4

Questo comando server per cambiare la risoluzione al video. Il video di input dovrà avere la stessa proporzione tra lunghezza e larghezza della risoluzione in uscita per evitare distorsioni dell'immagine. In questo caso l'output sarà di 1920x1080. Il comando va utilizzato solo per la riduzione della risoluzione, utilizzarlo per l'aumento provocherà una visibile distorsione nel risultato finale.

Tagliare un video all'inizio o alla fine con linux e ffmpeg da terminale
ffmpeg -i input_file.mp4 -ss 00:10:25 -t 00:00:05 -acodec copy -vcodec copy output.mp4

-ss serve per stabilire il punto di partenza
-t è la durata, andrà sottratta la parte iniziale

Per conoscere la durata totale del filmato da terminale con linux e ffmpeg
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4

Nota: l'opzione -vcodec copy permette di evitare di recodificare il video e con gli mp4 questa opzione va benissimo. Per altri formati come webm ad esempio, vi ritrovereste un video con evidenti problemi nella parte finale. Omettete -vcodec copy quindi se state modificando formati diversi da mp4 ed aspettate la ricodifica verificando se la qualità finale vi soddisfa. Per aggiustare correttamente la qualità vi servono delle nozioni sui formati video, sui framerate e consiglio di leggere accuratamente la documentazione di ffmpeg.

Creare un video da una immagine con linux e ffmpeg da terminale
ffmpeg -loop 1 -i input_image.png -t 5 output_video_based_on_image.mp4

-t indica la durata del video di output in cui verrà mostrata l'immagine

Concatenare più video con linux e ffmpeg da terminale

Dopo aver creato un po' di schermate descrittive su fondo nero partendo dalle immagini (ovviamente della stessa risoluzione del video in cui vogliamo inserirle, mi raccomando) e dopo aver scomposto in pezzi il video utilizzando i comandi precedenti, ecco come unire nuovamente il tutto mettendo le immagini tra un pezzo e l'altro oppure come unire dei video tra di loro in generale:

Creare un file input.txt con nomi dei file in ingresso con il seguente contenuto:

file 'immagine_intro1.mp4'
file 'pezzo_video1.mp4'
file 'immagine_intro2.mp4'
file 'pezzo_video2.mp4'
file 'immagine_intro3.mp4'
file 'pezzo_video3.mp4'
file 'immagine_intro4.mp4'
file 'pezzo_video4.mp4

Salvare il file.

Usare poi il seguente comando per concatenare (tutti i file video e il file input.txt dovranno essere tutti nella stessa cartella in cui lanciate il comando):
ffmpeg -f concat -i input.txt output.mp4

Oppure con il parametro di copia per non fare la recodifica dei video (ok per gli mp4, per i webm non va bene)
ffmpeg -f concat -i input.txt -c copy output.mp4

Direi che con questi comandi potete fare tutte le operazioni di base sui video direttamente dal vostro terminale.

Se avete qualche dubbio, consiglio o miglioramento a questo articolo, mi raccomando, commentate!

Alla prossima

Aggiungi un commento

Solo ad uso interno per potervi rispondere, non verrà mostrato pubblicamente