como mesclar dois vídeos em um lado a lado quando eles têm resoluções diferentes?

como mesclar dois vídeos em um lado a lado quando eles têm resoluções diferentes?

Eu tenho dois vídeos

  1. deskshare.webm 1280x720 sem áudio
  2. webcams.webm 640x480 com áudio

Os comandos descritos abaixo funcionam conforme necessário

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 alguma sintaxe que me permita eliminar a resolução de entrada manual do segundo vídeo (no meu caso é 640 px)?

É possível usar algo como [1:v]width para obter esse valor automaticamente?

No meu caso também funciona bem isso

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

mas isso só funcionará se a largura do primeiro vídeo for o dobro da largura do segundo vídeo.

Responder1

Isso pode ser feito de forma indireta.

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

O scale2ref redimensiona uma cópia do vídeo secundário para a altura do vídeo principal, mantendo sua largura original. Depois ele é preenchido com preto e empilhado à direita do vídeo principal.

Uma segunda cópia do vídeo secundário é então sobreposta na tela expandida.

Você precisará do ffmpeg 4.0 ou mais recente.

informação relacionada