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

您也可以使用复杂的filterchain对其进行generate a black background color,例如大小为1280×720,时长为10s,然后对堆叠的视频进行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

https://stackoverflow.com/questions/45436490
复制相似问题