使用管道将文件i / o引导到另一个进程

刚开始学习/使用管道,并想知道如何将应用程序的文件输出路由到管道,以便其他应用程序可以使用它。

确切地说,我想将ffmpeg的输出(转码后的video数据)传输到我的应用程序中以使用它。 如果我创建一个像/tmp/out.mp4这样的命名管道并将其作为输出文件名提供给ffmpeg,ffmpeg将尝试再次创建此文件,可能会覆盖我的管道(或类似的东西)。 如何应对这种情况?

是否有任何通用的方法可以透明地转移应用程序的文件IO?

(我正在尝试编写一个video流服务器(仅供学习和娱乐),它将像avi这样的格式转换为流式友好格式,如mpeg4,在流媒体中,我发现ffmpeg对于此目的来说太慢了,它需要2秒才能转码1秒video:(

这是我的设置/ PC或ffmpeg的问题是否缓慢? )

PS:顺便说一下,我在C中写这个。

可以说服ffmpeg输出到管道:

 ffmpeg -i whatever.avi -f mp4 - 

“ – ”告诉它输出到stdout而不是文件,“ – f”告诉它输出文件应该是什么输出。

当然,您可以将其重定向到命名管道,但是使用popen调用它以直接将输出作为文件描述符来找我。

ffmpeg也可以从stdin中读取并写入stdout,如下所示:

 ffmpeg -i pipe:0 -f wav pipe:1 

其中0和1是标准POSIX文件描述符。