【发布时间】:2021-04-11 20:33:20
【问题描述】:
我在 Python 3.8.7 上有 a similar issue,但我找不到解决方案。
在我的项目中,我使用 pydub.AudioSegment 从文件中获取音频,然后以不同的格式导出该音频。当我直接运行 python 文件时,我的代码运行良好。但是,当我使用 pyinstaller 将其转换为可执行文件,运行程序并使用 pydub 导入音频时,它给了我以下错误:
Traceback (most recent call last):
File "main.py", line 269, in <module>
File "main.py", line 213, in convertfile
File "main.py", line 133, in cloud_upload
File "pydub\audio_segment.py", line 728, in from_file
File "pydub\utils.py", line 274, in mediainfo_json
File "subprocess.py", line 804, in __init__
File "subprocess.py", line 1142, in _get_handles
OSError: [WinError 6] The handle is invalid
我的程序中的 pydub 调用如下所示:
sound = AudioSegment.from_file(filepath)
sound.export(new_filepath, format="ogg",codec='libopus')
我尝试在第 274 行的 utils.py 中添加 stdin=subprocess.DEVNULL 和 stdin=subprocess.PIPE,但这也不起作用。不过,可能是我添加错误了,因此我们也非常感谢您提出这样的建议。
【问题讨论】:
-
我认为每当
export方法试图通过subprocess调用ffmpeg 时,它都有一些事情要做。您可以手动将shell=True添加到此行:github.com/jiaaro/pydub/blob/master/pydub/audio_segment.py#L963 -
@Dimitar,感谢您的快速回复!我做到了,但遗憾的是,我得到了同样的错误。
-
我不知道它是否与它有关,但我的PATH中也没有ffmpeg。我的根目录中有 ffmpeg.exe、ffplay.exe 和 ffprobe.exe 以及主脚本。我还使用 --add-data 将这些 exe 文件添加到我的 pyinstaller 程序中。
-
这也可能是一个原因,您可以将它们添加到您的 PATH 并重试吗?还要通过事先调用它们来确保它们在那里,并且不要使用 --add-data 添加它们
-
我只是自己尝试了一下,没有发现任何问题。我的路径中有
ffmpeg,唯一不同的是我没有在导出中指定编解码器。使用 python 3.9.1、pydub 0.25.1 和 pyinstaller 4.2
标签: python subprocess pyinstaller python-3.8 pydub