
Eu tenho dois vídeos
- deskshare.webm 1280x720 sem áudio
- 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.