Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File FFMPEG:Windows中的标准输出与文件_File_Ffmpeg_Stdout_Fwrite_Dump - Fatal编程技术网

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

File FFMPEG:Windows中的标准输出与文件,file,ffmpeg,stdout,fwrite,dump,File,Ffmpeg,Stdout,Fwrite,Dump,我有一个应用程序(app1.exe),它使用ffmpeg库生成mpeg4帧,我想将这些帧转储到另一个从stdin读取的应用程序 连接它们最简单的方法是通过文件,这是可行的,但现在我想使用管道 所以在app1.exe中我有 fwrite(pkt.data, 1, pkt.size, (FILE*) f ); // for each frame 它创建了一个test.m4v文件,工作正常,但当我将其更改为 fwrite(pkt.data, 1, pkt.size, stdout ); // for

我有一个应用程序(
app1.exe
),它使用ffmpeg库生成mpeg4帧,我想将这些帧转储到另一个从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
文件生成正确,但内容已损坏:

使用以下文件生成:

使用标准输出生成:

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

使用notepad++打开这两个版本的test.m4v,显示了非常相似的数据,我甚至可以说这两个版本的数据都是一样的


所以我的问题是,写入文件和将标准输出转储到文件之间有什么区别?

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


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

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

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