如何使用ffmpeg或opencv将2个重叠的视频合并为一个视频?

时间:2019-06-04 16:00:56

标签: node.js opencv ffmpeg

合并两个视频很容易,已经被回答了两次。我有多个重叠的视频。视频可能与之前的视频重叠。这意味着如果视频1覆盖了1-5个时间轴,那么视频2可能会重叠1,并覆盖3到8。按原样合并它们会导致1-5 | 3-8,而我只需要1-8。

视频按字母顺序排序。

我一般的解决方案是...

  • 抓住视频的最后一帧
  • 如果是第一个视频,请继续
  • 如果它不是第一个视频,即2,逐帧搜索上一步中保存的帧
  • 如果到达当前视频的最后一帧,则没有重叠继续
  • 如果找到一个帧,则将第二个视频剪辑到该帧(包括该帧),然后转到下一个帧
  • 分析完所有视频后,将它们合并为一个视频。

我需要将其翻译为ffmpeg命令。如果是更好的工具,请使用opencv。

如果有更好的方法可以做到这一点,我也对此感兴趣。

1 个答案:

答案 0 :(得分:1)

对于ffmepg,您可以使用以下脚本。它测试了它。但是,从时间上考虑,您必须在视频中将此STARTPTS + 5更改为+25。我在这里输入5来测试合并的发生。

ffmpeg -i 2.mp4 -i 1.mp4 -filter_complex "[1]setpts=PTS-STARTPTS+5/TB[top];[0:0][top]overlay=enable='between(t\,10,15)'[out]" -shortest -map [out] -map 0:1        -pix_fmt yuv420p -c:a copy -c:v libx264 -crf 18 output1.mp4

限制 这需要源足够长,这意味着您需要视频画布,然后使用此脚本将每个视频添加到画布中。

而且在ffmpeg中没有完全自主的使用方式。

你是对的。 Opencv无法处理音频。需要第3方库支持才能同时运行。在此之前,我必须使用ROS从网络摄像头获取声音和视觉到机器人系统。然后,使用NLP处理声音,以用于母语用户界面,并将视觉分别用于locozlaiton和制图。

有一些走动的方式。

首先,您在本地窗口批处理上使用OpenCV模板匹配或图像差异。最小的错误位置将为您提供正确的位置A插入。就毫秒级而言,这应该是准确的。 (如果错误总是很大,则意味着没有重叠并返回异常)

第二,基于从opencv获得的正确位置。调用system.call以使用A参数作为输入来调用上述脚本以进行自动合并。

取决于您的应用程序,如果您需要经常执行此操作,请将opencv python脚本编写为自动融合。如果每个月只有一次,那么用ffmepg手动完成就足够了