Concatenar vídeos con FFmpeg

Es un hecho que pocas veces se tiene en cuenta que MPEG es un códec que permite la concatenación tal cual. Se puede colocar un archivo codificado de esta manera al final del otro y cuando termina éste la reproducción continúa sin problemas con el nuevo.

Esto no tiene por qué ocurrir con el formato de dos vídeos cualesquiera que se desee concatenar, pero gracias a ffmpeg, se pueden convertir primero a MPEG y posteriormente al formato que más nos guste. Por ejemplo, concatenaremos los vídeos vídeo1.avi, vídeo2.avi, ..., vídeoN.avi y guardaremos el resultado empleando el códec EL_CODEC. Podemos obtener un listado de los códecs disponibles ejecutando

ffmpeg -codecs

En primer lugar deberemos crear una tubería (FIFO) por cada vídeo que deseemos concatenar:

mkfifo fifo1.mpeg
mkfifo fifo2.mpeg
mkfifo ...
mkfifo fifoN.mpeg

A continuación, recodificamos los vídeos originales a MPEG y los volcamos en las tuberías en segundo plano:

ffmpeg -i video1.avi -vcodec mpeg1video fifo1.mpeg < /dev/null &
ffmpeg -i video2.avi -vcodec mpeg1video fifo2.mpeg < /dev/null &
ffmpeg -i ...        -vcodec mpeg1video ...        < /dev/null &
ffmpeg -i videoN.avi -vcodec mpeg1video fifoN.mpeg < /dev/null &

Para terminar, concatenamos las tuberías y las pasamos como entrada a ffmpeg para que realice la composición final:

cat fifo1.mpeg fifo2.mpeg ... fifoN.mpeg | ffmpeg -i - -vcodec <EL_CODEC> output.mkv