将FFMPEG的输出重定向到Windows上的多个命名管道

6

我正试图将视频和音频数据流分别输入到Windows上的两个命名管道中。

ffmpeg.exe -f dshow -i video="My camera name":audio="My microphone name" -map 0:1 -ac 1 -f f32le \\.\pipe\audioStream -map 0:0 -f mjpeg \\.\pipe\videoStream

问题在于FFMPEG似乎并不理解输出的\\.\pipe\audioStream\\.\pipe\videoStream是管道(pipe),而是将它们视为文件。
  1. 如果管道在FFMPEG启动时已经创建,它会尝试覆盖它们并失败。
  2. 否则,它会抱怨路径不存在并失败。
据我所了解,指定pipe:协议应该能解决问题,但即使对于单个管道,我也无法正确使用它。我已经尝试过:
  1. pipe:pipeName
  2. pipe:pipe\pipeName
  3. pipe:\\.\pipe\pipeName
  4. pipe://pipeName
  5. pipe://pipe\pipeName
  6. pipe://\\.\pipe\pipeName
我最终的结果总是相同的:输出写入到控制台而不是管道。如果管道在FFMPEG启动时已经存在,则没有任何连接到管道。
在Windows上可以使用FFMPEG和命名管道吗?如果可以,正确的方法是什么?

我不知道,但你是否考虑使用库而不是命令行版本?启动子进程来为您完成工作并不符合Windows的道。 :-) - Harry Johnston
我已经使用单个输入和输出管道而没有任何问题...不需要使用 pipe:,我确实使用 -y 参数来强制覆盖。我相信它也适用于多个管道...也许你正在使用旧版本的FFmpeg? - Pablo Montilla
1个回答

0
从我的经验来看,使用FFmpeg将数据传输到多个输出一直是个问题。建立管道涉及阻塞类型的数据传输。FFmpeg希望被输入程序在发送其他数据块之前“吃掉”一块数据。在两个输入流的情况下,FFmpeg不知道哪个输入程序优先,并且当存在疑问时,FFmpeg什么都不做,因此FFmpeg会永远挂起,等待两条管道的另一侧发生某些操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接