FFMPEG:Windows中的STDOUT与FILE

时间:2014-03-25 15:39:27

标签: 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文件生成正确,但内容已损坏:

使用FILE生成:

generated using FILE

使用STDOUT生成:

generated using STDOUT

我的第一个想法是检查应用程序是否生成除帧之外的任何标准输出,但它没有使用FILE版本检查并通过app1.exe>text.txt转储标准输出,但文件为空。唯一的"出局"是stderrs,但它们只在应用程序退出时出现。

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

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

2 个答案:

答案 0 :(得分:2)

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

what's the differences between r and rb in fopen

答案 1 :(得分:2)

(我认为)Windows默认以ascii模式打开stdout,并自动转换行结尾。如果将stdout设置为binmode,则应该解决问题。

What is the simplest way to write to stdout in binary mode?