ポッドキャストを書き写そうとしています。これを行うために、私はFFMPEGでmp3ストリームをデコードし、得られたPCM出力を音声認識コンポーネントにパイプします。私のコードはこのように見えます。PythonサブプロセスでFFMPEGから別のプロセスに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()
を呼び出しても効果はありません。