Unire tracce video multiple facilmente e velocemente grazie a ffmpeg
Oggi volevo unire due tracce video per i miei gameplay di Tomb Raider 1 Remastered. Avevo questi due video separati perché avevo registrato due parti per lo stesso livello, dato che non avevo avuto l'opportunità di completarlo in una sola sessione.
Mi sono imbattuto in questa necessità diverse volte, ma non avevo mai indagato in modo più approfondito.
Dopo una rapida ricerca, ho scoperto la soluzione del secolo: questa operazione può essere eseguita in modo incredibilmente veloce e semplice con ffmpeg concatenate.
Importante: questo metodo consente di unire un video dopo l'altro, senza modificarlo. Se hai bisogno di aggiungere transizioni o fare altre cose, sono necessari software di video editing come Openshot, Premiere, Vegas o simili.
Tabella dei contenuti
Unire video con gli stessi identici codec
Nella maggior parte dei casi i video saranno registrati nello stesso modo e dovremo solo inserire una traccia dopo l'altra.
Per farlo, possiamo seguire questi passi:
- Creiamo una cartella sul tuo PC con tutte le tracce che vogliamo unire
- Rinominiamo le tracce in qualcosa di più semplice, come "part1.mp4", "part2.mp4" e così via
- Creiamo un file di testo all'interno di quella cartella e chiamiamolo "list.txt" o qualcosa di simile
- All'interno del file di testo, scriviamo il percorso di ogni file su righe separate come nel codice di esempio qui sotto
- Eseguiamo il comando ffmpeg nel nostro terminale per unire i video, come nel codice qui sotto
# list.txt
# Vedi: https://trac.ffmpeg.org/wiki/Concatenate#samecodec
file 'part1.mkv'
file 'part2.mkv'
Le prime due righe sono "commenti" e non saranno utilizzate da ffmpeg, puoi rimuoverle se vuoi. Ovviamente nel nostro caso potremmo avere diversi tipi di file come mp4, wav, mov o altri. Questo è solo un esempio.
Il comando ffmpeg da eseguire nel tuo terminale può essere adattato alle nostre esigenze, ecco un esempio:
ffmpeg -f concat -safe 0 -i list.txt -c copy video_uniti.mkv
Questo creerà un file "video_uniti.mkv" all'interno della nostra cartella. Possiamo usare altri tipi di file come mp4, mov, wav e altro. Inoltre, potremmo usare percorsi assoluti sia nel file list.txt che nel comando ffmpeg. L'attributo "-safe 0" può essere omesso se usiamo percorsi relativi.
Volendo, possiamo salvare il comando ffmpeg qui sopra in un file run.bat ed eseguirlo in questo modo, invece di dover copiare il comando ogni volta nel terminale.
Unire video con codec diversi
Questa operazione è sicuramente più complessa ed è più probabile che non vada a buon fine, quindi è consigliato leggere anche la documentazione di ffmpeg su questo argomento.
In breve, dobbiamo eseguire un comando simile al seguente, a seconda delle nostre esigenze:
ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv
In questo caso supponiamo di avere tre diversi tipi di file come input: mp4, webm e mov. WebM è solitamente la versione compressa di un file video, mentre MOV solitamente proviene da dispositivi Apple.
Il parametro "filter_complex" indica a ffmpeg quali flussi prendere dai file di input e inviare come input al filtro concat.
Infine, i parametri "map" indicano a ffmpeg di utilizzare i risultati del filtro concat anziché i flussi direttamente dall'input.
Conclusioni
Nel mio caso, ho unito una traccia lunga 1 ora con un'altra lunga 23 minuti. Il peso di entrambi i file era di 4,77 GB. Il file di output risultante aveva la stessa lunghezza e peso e ci sono voluti solo due minuti per completare l'operazione.
È stato incredibilmente facile e veloce e sicuramente mi aiuterà molto in futuro. Se è stato utile anche a te, seguimi su Facebook e Twitch e iscriviti al mio canale Youtube . Lascia anche un commento qui sotto!