2017-02-07 8 views
0

ポッドキャストを書き写そうとしています。これを行うために、私は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()を呼び出しても効果はありません。

答えて

0

pipe:0mp3.stdoutに接続しません。代わりに-を使用しましたが、今は動作しています。

1

pipe数が正しくありません:

  • pipe:0 - 標準入力
  • pipe:1 - 標準出力
  • pipe:2から

あなたが使用できる標準エラー出力:

  • pipe:1、または単にpipe:
  • 、出力のデフォルトはstdoutですとして、または
  • あなたが発見したとして、ちょうど-を使用しています。

FFmpeg Documentation: pipe protocolを参照してください。

関連する問題