将多个视频合并成一个

5
我有三个视频:
  • 用摄像机拍摄的讲座
  • 讲座中使用的计算机桌面捕获视频
  • 白板视频
我想创建一个最终视频,这三个组件占据屏幕的某个区域。
是否有开源软件可以实现这一点(例如mencoder、ffmpeg、virtualdub)?你推荐哪一个?
还是有C/C++ API可以使我以编程方式创建这样的东西? 编辑
将来会有多个录制的讲座。这意味着我需要一个通用/自动化的解决方案。
我正在检查是否可以使用GStreamer编写应用程序来完成此工作。对此有何评论? 已解决!
我成功地使用GStreamer的videomixer元素完成了这个任务。我使用gst-launch语法创建一个管道,然后使用gst_parse_launch加载它。这是实现复杂管道的一种非常高效的方法。
以下是一个管道,它接收两个传入的视频流和一个标志图像,并将它们混合成一个流,然后将其复制,以便同时显示和保存到磁盘。
  desktop. ! queue
           ! ffmpegcolorspace
           ! videoscale
           ! video/x-raw-yuv,width=640,height=480
           ! videobox right=-320
           ! ffmpegcolorspace
           ! vmix.sink_0
  webcam. ! queue
          ! ffmpegcolorspace
          ! videoscale
          ! video/x-raw-yuv,width=320,height=240
          ! vmix.sink_1
  logo. ! queue
        ! jpegdec
        ! ffmpegcolorspace
        ! videoscale
        ! video/x-raw-yuv,width=320,height=240
        ! vmix.sink_2
  vmix. ! t.
  t. ! queue
     ! ffmpegcolorspace
     ! ffenc_mpeg2video
     ! filesink location="recording.mpg"
  t. ! queue
     ! ffmpegcolorspace
     ! dshowvideosink
  videotestsrc name="desktop"
  videotestsrc name="webcam"
  multifilesrc name="logo" location="logo.jpg"
  videomixer name=vmix
             sink_0::xpos=0 sink_0::ypos=0 sink_0::zorder=0
             sink_1::xpos=640 sink_1::ypos=0 sink_1::zorder=1
             sink_2::xpos=640 sink_2::ypos=240 sink_2::zorder=2
  tee name="t"

或者你可以使用Adobe After Effects在大约30秒内完成整个过程(尽管价格略高于免费)。 - Adam
4个回答

4
它可以使用ffmpeg完成;我自己也做过。但是,技术上来说,这是相当复杂的。不过,再次强调,任何其他软件在其核心本质上所做的都是一样的。
该过程如下:
1.从源1中解复用音频到原始wav格式
- 从源2中解复用音频 - 从源3中解复用音频 - 从源1中解复用视频到MPEG1格式 - 从源2中解复用视频 - 从源3中解复用视频 - 将音频1 + 音频2 + 音频3合并 - 将视频1 + 视频2 + 视频3合并 - 将音频123和视频123混合到目标中 - 编码为目标格式
我认为让人惊讶的是,您可以将两个原始PCM wav音频文件直接连接起来,结果是有效的。真正令人惊讶的是,您可以对MPEG1/h.261视频执行相同的操作。
就像我之前说过的那样,我已经完成了这项工作。有一些细节被省略了,但它肯定可行。我的程序是用ffmpeg的bash脚本完成的。虽然我从未使用过ffmpeg C API,但我不认为您不能使用它来完成同样的操作。
如果您有兴趣,这是一个非常有教育意义的项目。如果您的目标只是为了将一些视频组合在一起进行一次性项目,那么使用GUI工具可能是更好的选择。

似乎我将来会经常做这种事情,所以我真的想深入研究它。谢谢提供信息! - StackedCrooked
2
他不是在问如何合成视频,使得三个视频都在同一帧内同时显示吗?听起来这只是将视频串联在一起,以便它们一个接一个地播放。 - Jason B
嗯...实际上,我认为你可能是正确的。是的,我的回答只是“简单地”连接字符串。事实上,我甚至两次使用了“连接”这个词。 - Stu Thompson

2
如果您只想将视频合并为一个以及剪辑视频,我建议使用VirtualDub。

2

您可以使用VLC将多个视频文件/流合并为一张图片:

它还具有命令行界面,因此您可以进行脚本/自动化操作。

http://wiki.videolan.org/Mosaic


-1

avisynth可以很容易地做到这一点。在Mosaic部分下可以找到一个示例here

我已经使用过ffmpeg很多次了,但我从来没有碰到过这个功能,但这并不意味着它不存在。如果你想要一个项目,你总是可以用C或C++与libavformat和libavcodec(ffmpeg库)自己实现,但是你将不得不自己动手合成视频。如果你只是想完成视频而不需要编码,肯定使用像avisynth或virtualdub这样的预制工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接