2008-11-22 2 views
16

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

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

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

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

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

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

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

ответ

6

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

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

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

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

Работа в MP3

  • Википедии есть резюме MP3 File Format.

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

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

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

Работа в PCM

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

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

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

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

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

+1

Утверждение «Транскодирование в PCM и обратно в MP3 вряд ли приведет к снижению качества». False. Снижение качества может быть приемлемым для вас, но всегда есть потеря. – jrwren 2012-12-21 00:38:13

3

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

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

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

+0

Я думаю, что фреймы MP3 ¹/₇₅ сек, как и компакт-диски. Я мог ошибаться в отношении продолжительности, но если да, я не очень далеко. – tzot 2008-11-22 03:11:30

+1

Мой предыдущий комментарий был правильным, если выборка равна 44100 Гц. В общем, каждый кадр MPEG 1 Layer III имеет длину 1152 образца. – tzot 2008-11-22 03:19:50

1

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

7

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

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

1

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

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

Смежные вопросы