file - FFMPEG:Windows 中的标准输出与文件

标签 file ffmpeg stdout fwrite dump

我有一个使用 ffmpeg 库生成 mpeg4 帧的应用程序 (app1.exe),我想将这些帧转储到另一个从 stdin 读取的应用程序。

连接它们的最简单方法是通过文件,这可行,但现在我想使用管道。

所以在app1.exe中我有

fwrite(pkt.data, 1, pkt.size, (FILE*) f ); // for each frame

它创建了一个 test.m4v 文件,工作正常,但是当我将其更改为

fwrite(pkt.data, 1, pkt.size, stdout ); // for each frame

然后将其转储到文件 app1.exe > test.m4v 文件生成正确,但内容已损坏:

使用文件生成:

generated using FILE

使用 STDOUT 生成:

generated using STDOUT

我的第一个想法是检查应用程序是否生成了除框架之外的任何标准输出,但它没有,使用 FILE 版本进行检查并通过 app1.exe>text.txt 转储标准输出,但文件是空的。唯一的“输出”是 stderrs,但它们仅在应用程序退出时发生。

使用 notepad++ 打开两个版本的 test.m4v 结果显示非常相似的数据,我什至会说两者都是相同的。

所以我的问题是,写入 FILE 和将 stdout 转储到文件有什么区别?

最佳答案

因为你提到了 .exe,我猜这是在 Windows 上。确保与 fwrite() 对应的 fopen() 使用二进制模式,这样换行符就不会被破坏。例如,fopen() 的第二个参数应该是“wb”,而不是“w”。

what's the differences between r and rb in fopen

关于file - FFMPEG:Windows 中的标准输出与文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639407/

相关文章:

python - 如何在 python 文件处理中从 namedtuple 中提取数据

c++ - 在C++中查找所有目录中的所有文件

perl - 如何在 Perl 中同时捕获 stderr、stdout 和退出代码?

python - 为什么我不能使用 "from sys import stdout"重定向 STDOUT?

c++ - Ifstream 在子文件夹中找不到文件

Java 读取文件到字节数组 - 最有效的实现

macos - python ffmpeg无法保存gif,但可以保存mp4

Node.js spawn 不能使用参数内的引号

c - 在 libav 中读取 dumepd RTP 流

python - python 2.5 中的前向兼容打印语句