我有两个视频
- 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 或更新版本。