将多个视频合并为一个

2024-01-27

我有三个视频:

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

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

是否有开源软件可以让我做到这一点(mencoder、ffmpeg、virtualdub..)?你推荐哪一个?

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

Edit
未来还会有多次录音讲座。这意味着我需要一个通用/自动化的解决方案。

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

Solved!
我使用 GStreamer 的视频混合器元素成功地做到了这一点。我使用 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"

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

该过程的工作原理如下:

  1. Demux audio from source 1 to raw 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 工具是一个更好的主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个视频合并为一个 的相关文章

  • ASP.NET 会员电子邮件验证

    尝试基于 C 创建电子邮件验证本文 https web archive org web 20211020153319 https www 4guysfromrolla com articles 062508 1 aspx 我创建了一个 ja
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • 如何将异常对象序列化为 xml 字符串

    我想要类似的东西 try code here catch Exception ex stringXML Exception toXML 这样 stringXML 的值就是
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • 如何在Qt中更快地读取数据?

    Qt读取数据库比C 慢吗 我想我错过了一些东西 为了比较阅读速度 我在 Qt 中编写了以下内容 QElapsedTimer t t start int count 0 QString cs Driver SQL Server Server
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]

    这个问题在这里已经有答案了 如果有一些跨平台 C C 代码需要在 Mac OS X iOS Linux Windows 上编译 我如何在预处理器过程中可靠地检测到它们 大多数编译器都使用预定义的宏 您可以找到列表here http sour
  • 如何明智地解释这个编译器警告?

    当我执行这段代码时question https stackoverflow com a 51056490 2411320 我收到这个警告 warning format d expects argument of type int but a
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • 在标准 C 中将 int 转换为 string

    我是 C 新手 我正在寻找一个可以调用函数进行转换的示例int串起来 我发现itoa但这不是标准 C 的一部分 我还发现sprintf str d aInt 但问题是我不知道所需的 str 的大小 因此 我如何传递输出字符串的正确大小 有多
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一

