FFmpeg 阻塞管道直到完成?

2024-01-08

我目前正在开发一个 C++ 程序(在 Linux 上运行),该程序应该运行 FFmpeg 作为外部实用程序,以使用以下命令将视频文件的音频流编码为 AC3popen()并通过管道捕获输出。

这是我如何尝试实现此目标的示例代码:

int bufferSize = 2048;
char buffer[bufferSize];

FILE *handle = popen("ffmpeg  -i filename.mkv -map 0 -codec:v copy -codec:s copy -codec:a ac3 -f matroska -", "r");
int d = fileno(handle);

while(read(d, buffer, bufferSize) > 0)
{
    // Process Data here
}

实际上这有效,但并不像我预期的那样。这里发生以下情况:FFmpeg 启动,对整个文件进行编码,并且我的程序继续挂起read()。 FFmpeg 完成后,我的程序将继续并从管道读取数据。

但我真正想要的是读取 FFmpeg 的输出while它正在对文件进行编码。现在我想知道如何让它这样工作? FFmpeg 是否阻塞了管道,在完成之前不会向其中写入任何内容,或者我的代码在写入管道时无法读取?或者我需要传递给 FFmpeg 任何参数吗?


也许 bufferSize 在 read(...) 中发生变化? 将其声明为 const 是一个很好的策略。

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

FFmpeg 阻塞管道直到完成? 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • Swift 3 声音播放

    好吧 我已经研究过这个问题 并尝试了许多不同的方法来在单击按钮时播放声音 在 swift 3 中单击按钮时如何播放声音 我的声音位于名为 Sounds 的文件夹中 名称为 ClickSound mp3 该功能下的用户 MARK PLAY S
  • 在php中的目录中查找特定的文件类型,并在转换后将其发送到不同的目录

    我有一个目录 其中有一个mp4 file 也包括其他文件 我想转换成mp3然后将其发送到不同的目录 我用过以下命令行命令转换成mp3 它工作得很好 ffmpeg i 36031P mp4 map 0 2 ac 1 floor english
  • ICS 不更新组织者日历

    我正在编写一个应用程序 它将发送主要由 Outlook 解释的 ics 文件 当我的应用程序发送更新时 它将成功更新除组织者日历之外的每个人的日历 我使用相同的 UID 并且每次都会递增 SEQUENCE 我的 ICS 文件中是否还缺少其他
  • Oracle + JPA - 使用 INTERVAL 进行查询

    我的数据库表中有一个时间戳列 LASTUPDATED 我通过轮询来决定是否应更新某行 如果记录在过去 10 分钟内没有更新 我会更新它 我想将日期处理委托给数据库 但以下方法均无效 这个说 意外的标记 靠近 Query query enti
  • 如何在选择选项中使用复选框

    客户给了我一个设计 其中有一个选择选项菜单 其中包含一个复选框以及作为列表中单独项目的项目名称 是否可以在 选择选项 菜单中添加一个复选框 注意 开发人员需要添加自己的 id 才能使菜单生效 如果可能的话 我只需要 HTML CSS 代码
  • 为特定密码启用 TLS 1.2

    我们有一个 NET 应用程序调用仅允许 TLS 版本 1 2 的 API 服务器 2008 SP2 我们在服务器上运行以下脚本 Copyright 2016 Alexander Hass http www hass de content s
  • Google PHP 客户端不会验证代码,invalid_request

    我正在使用 Google PHP 客户端 4ae272683e18888362e1f935b813e345b99e23b8 该客户端于 8 月 9 日从 github 中提取 我觉得我的代码太简单了 不会出错 require once Go
  • Set 如何检查重复项? Java哈希集

    对于下面的代码 它输出 1 第二个代码输出 2 我不明白为什么会发生这种情况 是因为我添加了相同的对象吗 我应该如何实现所需的输出2 import java util public class maptest public static v
  • 自定义检查器将值恢复为 Unity 中 Play 上之前的值

    所以在我的游戏中我有一个需要平滑移动的对象Vector3 fromPosition to Vector3 toPosition高速float speed 然后返回到开始的地方 一切都非常简单 但是为了在设置关卡时尝试让生活变得更轻松 我决定
  • 如何使用 Python 3.6 发送电子邮件附件

    你介意帮我一下吗 我使用此页面中的所有代码如何使用Python发送电子邮件附件 https stackoverflow com questions 3362600 how to send email attachments with pyt
  • 如何使用http header发送http请求

    提前致谢 我使用此代码在 http 请求中设置 http 标头来验证 url 但我认为缺少一些东西 这就是为什么我无法得到回复 回应仍然是 需要授权 httpParameters new BasicHttpParams String aut
  • 为 iFrameExtractor 编译 ffmpeg 时出现问题

    我正在尝试使用 make 和 build 文件来编译 ffmpegiFrameExtractor 示例 https github com lajos iFrameExtractor 首先我尝试遵循 github 上的自述文件 该文件只说运行
  • 识别并描述 Scala 的泛型类型约束

    我见过 lt gt
  • 从 Dropbox 目录中提取图像并在网站库中显示

    我正在与一位摄影师客户合作创建一个简单的网站 我希望建立一个从 Dropbox 文件夹中提取的照片库 因此每当她想要更新图库中的图像时 她只需将照片从 Dropbox 文件夹中交换出来 很简单 对吧 有没有办法使用 jQuery 或 PHP
  • 如何将控制台应用程序转换为 .dll?

    我正在尝试将用 C 编写的应用程序转换为 DLL 控制台应用程序接收用户的输入 并通过调用我在项目中导入的服务的方法来重置密码 如何将控制台应用程序转换为 DLL 以便每当用户希望更改密码时就调用我的 DLL 右键单击项目 gt 属性 gt
  • Azure 是否为“cloudapp.net”提供 https?

    使用的一大优点Azure Websites是我无需执行任何操作即可获得安全的 HTTP HTTPS 我只需键入https xyz azurewebsites net它有效 我不必担心证书 因为我使用 Azure 提供的子域 在示例中它将是x
  • 在更新中使用通配符?

    我想浏览一个表 并将 notify4 N 的所有实例更改为 notify5 N 其中 N 是 1 9 之间的数字 有没有办法在 SQL 中做到这一点 在 Perl 中这会很容易 但我不确定客户的服务器上是否有 Perl 您可能正在寻找REG
  • 控制选择框中所选值的外观:有没有办法单独渲染所选项目?

    我正在与antd 选择框 https ant design components select 我尝试自定义里面的内容Option其中包含常规的text与一些 JSX 它看起来如下 这也是我在沙箱上准备的小演示 由于我已经自定义了里面的内容
  • TeamCity 构建步骤 - MSBuild 中失败

    该解决方案在我的计算机上成功构建 但在构建服务器上失败 有项目的解决方案 解决方案中的项目 https i stack imgur com mEaCH png 这是 MSBuild 输出 13 42 17 Step 2 5 MSBuild
  • FFmpeg 阻塞管道直到完成?

    我目前正在开发一个 C 程序 在 Linux 上运行 该程序应该运行 FFmpeg 作为外部实用程序 以使用以下命令将视频文件的音频流编码为 AC3popen 并通过管道捕获输出 这是我如何尝试实现此目标的示例代码 int bufferSi