我正在尝试转录播客。为此,我使用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_url
是mp3文件的url。
当我尝试运行它时,它会挂起。似乎通过管道馈送解码的PCM数据已陷入僵局。我该怎么做才能解决这个问题?输出数据的大小可能太大,以至于subprocess.Popen.communicate
不是一个选项,明确调用mp3.stdout.close()
没有任何效果。
您的pipe
号码不正确。正确的值是:
pipe:0
- stdinpipe:1
- stdoutpipe:2
- stderr您可以使用:
pipe:1
,或pipe:
,因为输出的默认值是stdout,或-
事实证明pipe:0
不会连接到mp3.stdout
。我使用-
而现在它正在工作。