当两个视频的分辨率不同时,如何将它们并排合并为一个?

当两个视频的分辨率不同时,如何将它们并排合并为一个?

我有两个视频

  1. deskshare.webm 1280x720 无音频
  2. 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 或更新版本。

相关内容