Usare FFmpeg per Concatenare in sequenza spezzoni di file video provenienti dal medesimo file video iniziale.

Mar, 16/10/2018 - 18:14
Ritratto di Sargon6

Usare FFmpeg per Concatenare in sequenza spezzoni di file video provenienti dal medesimo file video iniziale.

Inviato da Sargon6 0 commenti

Usare FFmpeg per Concatenare in sequenza spezzoni di file video provenienti dal medesimo file video iniziale.
FFmpeg permette di concatenare in sequenza fra loro solo files video che presentano le medesime caratteristiche (stessi codec, stessa risoluzione, ecc.) quindi questa operazione può essere più o meno complicata a seconda delle caratteristiche dei files multimediali che si vuole unire.
Il caso più semplice si presenta quando si desidera concatenare files video ottenuti estraendo vari spezzoni da un medesimo file video; in questo caso, impostare i parametri -vcodec copy -acodec copy è sempre sufficiente per ottenere spezzoni di file video che hanno le medesime caratteristiche, e la cosa si complica solo se si desidera modificare la risoluzione del video finale. Facciamo un esempio concreto.

ffmpeg -i videoIN.mp4 -to 00:00:10 -vcodec copy -acodec copy video01.mp4 -ss 00:00:30 -to 00:00:40 -vcodec copy -acodec copy video02.mp4 -ss 00:01:20 -to 00:01:30 -vcodec copy -acodec copy video03.mp4 # Partendo dal medesimo file video, estrae 3 spezzoni che conservano le caratteristiche video ed audio audio del file iniziale

Per procedere, occorre prima creare un file di testo contenente il nome dei file da unire nell'ordine in cui devono essere uniti.
Se si vuole mettere il terzo spezzone di file video fra il primo ed il secondo, il file di testo avrà il contenuto seguente:

file 'video01.mp4'
file 'video03.mp4'
file 'video02.mp4'

In questo caso specifico, al file di testo ho dato nome "lista.txt", ma avrei potuto dargli un nome qualsiasi, mentre il nome dei file contenuti nella lista deve sempre rispecchiare il nome dei files video che si vuole unire, nell'ordine in cui si vogliono unire.

A questo punto, per unire i 3 files contenuti nella lista, non ci resta che impartire il comando

ffmpeg -f concat -i lista.txt -c copy videoConcatenati01.mp4 # Crea un video contenente i 3 video elencati nel file "lista.txt" avente le medesime caratteristiche dei video in ingresso

Nel caso in cui si desideri ottenere un file video avente risoluzione diversa da quella dei file video di partenza, occorre usare il parametro "-s" come da esempio seguente:

ffmpeg -f concat -i lista.txt -vcodec libx264 -filter:v fps=30 -acodec copy  -s 640x360 videoConcatenati02.mp4 # Crea un video contenente i 3 video elencati nel file "lista.txt" con i parametri decisi dall'utente, imponendo come risoluzione [-s 640x360]

In questo caso, sia i parametri che rimangono uguali sia i parametri che variano devono essere citati esplicitamente . Se il video originale era orientato verticalmente e si desidera che anche il video concatenato lo sia, ricordarsi di inserire il parametro "-filter:v transpose=1"

ffmpeg -f concat -i lista.txt -vcodec libx264 -filter:v fps=30 -filter:v transpose=1 -acodec copy -s 640x360 videoConcatenati03.mp4 # Crea un video contenente i 3 video elencati nel file "lista.txt" con i parametri decisi dall'utente, imponendo il video verticale e risoluzione [-s 640x360]

Il parametro "-filter:v transpose=0" ruota il video di 90° in senso antiorario e lo ribalta verticalmente;
Il parametro "-filter:v transpose=1" ruota il video di 90° in senso orario;
Il parametro "-filter:v transpose=2" ruota il video di 90° in senso antiorario;
Il parametro "-filter:v transpose=3" ruota il video di 90° in senso orario e lo ribalta verticalmente;
Per sommare le opzioni di "transpose" devono essere scritte separate da una virgola; per esempio:
Il parametro "-filter:v transpose=1,transpose=1" ruota il video di 180° in senso orario. Questa opzione è estremamente utile quando si elabora un video girato con un cellulare tenuto orizzontale ma nel modo sbagliato

ffmpeg -f concat -i lista.txt -vcodec libx264 -filter:v fps=30 -filter:v transpose=1,transpose=1 -acodec copy -s 640x360 videoConcatenati04.mp4 # Crea un video contenente i 3 video elencati nel file "lista.txt" con i parametri decisi dall'utente, imponendo il video ruotato di 180 gradi e risoluzione [-s 640x360]