使用管道将文件 i/o 传输到另一个进程
Posted
技术标签:
【中文标题】使用管道将文件 i/o 传输到另一个进程【英文标题】:using pipes to channel file i/o to another process 【发布时间】:2011-03-12 19:44:17 【问题描述】:刚开始学习/使用管道,想知道如何将应用程序的文件输出路由到管道中,以便另一个应用程序可以使用它。
确切地说,我想将 ffmpeg 的输出(转码视频数据)传送到我的应用程序中以使用它。如果我创建一个像/tmp/out.mp4
这样的命名管道并将其作为输出文件名提供给ffmpeg,则ffmpeg 将尝试再次创建此文件,可能会覆盖我的管道(或类似的东西)。如何处理这种情况?
是否有任何通用的方法可以透明地转移应用程序的文件 IO?
(我正在尝试编写一个视频流服务器(只是为了学习和娱乐),它在流式传输过程中将 avi 等格式转码为 mpeg4 等流式友好格式,我发现 ffmpeg 太慢了,它需要 2秒转码 1 秒视频 :(
是我的设置/PC 的问题还是 ffmpeg 以迟缓着称? )
PS : 顺便说一下,我是用 C 写的。
【问题讨论】:
【参考方案1】:可以说服ffmpeg输出到管道:
ffmpeg -i whatever.avi -f mp4 -
“-”告诉它输出到标准输出而不是文件,“-f”告诉它输出文件应该是什么输出。
当然,您可以将其重定向到命名管道,但使用 popen
调用它以直接将输出作为文件描述符获取似乎是我的方法。
【讨论】:
嗨,freiheit,你能看看这个吗,***.com/questions/5302196/…【参考方案2】:ffmpeg 也可以像这样从标准输入读取并写入标准输出:
ffmpeg -i pipe:0 -f wav pipe:1
其中 0 和 1 是标准 POSIX 文件描述符。
【讨论】:
以上是关于使用管道将文件 i/o 传输到另一个进程的主要内容,如果未能解决你的问题,请参考以下文章
使用 !ERRORLEVEL!在通过管道传输到另一个进程的代码块中
如何将 find 命令返回的文件列表通过管道传输到 cat 以查看所有文件