gpt4 book ai didi

c++ - 将多个视频合并为一个

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:34 33 4
gpt4 key购买 nike

我有三个视频:

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

我想制作一个最终视频,其中这三个组件占据屏幕的特定区域。

是否有允许我执行此操作的开源软件(mencoder、ffmpeg、virtualdub 等)?你推荐哪个?

或者是否有 C/C++ API 可以让我以编程方式创建类似的东西?

编辑
以后会有多场录制讲座。这意味着我需要一个通用/自动化的解决方案。

我目前正在检查是否可以使用 GStreamer 编写应用程序来完成这项工作。对此有何评论?

已解决!
我使用 GStreamer 的 videomixer 元素成功地做到了这一点。我使用 gst-launch 语法创建管道,然后使用 gst_parse_launch 加载它。这是实现复杂管道的一种非常高效的方式。

这是一个管道,它接收两个传入的视频流和一个 Logo 图像,将它们混合成一个流并复制它,以便它同时显示并保存到磁盘。

  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"

最佳答案

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

过程是这样的:

  1. Demux 音频从源 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 工具可能是个更好的主意。

关于c++ - 将多个视频合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709574/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com