Unire due o più avi o altri formati video da terminale

Per unire due o più video in unico in un unico file è sufficiente eseguire i seguenti comandi da Terminale:

$ cat video1.avi video2.avi > out.avi
$ mencoder -forceidx -oac copy -ovc copy out.avi -o out_final.avi
$ rm out.avi

Il comando cat legge il contenuto di ciascun file, byte per byte, e lo riscrive nel file di output accordandoli nell’ordine specificato. Si potrebbe pensare erroneamente che sarebbe sufficiente questo ma se si prova ad aprire il file out.avi il lettore video utilizzato indicherà come durata totale quella del primo video. Questo perché legge l’header del primo file. In effetti cat non rielabora il flusso dati in ingresso trattando ogni tipo di file allo stesso modo, a prescindere dalla sua natura.

Pertanto è necessario riscrivere l’header del file in uscita. Ecco quindi il motivo del secondo comando: mencoder rilegge tutto lo stream, sia audio che video, e scrive un nuovo header nel file di output finale. Le opzioni -oac copy e -ovc copy indicano al programma di copiare i flussi audio e video senza rielaborarne il formato, così da rendere il processo estremamente veloce.

Un’ultima nota: mentre cat fa parte del set di comandi standard unix ed è quindi già presente in OS X, mencoder richiedere l’installazione a parte. Io uso MacPorts ed è stato sufficiente installare il pacchetto mplayer:

$ sudo port selfupdate
$ sudo port upgrade outdated 
$ sudo port install mplayer

Tutto qui.