刚开始学习/使用管道,想知道如何将应用程序的文件输出路由到管道中,以便另一个应用程序可以使用它。
确切地说,我想将 ffmpeg 的输出(转码后的视频数据)通过管道传输到我的应用程序中以使用它。如果我创建一个命名管道,如 /tmp/out.mp4
并将其作为输出文件名提供给 ffmpeg,ffmpeg 将尝试再次创建该文件,可能会覆盖我的管道(或类似的东西) .遇到这种情况怎么办?
有没有通用的方法透明地转移应用程序的文件 IO?
(我正在尝试编写一个视频流服务器(只是为了学习和娱乐),它在流式传输期间将 avi 等格式转码为 mpeg4 等流式传输友好格式,我发现 ffmpeg 对于这个目的来说太慢了,它需要大约 2秒转码 1 秒视频 :(
是我的设置/PC 的问题还是 ffmpeg 以缓慢着称? )
PS : 顺便说一下,我是用 C 写的。
最佳答案
可以说服 ffmpeg 输出到管道:
ffmpeg -i whatever.avi -f mp4 -
“-”告诉它输出到标准输出而不是文件,“-f”告诉它输出文件应该是什么输出。
当然,您可以将它重定向到一个命名管道,但是使用 popen
调用它以直接将输出作为文件描述符获取对我来说似乎是可行的方法。
关于c - 使用管道将文件 i/o 传输到另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5284982/