我有两个webm文件,其中包含视频会议的音频和视频录制。这两个文件只包含会话的一面。它们的长度不同(有人在另一个之前加入),但我有每个视频文件开始时间的毫秒时间戳。
在时间轴上,他们看起来像这样:
webm 1: -----------------------------------------------
webm 2: -----------------------------
或者像这样:
webm 1: -----------------------------------------------
webm 2: -----------------------------
我想将这两个视频文件合并为一个文件,以便:
目标结果:-------------- =========================== --- -
新视频的开头和结尾将显示视频文件的黑色占位符,此时此混合流中没有数据。
目前我使用此命令:
ffmpeg -i 1463408731413703.webm -i 1463408880317860.webm -filter_complex \
"[0:v][1:v]hstack=inputs=2[v]; \
[0:a][1:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 -c:v libvpx output.webm
这会创建一个这样的视频:
效果不佳:===================== ------------------
即。谈话不同步。
如何使用ffmpeg组合两个不同长度和不同开始时间的视频流,以便最终得到上面的“目标结果”?
非常感谢!
答案 0 :(得分:5)
下面的命令显示了3个输入的情况。第一个输入是最长的并保持在左侧。第二次输入在t = 1秒开始并持续3秒,第三次从t = 4s开始持续2秒。它们显示在右侧。
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex \
"[0]pad=2*iw:ih[l];[1]setpts=PTS-STARTPTS+1/TB[1v]; [l][1v]overlay=x=W/2[a]; \
[2]setpts=PTS-STARTPTS+4/TB[2v]; [a][2v]overlay=x=W/2[v]; \
[1]adelay=1000|1000[1a]; [2]adelay=4000|4000[2a]; [0][1a][2a]amix=inputs=3[a]" \
-map "[v]" -map "[a]" out.mp4
adelay
过滤器用于立体声输入流。
答案 1 :(得分:0)
如果您仍在等待答案,请简单地使用它:
为第二个文件添加了60000毫秒的延迟,为第三个文件添加了120000毫秒的延迟。第一个文件是最长的文件。
ffmpeg -i file_1.mp3 -i file_2.mp3 -i file_3.mp3 -filter_complex
"[1]adelay=60000[file_2];[2]adelay=120000[file_3]; [0][file_2][file_3]amix=3"
output.mp3