¿Muestre vertical u horizontalmente varios videos usando ffmpeg?

Tengo dos videos de la misma longitud exacta, y me gustaría usar ffmpeg para juntarlos en un solo archivo de video.

¿Cómo puedo hacer esto?

Vea esta respuesta a esta pregunta para una forma más nueva de hacer esto.


Versión antigua:
Debería poder hacer esto usando los filtros pad , película y superposición en FFmpeg. El comando se verá algo así:

ffmpeg -i top.mov -vf 'pad=iw:2*ih [top]; movie=bottom.mov [bottom]; \ [top][bottom] overlay=0:main_h/2' stacked.mov 

Primero, la película que debe estar en la parte superior se rellena al doble de su altura. Luego, se carga la película inferior. Luego, la película inferior se superpone a la película superior acolchada con un desplazamiento de la mitad de la altura de la película acolchada.

Use los filtros vstack (vertical) o hstack (horizontal). Es más fácil y más rápido que otros métodos.

Originales de Alone in the Wilderness :

enter image description here enter image description here

Con vstack:

enter image description here

Ejemplo 1: solo video

 ffmpeg -i input0 -i input1 -filter_complex vstack output 
  • Los videos deben tener el mismo ancho.
  • Puede astackr horizontalmente en lugar de hstack .

Ejemplo 2: con audio

Audio combinado de ambas entradas

Agregue el filtro de amerge para combinar los canales de audio de ambas entradas:

 ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v];[0:a][1:a]amerge=inputs=2[a]" -map "[v]" -map "[a]" -ac 2 output 
  • -ac 2 está incluido para mezclar a estéreo en caso de que ambas entradas contengan audio multicanal. Por ejemplo, si ambas entradas son estéreo, obtendrá una transmisión de audio de salida de 4 canales en lugar de estéreo si omite -ac 2 .

Usando audio de una entrada particular

 ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v]" -map "[v]" -map 1:a output 

Agregar audio silencioso

Si mezclas entradas que tienen audio y entradas que no tienen audio, entonces amerge fallará porque cada entrada necesita audio. Puede agregar audio silencioso con el filtro anullsrc para evitar esto:

 ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v];anullsrc[silent];[0:a][silent]amerge=inputs=2[a]" -map "[v]" -map "[a]" -ac 2 output.mp4 

Ejemplo 4: Tres videos

enter image description here

 ffmpeg -i input0 -i input1 -i input2 -filter_complex "[0:v][1:v][2:v]vstack=inputs=3[v]" -map "[v]" output 

Ejemplo 5: rejilla 2×2

enter image description here

 ffmpeg -i input0 -i input1 -i input2 -i input3 -filter_complex "[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack[v]" -map "[v]" output 

Ejemplo 6: cambiar el tamaño / escalar una entrada

Como ambos videos deben tener lo mismo para vstack y la misma altura para hstack, es posible que necesite escalar uno de los otros videos para que coincida con el otro:

Ejemplo de filtro de escala simple para establecer el ancho de la entrada 0 a 640 y establecer automáticamente la altura conservando la relación de aspecto:

 ffmpeg -i input0 -i input2 -filter_complex "[0:v]scale=640:-1[v0];[v0][1:v]vstack" output 
  • Para obtener un método más avanzado que se adapte a cualquier tamaño de video en un tamaño específico conservando la relación de aspecto, consulte Cómo cambiar el tamaño de los videos con ffmpeg para que quepan en un reproductor de tamaño estático .

  • También puede usar el filtro scale2ref para cambiar automáticamente el tamaño de un video para que coincida con las dimensiones del otro.