Pydub 导出错误 - 手动选择编码器

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

***.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 【参考方案1】:

我遇到了与Emiel 相同的问题,Anaconda 中的ffmpeg 版本确实有一个mp3 编码器。我通过从conda-forge 频道安装ffmpeg 的this 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,所以很遗憾,我不太了解您的选择是否支持特定格式

以上是关于Pydub 导出错误 - 手动选择编码器的主要内容,如果未能解决你的问题,请参考以下文章

PowerDesigner16 设置导出sql文件的编码

希望播放非编码视频上传,然后通过 FFMPEG 从选择点导出 gif

手动编码 Postscript 时,Ghostscript 会产生未定义的错误

解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题(转)

php 多语言(UTF-8编码)导出ExcelCSV乱码解决办法之导出UTF-8编码的ExcelCSV

让VSCode支持gbk编码