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"
4

4 回答 4

4

可以用ffmpeg完成;我自己做过。也就是说,它在技术上很复杂。也就是说 这就是您可能使用的任何其他软件的核心本质。

这个过程是这样的:

  1. 将音频从源 1 解复用到原始 wav
    • 来自源 2 的多路复用音频
    • 从源 3 多路复用音频
    • 将视频从源 1 解复用到 MPEG1
    • 来自源 2 的 Demux 视频
    • 来自源 3 的 Demux 视频
    • 连接音频 1 + 音频 2 + 音频 3
    • 连接视频 1 + 视频 2 + 视频 3
    • 将音频 123 和视频 123 复用到目标中
    • 编码为目标格式

我认为让人们感到惊讶的是,您可以从字面上连接两个原始 PCM wav 音频文件,结果是有效的。真正让人们吃惊的是,您可以对 MPEG1/h.261 视频做同样的事情。

就像我说的,我做到了。遗漏了一些细节,但它绝对有效。我的程序是用 ffmpeg 在 bash 脚本中完成的。虽然我从未使用过 ffmpeg C API,但我不明白为什么你不能用它来做同样的事情。

如果您愿意,这是一个具有高度教育意义的项目。如果您的目标只是为一个一次性项目制作一些视频,那么使用 GUI 工具可能是一个更好的主意。

于 2009-11-10T23:29:21.413 回答
2

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

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

http://wiki.videolan.org/Mosaic

于 2012-01-10T15:26:40.287 回答
2

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

于 2009-11-10T17:17:24.467 回答
-1

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

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

于 2009-11-10T21:47:53.663 回答