Come dividere ed unire video con FFmpeg

Come dividere ed unire video con FFmpeg

Vi è mai capitato di dover suddividere o concatenare file video? Esistono numerosi software per modificare i video, ma non tutti (soprattutto quelli rivolti ad un mercato consumer) permettono di creare velocemente script per elaborare grandi quantità di dati.

In questo articolo parleremo di FFmpeg, un software libero (free software) cross-platform che permette di registrare, convertire e riprodurre video da riga di comando. Grazie a numerosi plugin si può usare per manipolare i flussi video e quindi si possono creare degli script, ad esempio per Bash, che permettono di velocizzare le operazioni di editing video in ambiente GNU/Linux.

Suddividere un file video in più file con FFmpeg

Il primo esempio è la suddivisione di un file video. Con il seguente comando FFmpeg estrae uno spezzone con i primi tre minuti di un file video:

ffmpeg -i input.avi -ss 00:00:00 -t 00:03:00 -acodec copy -vcodec copy output.avi

L'opzione -i specifica il file di origine. L'opzione -ss indica il punto di partenza, mentre l'opzione -t indica la durata del nuovo file. Infine le opzioni -acodec e -vcodec determinano il tipo di codec usato rispettivamente per la traccia audio e la traccia video. In questo entrambe vengono copiate. Come ultimo parametro del comando abbiamo il file di destinazione.

N.B: si può usare anche mencoder con una sintassi praticamente identica per ottenere lo stesso risultato:

mencoder -i input.avi -ss 00:00:00 -endpos 00:03:00 -acodec copy -vcodec copy -o output.avi

Come potete vedere le differenze sono minime.

Concatenare più file video con FFmpeg

Il modo più semplice per unire file video è quello di usare FFmpeg con il filtro concat e passando l'elenco dei file da concatenare in un file di testo. Il file con l'elenco degli spezzoni deve essere nel seguente formato:

file 'video_1.avi'
file 'video_2.avi'
file 'video_3.avi'

Ecco quindi come fare per concatenarli:

ffmpeg -f concat -i list.txt -c copy output.avi

L'opzione -f indica il filtro da usare (concat). A differenza dell'esempio precedente, in questo esempio i file di input sono inseriti all'interno di un file di testo (list.txt). Per concludere si può impostare la copia dell'audio e del video senza modificare i codec (analogo ad -acodec copy -vcodec copy).

EDIT 03/11/2015: Corretto comando per concatenazione, mancava il file di output.

Grazie per l'articolo.
Ho una domanda: la sintassi dell'input file quale deve essere? lavoro con windows

Ciao Edoardo, la sintassi del file di input la trovi già nell'articolo, ovviamente se lavori su windows dovrai inserire i percorsi nella forma C:\...

grazie per l'ottimo esempio. ti segnalo che manca il file di output in fondo al comando.

ffmpeg -f concat -i list.txt -c copy completo.avi

Grazie Roberto, avevo lasciato il comando incompleto. L'ho appena corretto!