Ошибка экспорта Pydub - выберите кодировщик вручную

Я пытаюсь экспортировать файл в формате mp3 в pydub, но получаю эту ошибку:

Не удалось автоматически выбрать кодировщик для выходного потока #0:0. Кодировщик по умолчанию для формата mp3, вероятно, отключен. Пожалуйста, выберите кодировщик вручную

Как выбрать кодировщик вручную, какой кодировщик используется по умолчанию и как его включить?

PS: Мой Pydub без проблем открывает файлы mp3. Я использую Windows и Libav.


person Daniel Möller    schedule 18.05.2017    source источник
comment
Возможный дубликат stackoverflow.com/questions/20443850/. Пробовали ли вы кодировать как файл wav, чтобы убедиться, что ваш файл кодируется? Убедитесь, что ваш кодек mp3 установлен.   -  person NuclearPeon    schedule 19.05.2017
comment
Да, экспортирует в wav. И загружает мп3.   -  person Daniel Möller    schedule 19.05.2017
comment
Для воспроизведения mp3 требуется декодер, а для записи mp3 требуется кодировщик. Какую ОС вы используете и какой у вас кодировщик mp3? Используете ли вы ffmpeg, gstreamer, ubuntu-restricted-codecs и т. д. Вы можете скачать и скомпилировать исходный код для Lame (кодировщик mp3) на Mac/Linux/Windows здесь: lame.sourceforge.net/download.php .   -  person NuclearPeon    schedule 19.05.2017
comment
Я не думаю, что у меня есть энкодер....   -  person Daniel Möller    schedule 19.05.2017
comment
Вот полезная ссылка. Audacity — это аудиоредактор, и если вы попытаетесь экспортировать mp3 без кодировщика, вы попадете на эту страницу. Я публикую это, потому что в нем есть полезные ссылки о природе кодировщиков и ссылки на liblame, который не требует компиляции из исходного кода. manual.audacityteam.org/man/ Если вы используете Linux, установка кодек простой. В противном случае проверьте файлы здесь: lame.buanzo.org/#lamewindl   -  person NuclearPeon    schedule 19.05.2017


Ответы (3)


вы можете узнать, какие кодеки доступны с помощью ffmpeg -codecs или avconv -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")
person Jiaaro    schedule 19.05.2017
comment
Я не думаю, что у меня есть ffmpeg... Я следовал альтернативной установке, упомянутой в документации pydub, используя libav.... - person Daniel Möller; 19.05.2017
comment
@Daniel Обновил мой ответ, включив в него команду libav. - person Jiaaro; 22.05.2017
comment
если у вас не установлен кодировщик mp3 с libav, возможно, попробуйте вместо этого установить ffmpeg в надежде, что он объединяет кодировщик mp3? Я не использую окна, поэтому, к сожалению, мало знаю о ваших возможностях поддержки определенных форматов. - person Jiaaro; 02.06.2017

Другое решение не сработало для меня. Проблема для меня заключалась в том, что версия ffmpeg, установленная вместе с Anaconda, похоже, не была скомпилирована с помощью кодировщика. Итак, вместо:

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, чтобы проверить, есть ли энкодер (теперь он есть!).
person Emiel    schedule 20.01.2018
comment
по какой-то причине просто conda удалил FFmpeg на моем Mac 10.14.5 (Mojave) без необходимости устанавливать FFmpeg через brew. - person anjchang; 24.09.2019

У меня была та же проблема, что и у Emiel, где версия ffmpeg, доступная в Anaconda, имела кодировщик mp3. Я решил проблему другим способом, установив эту версию ffmpeg с канала conda-forge. Я использовал:

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 )
person user3755276    schedule 06.09.2019