合并具有不同开始时间的视频并在网格上显示它们

时间:2017-08-01 11:25:12

标签: video merge ffmpeg

我有多个电话会议的视频文件。但是,每个参与者在不同时间加入了呼叫,这导致每个视频文件具有不同的开始时间偏移值。

Video   Start Time
------------------
Video1  00:00
Video2  00:10
Video3  01:40

我的目的是回放这次会议。但是,我没有将会议录制为1个视频,而是录制了多个视频文件。 如何缝合这些视频?

还有a paid solution将视频片段合并到一个剪辑 - 这将使客户端更加简单。但是我可以免费吗?

预期结果是有一个视频在网格上显示三个视频。 当ffmpeg拼接视频时,应该正确考虑它们的开始时间值,以便相应地播放视频。

1 个答案:

答案 0 :(得分:2)

使用-itsoffset指定各个流的偏移量(s.msec)。该值将从各个流的时间戳中减去/添加到各个流的时间戳。显然,您必须根据输入流来调整偏移量。

例如:

ffmpeg \
-itsoffset -1 -i video.mp4 \
-itsoffset -2 -i video.mp4 \
-itsoffset -3 -i video.mp4 \
-filter_complex hstack=inputs=3 \
-c:v libx264 -crf 23 out.mp4

这为您提供了使用hstack filter彼此相邻的视频流,每个偏移了一秒。

您还可以使用复杂的过滤链到generate a black background color,例如尺寸为1280×720,持续时间为10秒,然后overlay堆叠的视频和merge音频流:

ffmpeg \
-itsoffset -1 -i video.mp4 \
-itsoffset -2 -i video.mp4 \
-itsoffset -3 -i video.mp4 \
-filter_complex \
"color=c=black:s=1280x720:d=10[black]; \
[0:v][1:v][2:v]hstack=inputs=3[stacked]; \
[0:a][1:a][2:a]amerge=inputs=3[outa]; \
[black][stacked]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[outv]" \
-map "[outv]" -map "[outa]" -c:v libx264 -crf 23 output.mp4