如何将两个视频帧合并为一个,以便最终的视频同时播放两个帧

如何将两个视频帧合并为一个,以便最终的视频同时播放两个帧

我想将两个视频合并成一个。让我们以 Youtube 上的两个视频为例。我希望最终视频的高度 = 第一个视频的高度 + 第二个视频的高度,宽度 = max(第一个视频的宽度,第二个视频的宽度)。上半部分播放第一个视频,下半部分播放第二个视频。

您知道在 Linux 下如何执行此操作吗?使用 mencoder、ffmpeg 或任何其他命令行命令时最佳的可能性是什么?

答案1

这可以用 ffmpeg 来完成。如果视频大小相同:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih*2:0:0[intv];[intv][1:v]overlay=0:H/2[vid]' \
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4

如果它们的大小不同(其中input1.mp4具有更高的分辨率):

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih*2:0:0[intv];[intv][1:v]overlay=(W-w)/2:H/2[vid]'
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4

如果您知道视频的分辨率,则可以获得更好的输出。假设 input1.mp4 较大(或至少具有相同的分辨率),并且 input2.mp4 的高度为 360:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih+360:0:0[intv];[intv][1:v]overlay=(W-w)/2:H-360[vid]'
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4

答案2

如果两个视频的高度相同,则可以使用堆栈你也可以垂直地虚拟栈pad + overlay,上面的 Vfilter 比产生相同输出的速度更快:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v][1:v]hstack[vid]' \
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4

答案3

我想我在这里找到了答案: https://stackoverflow.com/questions/575705/how-can-i-tile-videos-create-a-video-montage 我将仔细研究该帖子中发布的解决方案。

相关内容