我目前正在开发一个 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(使用前将#替换为@)