¿Cómo fusionar dos videos en uno uno al lado del otro cuando tienen diferente resolución?

¿Cómo fusionar dos videos en uno uno al lado del otro cuando tienen diferente resolución?

tengo dos videos

  1. deskshare.webm 1280x720 sin audio
  2. webcams.webm 640x480 con audio

Los comandos que se describen a continuación funcionan según sea necesario.

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=w+640" out.mp4

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4

¿Existe alguna sintaxis que me permita deshacerme de la resolución de entrada manual del segundo video (en mi caso es 640 px)?

¿Es posible utilizar algo como [1:v]width para obtener ese valor automáticamente?

En mi caso también funciona bien esto.

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex "[0:v]pad=(iw+iw/2):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4

pero esto solo funcionará si el ancho del primer video es el doble del ancho del segundo video.

Respuesta1

Esto se puede hacer de forma indirecta.

Usar

ffmpeg -i deskshare.webm -i webcams.webm -filter_complex 
   "[1:v][0:v]scale2ref=main_w:ih[sec][pri];
   [sec]setsar=1,drawbox=c=black:t=fill[sec];[pri][sec]hstack[canvas];
   [canvas][1:v]overlay=main_w-overlay_w" out.mp4

Scale2ref cambia el tamaño de una copia del video secundario a la altura del video principal manteniendo su ancho original. Luego se llena de negro y se apila a la derecha del vídeo principal.

Luego se superpone una segunda copia del vídeo secundario en el lienzo ampliado.

Necesitará ffmpeg 4.0 o posterior.

información relacionada