将两个视频剪辑合并为一个,并将它们并排放置

Use*_*841 66 ffmpeg video avidemux

我有两个视频剪辑。两者都是 640x480,持续 10 分钟。一个包含背景音频,另一个包含歌唱演员。我想创建一个大小为 1280x480 的 10 分钟视频剪辑(换句话说,我想将视频并排放置并同时播放,混合来自两个剪辑的音频)。我试图弄清楚如何使用 ffmpeg/avidemux 来做到这一点,但到目前为止我还是空的。当我搜索合并时,它们都指连接。

有什么建议吗?

小智 79

老实说,使用公认的答案会导致我丢帧很多。

然而,使用hstackfilter_complex 产生了完美的流体输出:

ffmpeg -i left.mp4 -i right.mp4 -filter_complex hstack output.mp4
Run Code Online (Sandbox Code Playgroud)

  • 如果有人想知道如何堆叠 2 个以上的视频,您可以简单地指定 `hstack=inputs=3` (11认同)

Jan*_*Jan 68

ffmpeg \
  -i input1.mp4 \
  -i input2.mp4 \
  -filter_complex '[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]' \
  -map '[vid]' \
  -c:v libx264 \
  -crf 23 \
  -preset veryfast \
  output.mp4
Run Code Online (Sandbox Code Playgroud)

这实际上是input1.mp4通过用与原始视频大小相同的黑色填充右侧来使 的大小加倍,然后input2.mp4使用覆盖过滤器放置在该黑色区域的顶部。

来源:https : //superuser.com/questions/153160/join-videos-split-screen

  • [vid] 不在引号中不起作用。--> -map "[vid]" \ (2认同)

llo*_*gan 31

这可以仅使用两个过滤器来完成,并且还将包括来自两个输入的音频。

ffmpeg -i left.mp4 -i right.mp4 -filter_complex \
"[0:v][1:v]hstack=inputs=2[v]; \
 [0:a][1:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 output.mp4
Run Code Online (Sandbox Code Playgroud)
  • hstack将并排放置每个视频。
  • amerge会将来自两个输入的音频组合成一个单一的多声道音频流,并-ac 2使其成为立体声;如果没有这个选项,如果两个输入都是立体声,音频流最终可能会变成 4 个通道。

  • 我丢失了接受答案的音频。这个完美地工作。 (2认同)

San*_*iya 5

ffmpeg -y -ss 0 -t 5 -i inputVideo1.mp4 -ss 0 -t 5 -i inputVideo2.mp4 -i BgPaddingImage.jpg -filter_complex nullsrc=size=720*720[base];[base][2:v]overlay=1,format=yuv420p[base1];[0:v]setpts=PTS-STARTPTS,scale=345*700[upperleft];[1:v]setpts=PTS-STARTPTS,scale=345*700[upperright];[base1][upperleft]overlay=shortest=1:x=10:y=10[tmp1];[tmp1][upperright]overlay=shortest=1:x=366:y=10 -c:a copy -strict experimental -ss 0 -t 5 -preset ultrafast -an output.mp4
Run Code Online (Sandbox Code Playgroud)

并排添加两个视频并添加显示在视频填充上的叠加图像您可以[BgPaddingImage.jpg]在此处更改背景图像设置您的 bg 图像路径。

在下面显示它的视频是从上面的命令创建的

在此处输入图片说明

  • @Sanjay 通常,在 shell 可以理解命令之前,必须转义诸如“[”和“*”之类的字符。我认为这是混乱的一部分。你用什么外壳? (2认同)