Библиотека Python для модификации аудио MP3 без транскодирования - PullRequest
17 голосов
/ 22 ноября 2008

Прежде чем начать небольшой проект, я ищу несколько общих советов по поводу формата mp3, чтобы убедиться, что я не нахожусь в погоне за диким гусем.

Мое понимание внутренних особенностей формата mp3 минимально. В идеале я ищу библиотеку, которая бы абстрагировала эти детали. Я бы предпочел использовать Python (но мог бы убедиться в этом).

Я бы хотел изменить набор mp3-файлов довольно простым способом. Меня интересуют не столько теги ID3, сколько сам звук. Я хочу иметь возможность удалять разделы (например, отбрасывать 10 секунд с 3-й минуты) и вставлять разделы (например, добавлять кредиты до конца.)

Насколько я понимаю, формат mp3 с потерями, поэтому его декодирование в (например) формат PCM, внесение изменений и повторное кодирование в MP3 приведет к снижению качества звука. (Я хотел бы услышать, что я неправ.)

I гипотеза , что если я останусь в формате mp3, будет некоторый минимальный размер кадра или пакета, с которым нужно иметь дело, поэтому степень детализации операций может быть более грубой. Я могу жить с этим, пока я получаю точность в течение нескольких секунд.

Я посмотрел на PyMedia , но мне требуется перейти на PCM для обработки данных. Точно так же LAME хочет помочь мне кодировать, но не получить доступ к данным на месте. Я видел несколько других библиотек, которые имеют дело только с тегами ID3.

Кто-нибудь может порекомендовать библиотеку Python MP3? В качестве альтернативы, вы можете не согласиться с моим предположением, что посещение PCM и обратно - это плохо и его можно избежать?

Ответы [ 5 ]

7 голосов
/ 22 ноября 2008

Если вы хотите делать вещи низкого уровня, используйте pymad . Он превращает MP3 в буфер выборочных данных.

Если вы хотите что-то более высокого уровня, используйте Echo Nest Remix API (раскрытие: я написал часть этого для моей дневной работы). Включает в себя несколько примеров. Если вы посмотрите на пример cowbell (т. Е. MoreCowbell.dj ), вы увидите разветвление pymad, которое дает массив NumPy вместо буфер. Этот тип данных облегчает нарезку разделов и выполнение математических операций на них.

6 голосов
/ 24 ноября 2008

Я получил три качественных ответа, и я благодарю всех вас (и всех вас поддержал) за них. Я не выбрал ни одного в качестве принятого ответа, потому что каждый из них касался одного аспекта, поэтому я хотел написать резюме.

Вам нужно работать в MP3?

  • Транскодирование в PCM и обратно в MP3 вряд ли приведет к снижению качества.

  • Не оптимизируйте качество звука преждевременно; протестируйте его с помощью простого прототипа и прослушайте его.

Работа в MP3

  • В Википедии есть сводка формата файла MP3 .

  • Кадры MP3 короткие (1152 сэмпла или всего несколько миллисекунд), что обеспечивает умеренную точность на этом уровне.

  • Однако, Википедия предупреждает, что «Кадры не являются независимыми элементами (« байт-резервуар ») и поэтому не могут быть извлечены на произвольных границах кадра».

  • Существующие библиотеки вряд ли помогут, если я действительно хочу избежать декодирования.

Работа в PCM

На этом уровне есть несколько библиотек:

  • LAME (последний выпуск: октябрь 2017 г.)
  • PyMedia (последний выпуск: февраль 2006 г.)
  • PyMad (только для Linux? Только для декодера? Последний выпуск: январь 2007 г.)

Работа на более высоком уровне

  • Echo Nest Remix API (на данный момент только для Mac или Linux) представляет собой API-интерфейс для веб-службы, который поддерживает довольно сложные операции (например, поиск местоположений музыкальных ритмов и темпа, и др.)

  • mp3DirectCut (только для Windows) - это графический интерфейс, который, очевидно, выполняет нужные мне операции, но в виде приложения. Это не с открытым исходным кодом. (Я попытался запустить его, получил ошибку установщика «Отказано в доступе» и не обнаружил. GUI мне не подходит, так как я хочу многократно запускать эти операции над изменяющейся библиотекой файлов.)

Мой план сейчас начать в PyMedia, используя PCM. Спасибо всем за помощь.

3 голосов
/ 22 ноября 2008

Mp3 с потерями, но это очень специфичные потери. Используемые алгоритмы предназначены для отбрасывания определенных частей звука, которые ваши уши не могут слышать (или очень трудно слышать). Повторное выполнение процесса сжатия при одном и том же уровне сжатия снова и снова может дать почти идентичных результатов для данного фрагмента звука. Однако некоторые дополнительные потери могут медленно накапливаться. Если вы собираетесь много изменять файлы, это может быть плохой идеей. Также было бы плохой идеей, если вы беспокоитесь о качестве, но тогда использование MP3, если вы беспокоитесь о качестве, является плохой идеей для всех.

Вы можете создать тест с использованием кодера и декодера, чтобы несколько раз перекодировать несколько разных mp3-файлов и посмотреть, как они меняются, это может помочь вам определить степень ухудшения качества и выяснить, приемлемо ли это для вас , Похоже, у вас есть библиотеки, которые вы уже можете использовать для запуска этого простого теста.

MP3-файлы состоят из «кадров» аудио, поэтому при некоторых усилиях можно удалить целые кадры с минимальной обработкой (удалить кадр, обновить некоторые мелкие детали в заголовке файла). Я считаю, что кадры довольно короткие (по несколько миллисекунд каждый), что обеспечит точность, которую вы ищете. Поэтому, прочитав MP3 File Format , вы получите достаточно информации, чтобы написать собственную библиотеку python для этого. Это немного отличается от традиционной «обработки звука» (поскольку вам не важна точность), и поэтому вы вряд ли найдете существующую библиотеку, которая делает это. Большинство из них, как вы обнаружили, сначала распаковывают звук, чтобы вы могли получить полный детальный контроль.

1 голос
/ 26 апреля 2009

Что касается удаления или извлечения сегментов mp3 из mp3-файла во время пребывания в домене MP3 (то есть без преобразования в формат PCM и обратно), существует также пакет с открытым исходным кодом PyMp3Cut .

Что касается объединения файлов MP3 (добавив, например, «Кредиты» в конец или начало файла MP3), я обнаружил, что вы можете просто объединить файлы MP3 при условии, что файлы имеют одинаковую частоту дискретизации (например, 44,1 кГц) и одинаковое количество каналов (например, оба стерео или оба моно).

1 голос
/ 22 ноября 2008

Не прямой ответ на ваши потребности, но проверьте программное обеспечение mp3DirectCut , которое делает то, что вы хотите (в качестве приложения с графическим интерфейсом). Я думаю, что исходный код доступен, поэтому даже если вы не найдете библиотеку, вы можете создать свою собственную или создать расширение python, используя код из mp3DirectCut.

...