【问题标题】:Combine multiple videos into one将多个视频合二为一
【发布时间】:2010-12-15 03:20:35
【问题描述】:

我有三个视频:

  • 用摄像机拍摄的讲座
  • 讲座中使用的计算机的桌面捕获视频
  • 和白板的视频

我想创建一个最终视频,其中这三个组件占据屏幕的某个区域。

是否有允许我这样做的开源软件(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"

【问题讨论】:

  • 或者你可以用 Adob​​e After Effects 在大约 30 秒内完成整个事情(当然价格比免费的略高)

标签: c++ video ffmpeg gstreamer


【解决方案1】:

如果您只想将素材组合成一个视频并裁剪视频,我会使用虚拟配音。

【讨论】:

    【解决方案2】:

    avisynth 可以很容易地做到这一点。查看马赛克部分下的here 以获取示例。

    我已经使用了很多 ffmpeg,而且我从来没有偶然发现过这个功能,但这并不意味着它不存在。如果您正在寻找一个项目,您可以随时使用 C 或 C++ 使用 libavformat 和 libavcodec(ffmpeg 库)自行完成,但您必须自己动手合成视频。如果您只是想完成视频而不是修改代码,请务必使用 avisynth 或 virtualdub 等预制工具。

    【讨论】:

      【解决方案3】:

      可以用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 工具可能是一个更好的主意。

      【讨论】:

      • 看来我以后会经常做这种事情,所以我很想深入研究一下。感谢您的信息!
      • 他不是问要合成视频,使所有三个视频同时显示在一个帧内吗?听起来这只是将视频连接起来,让它们一个接一个地播放。
      • 嗯...实际上,我认为您可能是正确的。是的,我回答的是“只是”连接。事实上,我什至两次使用了“连接”这个词。
      【解决方案4】:

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

      有一个命令行界面,因此您可以编写脚本/自动化它。

      http://wiki.videolan.org/Mosaic

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-26
        • 2019-03-30
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-12
        • 2019-09-30
        相关资源
        最近更新 更多