使用Python子进程将PCM数据从FFMPEG传送到另一个进程
我正试图转录一个播客。为此,我使用FFMPEG对mp3流进行解码,并将生成的PCM输出传输到语音识别组件。我的代码看起来像这样使用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=
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
,或
- 只是
管道:
,因为输出的默认值是标准输出,或者
- 只需使用
-
看