【问题标题】:PyDub OSError: [WinError 6] The handle is invalidPyDub OSError: [WinError 6] 句柄无效
【发布时间】: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


【解决方案1】:

我只能通过 从 pyinstaller 中删除 --onefile 选项将 ffmpeg.exe 和 ffprobe.exe 放入结果文件夹 来解决这个问题 .exe 文件。

这不是解决问题的好方法,因为我仍然更喜欢使用--onefile;但它有效。

我仍然愿意接受有关如何使其与 --onefile 一起使用的建议,或者只是一般来说为什么会发生这种情况。

【讨论】:

    【解决方案2】:

    可能是 PyInstaller 无法识别导入的插件。虽然如果您正在尝试制作应用程序,我建议您使用快捷方式,因为您可以自定义快捷方式的图标,这会更好。这是许多应用程序主要使用的。

    【讨论】:

      猜你喜欢
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多