使用Python子进程将PCM数据从FFMPEG传送到另一个进程

使用Python子进程将PCM数据从FFMPEG传送到另一个进程,python,ffmpeg,subprocess,Python,Ffmpeg,Subprocess,我正试图转录一个播客。为此,我使用FFMPEG对mp3流进行解码,并将生成的PCM输出传输到语音识别组件。我的代码看起来像这样 mp3=subprocess.Popen(['ffmpeg','-i',audio_url, '-f','s16le','-ac','1','-ar','16000','pipe:0'], stdout=subprocess.PIPE) sphinx=

我正试图转录一个播客。为此,我使用FFMPEG对mp3流进行解码,并将生成的PCM输出传输到语音识别组件。我的代码看起来像这样

mp3=subprocess.Popen(['ffmpeg','-i',audio_url,
                              '-f','s16le','-ac','1','-ar','16000','pipe:0'],
                              stdout=subprocess.PIPE)
sphinx=subprocess.Popen(['java','-jar','transcriber.jar'],
                                stdin=mp3.stdout,
                                stdout=subprocess.PIPE)
其中
audio\u url
是mp3文件的url


当我试着运行它时,它挂起了。似乎通过管道传送解码的PCM数据已死锁。我能做些什么来解决这个问题?输出数据的大小可能太大,无法将
subprocess.Popen.communicate
作为选项,显式调用
mp3.stdout.close()
没有任何效果。

结果是
管道:0
无法连接到
mp3.stdout
。我改用了
-
,现在它开始工作了。

结果是
管道:0
无法连接到
mp3.stdout
。我用了
-
,现在它可以工作了。

你的
管道编号不正确。正确的值为:

  • 管道:0
    -stdin
  • 管道:1
    -stdout
  • 管道:2
    -stderr
您可以使用:

  • 管道:1
    ,或
  • 只是
    管道:
    ,因为输出的默认值是标准输出,或者
  • 只需使用
    -

请参阅。

您的
管道编号不正确。正确的值为:

  • 管道:0
    -stdin
  • 管道:1
    -stdout
  • 管道:2
    -stderr
您可以使用:

  • 管道:1
    ,或
  • 只是
    管道:
    ,因为输出的默认值是标准输出,或者
  • 只需使用
    -