
У меня есть два видео
- deskshare.webm 1280x720 без звука
- webcams.webm 640x480 со звуком
Описанные ниже команды работают по мере необходимости.
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
Есть ли какой-либо синтаксис, который позволит мне избавиться от ручного ввода разрешения второго видео (в моем случае это 640 пикселей)?
Можно ли использовать что-то вроде [1:v]width, чтобы получить это значение автоматически?
В моем случае это тоже отлично работает
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
но это сработает только в том случае, если ширина первого видео в два раза больше ширины второго видео.
решение1
Это можно сделать окольным путем.
Использовать
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 изменяет размер одной копии вторичного видео до высоты основного видео, сохраняя при этом его исходную ширину. Затем он заполняется черным и складывается справа от основного видео.
Затем на развернутый холст накладывается вторая копия вторичного видео.
Вам понадобится ffmpeg 4.0 или новее.