随机推荐

  • Ruby Webrick HTTP 身份验证

    我怎样才能做同样的身份验证工作这一页 http microjet ath cx webrickguide html HTTP Authentication html使用这样的子类 class Configuration lt HTTPSer
  • 为什么 std::iterator 被弃用?

    模板类std iterator http en cppreference com w cpp iterator iterator在 C 17 中已被弃用 为什么这样 这是一个方便的方法来确保std iterator traits http
  • d3.js v4,如何在鼠标悬停时有一条线跟随鼠标,同时也有一个圆圈跟随路径?

    这是我的 js 小提琴 https jsfiddle net DerNalia 3wzLv9yg 1 https jsfiddle net DerNalia 3wzLv9yg 1 我一直在尝试从这里解释代码 带有鼠标悬停工具提示的多系列折线
  • Bootstrap打印CSS去除背景颜色

    当我使用引导程序时 当我尝试打印页面时 它会从所有内容中删除背景颜色 我网站上的几乎所有内容都使用引导类 因此我想避免在引导程序之外使用大量手动 CSS 我发现 bootstrap 使用 media print删除背景颜色 我也使用引导主题
  • std::integral_constant 的否定

    抱歉问了这么简单的问题 但我无法轻松找到答案 谷歌没有说任何关于 C 否定积分常量 和类似查询的有趣内容 C 11 中是否有任何特征使得std true type from std false type反之亦然 换句话说 我想要一些更具可读
  • 使用模拟获取所有日志输出

    我想用模拟获取所有日志输出 我搜索过 但是 只找到了显式模拟logging info或logging warn的方法 我需要所有输出 无论设置的日志记录级别如何 def test foo def my log logs append wit
  • Nginx 重定向到错误的虚拟主机

    我的一个 nginx conf 文件中有大约 1300 个虚拟主机 所有这些都具有以下布局 它们在虚拟主机文件中依次列出 现在我的问题是有时我的浏览器将 site2 重定向到 site1 由于某种原因 域名不匹配 看起来 nginx 总是重
  • 如何使用 Python IMAP 从 Gmail 邮件中删除“来自无人”和“内容类型”?

    尽管我在从很多网站进行大量搜索后完成了大部分工作 但我仍然无法获得我想要的正确输出 Code import imaplib import smtplib import email mail imaplib IMAP4 SSL imap gm
  • 使用自定义任务工厂创建但不启动任务?

    我希望能够在不启动任务的情况下创建任务 类似于运行var a new Task a Start 但有一家定制工厂 工厂提供StartNew 但我找不到分离这两个动作的方法 这可能吗 A TaskFactory基本上是两组默认选项 创建和继续
  • 保存 H2o 数据帧

    我正在使用 10GB 的训练数据框 我使用 H2o 库来加快计算速度 每次加载数据集时 我都应该将数据帧转换为 H2o 对象 这需要花费很多时间 有没有办法存储转换后的 H2o 对象 这样我每次在构建模型时都可以跳过 as H2o trai
  • SwiftUI:清除模态状态或重新初始化

    我有一个 SwiftUI 模式 我想清除其状态或重新初始化 考虑到此模式可以打开可能具有某种状态的其他模式 重新初始化将是首选 这是一个简单的例子 import SwiftUI struct OtherView View State var
  • “fast_abs_path”在什么方面“危险,但可能更快”?

    The Cwd 模块的文档 http perldoc perl org Cwd html abs path and friends指出fast abs path是 更危险 但可能更快的版本abs path 它在什么方面有危险 在什么情况下它
  • 如何在具有不同类型值的 Map 中使用泛型

    我有一个通用的Command界面 public interface Command
  • 作为开发人员,您对普通 Windows 安装进行了哪些更改?

    当我获得一个普通的 Windows 系统时 我会更改很多内容以使其对开发人员更加友好 其中一些事情我每次都会记得 而另一些事情我只是偶尔做 例子 显示所有文件类型的扩展名 使隐藏文件和系统文件可见 关闭 Windows Defender 我
  • C# 重写字典ContainsKey

    我只是找不到任何合适的代码来完成我需要的事情 我在用着Dict ContainsKey但由于我总是创建我需要查找的密钥 因此 ContainsKey 总是为 false 因为 hashKey 不同 并且我创建了我想要一直检查的密钥 有人可以
  • 基于另一个“True”/“False”列表选择列表的元素

    我有两个长度相同的列表 第一个包含字符串 第二个 字符串可以是 True or False 如果第二个列表的第 n 个元素是 True 我想将第一个列表的第 n 个元素附加到另一个列表 所以如果我有 List1 sth1 sth2 sth3
  • jQuery prevUntil() 包括开始选择器和结束选择器

    我想为 prevUntil 或 nextUntil jQuery 选择器方法选择开始和结束选择器 如果我现在实现这些方法 它会获取给定的两个选择器之间的所有内容 i e p prevUntil h1 不会包含 p 和 h1 元素 仅包含它们
  • emacs 终端模式:如何有效地复制和粘贴

    我很难让这个 emacs nw 在终端模式 emacs nw 下有效工作 一些设置信息 工作服务器通过 SSH 连接 emacs 运行在服务器上 通常我使用 SSH 和 emacs nw 进行连接来处理我的文件 emacs 配置取自 htt
  • 使用 IdentityServer4 和 Oidc 客户端时会话超时导致静默更新停止工作

    我目前正在开发一个 Angular4 SPA 应用程序 该应用程序使用 IdentityServer4 作为身份验证服务连接到 NET CORE 1 1 WebApi 在 Angular 方面 我们使用 Damien Bod 1 2 1 中
  • 将多个视频合并为一个

    我有三个视频 用摄像机拍摄的讲座 讲座中使用的计算机的桌面捕获视频 和白板的视频 我想创建一个最终视频 其中这三个组件占据屏幕的特定区域 是否有开源软件可以让我做到这一点 mencoder ffmpeg virtualdub 你推荐哪一个