有没有办法防止 pydub 在使用 ffmpeg(在 Windows 上)时打开控制台窗口?每次启动 ffmpeg 以将 mp3 文件转换为 wav 时,它都会短暂打开一个控制台窗口,该窗口在处理完成后会自动关闭,但可能会令人不安。
问问题
483 次
3 回答
3
我使用的解决方案是重载from_file
函数。我刚刚更改了subprocess
通话,添加了 option 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)`
于 2016-10-20T09:57:13.103 回答
0
我在任何使用 pydub 的脚本中执行以下操作:
import subprocess
在导入 pydub 之前添加
然后,就在我在脚本中使用 pydub 之前,我添加:
if subprocess.mswindows:
subprocess.STARTUPINFO.dwFlags |= subprocess.STARTF_USESHOWWINDOW
这告诉该脚本的任何子进程调用(无论是否通过 pydub 指令)默认情况下不显示窗口,而是查看另一个名为 wShowWindow 的标志来决定是否显示。由于该标志默认为 0,因此不会显示该窗口。
于 2018-03-05T13:41:11.740 回答
0
您可以修改源代码并在运行时重新编译它。
# Created by BaiJiFeiLong@gmail.com at 2022/2/18 22:09
import importlib.util
import re
import sys
import types
import pydub
from IceSpringPathLib import Path
for moduleName in "pydub.utils", "pydub.audio_segment":
spec = importlib.util.find_spec(moduleName, None)
source = spec.loader.get_source(moduleName)
snippet = "__import__('subprocess').STARTUPINFO(dwFlags=__import__('subprocess').STARTF_USESHOWWINDOW)"
source, n = re.subn(r"(Popen)\((.+?)\)", rf"\1(\2, startupinfo=print('worked') or {snippet})", source, flags=re.DOTALL)
module = importlib.util.module_from_spec(spec)
exec(compile(source, module.__spec__.origin, "exec"), module.__dict__)
sys.modules[moduleName] = module
module = importlib.reload(sys.modules["pydub"])
for k, v in module.__dict__.items():
if isinstance(v, types.ModuleType):
setattr(module, k, importlib.import_module(v.__name__))
pydub.audio_segment.AudioSegment.from_file(Path("~/Music").expanduser().glob("**/*.mp3").__next__())
于 2022-02-19T11:34:30.977 回答