2017-02-07 14 views
0

Я пытаюсь расшифровать подкаст. Для этого я дешифрую mp3-поток с помощью FFMPEG и передаю полученный результат PCM в компонент распознавания речи. Мой код выглядит так.Трубопроводные данные PCM от FFMPEG к другому процессу с подпроцессом Python

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-файла.

Когда я пытаюсь запустить это, он зависает. Похоже, что подача декодированных данных ИКМ через трубу зашла в тупик. Что я могу сделать, чтобы исправить это? Размер выходных данных, вероятно, будет слишком большим для subprocess.Popen.communicate, чтобы быть опцией, и явно вызывающий mp3.stdout.close() не имел никакого эффекта.

ответ

0

Оказывается, что pipe:0 не подключается к mp3.stdout. Вместо этого я использовал -, и теперь он работает.

1

pipe номер неверен:

  • pipe:0 - STDIN
  • pipe:1 - стандартный вывод
  • pipe:2 - STDERR

Вы можете использовать:

  • pipe:1 или
  • просто pipe:, так как по умолчанию для вывода является стандартным выводом, или
  • , как вы обнаружили, просто использовать -.

См. FFmpeg Documentation: pipe protocol.

 Смежные вопросы

  • Нет связанных вопросов^_^