![当两个视频的分辨率不同时,如何将它们并排合并为一个?](https://linux22.com/image/1566192/%E5%BD%93%E4%B8%A4%E4%B8%AA%E8%A7%86%E9%A2%91%E7%9A%84%E5%88%86%E8%BE%A8%E7%8E%87%E4%B8%8D%E5%90%8C%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%E5%AE%83%E4%BB%AC%E5%B9%B6%E6%8E%92%E5%90%88%E5%B9%B6%E4%B8%BA%E4%B8%80%E4%B8%AA%EF%BC%9F.png)
我有两个视频
- 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 或更新版本。