Библиотека Python для конвертации файлов в MP3 и настройки их качества

Я пытаюсь найти библиотеку Python, которая будет брать аудиофайл (например,.ogg, .wav) и конвертировать его в mp3 для воспроизведения на веб-странице.

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

Спасибо.

6 ответов

Решение

Похоже, что PyMedia делает это:

http://pymedia.org/

и немного больше информации здесь о преобразовании в различные форматы, в то же время устанавливая битрейт:

http://pymedia.org/tut/recode_audio.html

например

params= {
'id': acodec.getCodecId('mp3'),
'bitrate': r.bitrate,
'sample_rate': r.sample_rate,
'ext': 'mp3',
'channels': r.channels }
enc= acodec.Encoder( params )

Я написал библиотеку, предназначенную для этого =D

from pydub import AudioSegment
AudioSegment.from_file("/input/file").export("/output/file", format="mp3")

Легко!

чтобы указать битрейт, просто используйте bitrate kwarg...

from pydub import AudioSegment
sound = AudioSegment.from_file("/input/file")
sound.export("/output/file", format="mp3", bitrate="128k")

Я использую привязки Python для gstreamer. Начать немного сложно, но как только вы начнете, почти все возможно.

Из командной строки (из документации gstreamer):

gst-launch -v filesrc location=music.wav ! decodebin ! audioconvert ! audioresample ! lame bitrate=192 ! id3v2mux ! filesink location=music.mp3

Вход filesrc location=... может быть все, что может играть gstreamer, а не только.wav. Вы можете добавить что-то, называемое фильтром заглавных букв, для повторной выборки с определенной скоростью перед кодированием.

В вашей программе Python вы бы использовали gst.parse_launch(...)получить элементы filesrc и filesink, а также вызвать сеттеры, чтобы изменить имена входных и выходных файлов.

Кроме того, Python Audio Tools должны иметь возможность выполнять эту работу с меньшими потребностями в других библиотеках, что может быть проще, если вы делаете это в общей учетной записи веб-хостинга. (Но по общему признанию я не пробовал это, таким образом, я не могу подтвердить, насколько это полезно.)

Вы можете использовать модуль ctypes для вызова функций непосредственно из динамических библиотек. Он не требует установки внешних библиотек Python и имеет лучшую производительность, чем инструменты командной строки, но его обычно сложнее реализовать (плюс, конечно, вам нужно предоставить внешнюю библиотеку).

Другой вариант, позволяющий избежать установки модулей Python для этой простой задачи, состоит в том, чтобы просто выполнить "lame" или другой кодировщик командной строки из сценария Python (с помощью модуля popen.)

Другие вопросы по тегам