¿Cómo puedo unir 2 archivos de video usando ffmpeg?

¿Cómo puedo unir 2 archivos de video usando ffmpeg?

Creé algunos videos en lapso de tiempo a partir de fotos usando este comando:

ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4

Y funcionó muy bien. Ahora quiero unir varios de estos videos time-lapse para hacer un solo video más largo (todos los videos de entrada tienen exactamente el mismo formato). Ya intenté usar:

cat video1.MP4 video2.MP4 > stitch.MP4

pero la salida termina siendo igual a video1.MP4

No quiero transcodificar ni cambiar ningún parámetro del video, solo quiero unirlos de un extremo a otro, como si esos videos estuvieran en una lista de reproducción.

¡Gracias!

Respuesta1

Con una versión reciente de ffmpeg, puede utilizar concat demuxer. Cree un archivo llamado inputs.txt que contenga líneas como:

file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
file 'input4.mp4'

Con un shell bash, puedes usar un bucle for para crear el archivo de esta manera:

rm inputs.txt
for f in input{1..4}.mp4; do echo "file '$f'" >> inputs.txt; done

Entonces,

ffmpeg -f concat -i inputs.txt -c copy output.mp4

Dado que utiliza -c copy, esto no tendrá ninguna pérdida.

Respuesta2

La salida no será igual a video1.mp4, pero los encabezados y pies de página del video comenzarán y terminarán alrededor de video1.mp4, por lo que su reproductor no entrará en video2.mp4. Suponiendo que los vídeos tengan la misma tasa de bits/códec, etc.:

cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4

Tenga en cuenta que este no es necesariamente el mejor método (sería mejor hacer todos los lapsos de tiempo al mismo tiempo en un video), ya que si el códec tiene pérdidas, inducirápérdida de generación.

Respuesta3

Sé que dijiste con ffmpeg, pero tuve buena suerte usando mp4box para simplemente unir archivos. Puedes descargarlo aquí.

http://gpac.wp.mines-telecom.fr/mp4box/

Aquí está el ejemplo de la línea de comando:

mp4box -cat <file> -cat <file> dest.mp4

información relacionada