2016-10-17 12 views
1

Есть ли способ предотвратить pydub открыть окно консоли при использовании ffmpeg (в Windows)? Каждый раз, когда он запускает ffmpeg для преобразования mp3-файла в wav, он на короткое время открывает консольное окно, которое автоматически отключается, когда процесс завершен, но может быть нарушен.предотвратить pydub от открытия окна консоли

+0

pydub запускает ffmpeg в подпроцессе - я мало что знаю о окнах, но, может быть, этот маленький лакомый кусочек поможет другим ответить? – Jiaaro

+0

В audio_segment.py я изменил две строки 'p = subprocess.Popen (conversion_command, stdout = subprocess.PIPE, stderr = subprocess.PIPE)', добавив 'creationflags = 0x08000000'. Кажется, это довольно распространенный способ избежать появления окон команд с этими вызовами, так что, возможно, стоит поместить его в pydub, если это возможно? – dingles

ответ

1

Решение, которое я использую, - это перегрузить функцию from_file. Я только что изменил subprocess call, добавив опцию startupinfo. Вот несколько строк, которые я добавил:

import platform 
systeme = platform.system() 
if systeme == 'Windows': 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    startupinfo.wShowWindow = subprocess.SW_HIDE 
    p = subprocess.Popen(conversion_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo) 
else: 
    p = subprocess.Popen(conversion_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)` 
0

я следующий в любой скрипт, который использует pydub:

Добавить import subprocess перед импортом pydub

Тогда, прежде чем я использовать pydub в сценарии I добавить:

if subprocess.mswindows: subprocess.STARTUPINFO.dwFlags |= subprocess.STARTF_USESHOWWINDOW

Это говорит о каком-либо подпроцессе вызов из этого сценария (или не через ар ydub), чтобы не отображать окно по умолчанию, но посмотреть на другой флаг wShowWindow, чтобы решить, показывать ли его. Поскольку по умолчанию этот флаг равен 0, окно не отображается.