我有多个电话会议的视频文件。但是,每个参与者在不同时间加入了呼叫,这导致每个视频文件具有不同的开始时间偏移值。
Video Start Time
------------------
Video1 00:00
Video2 00:10
Video3 01:40
我的目的是回放这次会议。但是,我没有将会议录制为1个视频,而是录制了多个视频文件。 如何缝合这些视频?
还有a paid solution将视频片段合并到一个剪辑 - 这将使客户端更加简单。但是我可以免费吗?
预期结果是有一个视频在网格上显示三个视频。 当ffmpeg拼接视频时,应该正确考虑它们的开始时间值,以便相应地播放视频。
答案 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