刚开始学习/使用管道,并想知道如何将应用程序的文件输出路由到管道,以便其他应用程序可以使用它。
确切地说,我想将ffmpeg的输出(转码后的视频数据)传输到我的应用程序中以使用它。如果我创建一个像/tmp/out.mp4
这样的命名管道并将其作为输出文件名提供给ffmpeg,ffmpeg将尝试再次创建此文件,可能会覆盖我的管道(或类似的东西)。如何应对这种情况?
是否存在透明转移应用程序的文件IO的一般方法?
(我正在尝试编写一个视频流媒体服务器(仅供学习和娱乐),它将像avi这样的格式转换成流式友好格式,如mpeg4,在流式传输时,我发现ffmpeg对于此目的来说太慢,它就像2秒转码1秒视频:(
我的设置/ PC或ffmpeg的问题是否因为迟钝而闻名? )
PS:顺便说一下,我在 C 中写这个。
答案 0 :(得分:3)
可以说服ffmpeg输出到管道:
ffmpeg -i whatever.avi -f mp4 -
“ - ”告诉它输出到stdout而不是文件,“ - f”告诉它输出文件应该是什么输出。
当然,您可以将其重定向到命名管道,但是使用popen
调用它来直接将输出作为文件描述符来找我。
答案 1 :(得分:0)
ffmpeg也可以从stdin中读取并写入stdout,如下所示:
ffmpeg -i pipe:0 -f wav pipe:1
其中0和1是标准POSIX文件描述符。