【问题标题】:Pydub export error - Choose encoder manuallyPydub 导出错误 - 手动选择编码器
【发布时间】:2017-10-18 21:43:02
【问题描述】:

我正在尝试在 pydub 中将文件导出为 mp3,但出现此错误:

输出流 #0:0 的自动编码器选择失败。 mp3 格式的默认编码器可能已禁用。请手动选择编码器

如何手动选择编码器,默认编码器是什么,如何启用?

PS:我的 Pydub 打开 mp3 文件没有任何问题。我正在使用 Windows 和 Libav。

【问题讨论】:

  • stackoverflow.com/questions/20443850/… 的可能重复项。您是否尝试过编码为wav 文件以确保您的文件是可编码的?检查您的 mp3 编解码器是否已安装。
  • 是的,它以 wav 格式导出。它会加载 mp3。
  • 播放 mp3 需要解码器,而编写 mp3 需要编码器。您使用的是什么操作系统,您的 mp3 编码器是什么?您使用的是ffmpeggstreamerubuntu-restricted-codecs 等吗?您可以在此处下载并编译 Mac/Linux/Windows 上的 Lame(mp3 编码器)源代码:lame.sourceforge.net/download.php
  • 我想我没有编码器......
  • 这是一个有用的链接。 Audacity 是一个音频编辑器,如果您尝试在没有编码器的情况下导出 mp3,它会将您带到此页面。我发布这个是因为它有关于编码器性质的有用链接和不需要从源代码编译的 liblame 链接。 manual.audacityteam.org/man/… 如果您在 Linux 上,安装编解码器很容易。否则,请在此处查看文件:lame.buanzo.org/#lamewindl

标签: python audio mp3 encoder pydub


【解决方案1】:

我遇到了与Emiel 相同的问题,Anaconda 中的ffmpeg 版本确实有一个mp3 编码器。我通过从conda-forge 频道安装ffmpegthis version 以另一种方式解决了这个问题。我用过:

conda install -n <anaconda-env> -c conda-forge ffmpeg 

现在使用ffmpeg -codecs | grep mp3 mp3 编码器出现:

 DEA.L. mp3      MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame libshine )

【讨论】:

    【解决方案2】:

    其他解决方案对我不起作用。对我来说,问题是 Anaconda 随附的 ffmpeg 版本似乎没有使用编码器进行编译。所以而不是:

    DEA.L. mp3 MP3 (MPEG audio layer 3) (decoders: mp3 mp3float mp3_at ) (encoders: libmp3lame )

    我看到了:

    DEA.L. mp3 MP3 (MPEG audio layer 3) (decoders: mp3 mp3float mp3_at )

    没有(encoders: ...) 部分。

    我的解决方案是这样做:

    • ffmpeg -codecs | grep mp3,检查是否有任何编码器(没有!)。
    • conda uninstall ffmpeg
    • 打开新的终端窗口。
    • brew install ffmpeg --with-libmp3lame
    • ffmpeg -codecs | grep mp3,检查是否有任何编码器(现在有!)。

    【讨论】:

    • 出于某种原因,只需在我的 Mac 10.14.5 (Mojave) 上 conda 卸载 FFmpeg 即可工作,而无需通过 brew 安装 FFmpeg。
    【解决方案3】:

    您可以通过ffmpeg -codecsavconv -codecs 找到哪些编解码器可用,在mp3 行您会看到类似的内容:

    DEA.L. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3 mp3float mp3_at ) (encoders: libmp3lame )
    

    D 表示 ffmpeg 可以解码
    E 表示可以编码
    A 表示它是音频编解码器
    L 表示它是有损编码

    但最重要的部分是encoders: … 部分

    认为您需要选择列出的编码器之一并告诉 pydub 使用它(我不知道为什么,这在我的机器上不是必需的 - 但这可能取决于在您的 ffmpeg 安装上)

    from pydub import AudioSegment
    sound = AudioSegment.from_file(…)
    sound.export("/path/to/output.mp3", codec="libmp3lame")
    

    【讨论】:

    • 我不认为我有 ffmpeg....我按照 pydub 文档中提到的替代安装使用 libav....
    • @Daniel 更新了我的答案以包含 libav 命令
    • 如果您没有安装带有 libav 的 mp3 编码器,也许可以尝试安装 ffmpeg 以希望它捆绑 mp3 编码器?我不使用 Windows,所以很遗憾,我不太了解您的选择是否支持特定格式
    猜你喜欢
    • 2013-12-24
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多