Подтвердить что ты не робот

Библиотека Python для изменения аудио MP3 без транскодирования

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Работа в формате MP3

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

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

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

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

Работа в PCM

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Что касается объединения файлов MP3 вместе (добавление, например, "Кредиты" в конец или начало mp3 файла), я обнаружил, что вы можете просто объединить файлы MP3, при условии, что файлы имеют одинаковую частоту дискретизации (например, 44.1khz) и одинаковое количество каналов (например, оба являются стереофоническими или оба моно).