Как сравнить mp3 программно - PullRequest
3 голосов
/ 15 февраля 2009

Мне нравится иметь возможность сравнивать mp3-файлы программно. Проблема, по которой я не знаю. Заголовок? Гистограмма? каналы? У кого-нибудь есть опыт работы с этим предметом?

Ответы [ 8 ]

17 голосов
/ 15 февраля 2009

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

Если вы хотите сравнивать только по помеченным данным, используйте стандарт ID3 . Есть в основном две версии, первая очень простая (ID3v1) и состоит из 128-байтового блока в конце MP3. ID3v2 помещает больший блок переменного размера в начало MP3.

5 голосов
/ 27 августа 2013

Мне нравится иметь возможность сравнивать mp3-файлы программно

У меня был тот же вопрос. Я обнаружил, что itunes изменил многие из моих загрузок Amazon MP3, изменив метки времени / даты, размеры файлов и, следовательно, подписи MD5. В моих резервных копиях внезапно появилось много почти одинаковых файлов.

Когда я делал различия в VIM, я мог видеть, что изменения были ограничены очень маленькими частями файлов. Файлы выглядели одинаково рядом в Audacity даже при близком увеличении.

Мое решение - создать дамп WAV-файла mp3 без заголовка, а затем сравнить сигнатуры MD5 каждого WAV. FFMPEG может сделать перевод довольно легко.

ffmpeg -y -i $mp3 $mp3.wav;
md5sum $mp3.wav

Я создал хеш с ключом MD5, указывающим на исходную спецификацию файла MP3. Поместите файл WAV на SSD для скорости.

Грубая сила, но это работает.

4 голосов
/ 15 февраля 2009

Полагаю, есть несколько подходов, которые вы могли бы использовать для этого:

1. Сравнить теги

Вы можете сравнить данные, хранящиеся в тегах mp3. Теги хранятся в формате ID3 . Существует несколько библиотек, которые помогут вам получить доступ к тегам, tagLib является популярным выбором ( TagLib Sharp для приложений .net)

2. Акустический отпечаток пальца

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

3. Создание хэша из файла

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


Дальнейшее чтение:

  • Здесь есть интересная статья MSDN об управлении коллекцией mp3 (включая чтение тегов): текст ссылки (Это в Visual Basic, но все еще может быть полезным.)

  • Здесь есть небольшое описание формата файла: текст ссылки

3 голосов
/ 15 февраля 2009

Что вы имеете в виду, сравнивая? Метаданные (автор, название и т. Д.), Аудиоданные? Для чего?

Популярным и основным способом сравнения аудиоданных является вычисление некоторого расстояния по некоторым спектральным характеристикам, таким как MFCC:

http://en.wikipedia.org/wiki/Mel_frequency_cepstral_coefficient

2 голосов
/ 22 июля 2009

Чтобы ответить на ваш вопрос лучше, я думаю, нам нужно точно знать, что вы хотите сделать.

Если вы хотите сравнить реальную песню, у musicDNS есть библиотека, которая может создавать аудио-отпечатки пальцев. Библиотеку с именем libOFA можно найти здесь . Эта система снятия отпечатков пальцев используется, например, musicbrainz для сопоставления цифровых аудиофайлов с их базой данных. Теоретически вы можете использовать это для сравнения двух разных цифровых файлов.

Если вы хотите сравнить данные тегов (id3v1 / id3v2), есть много библиотек, которые могут сделать это за вас, упоминается taglib, а также libmpg123 имеет свои собственные функции для извлечения данных тегов.

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

0 голосов
/ 29 мая 2019

Похоже, Chromaprint сделает то, что вы ищете. Он преобразует данные PCM в аудио-отпечатки пальцев, которые затем можно использовать для сравнения.

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

Также, если вы используете систему Linux, скорее всего, вы найдете пакет для нее.

0 голосов
/ 15 февраля 2009

Если вы просто хотите сравнить mp3-файлы на основе тегов, я бы порекомендовал taglib .

0 голосов
/ 15 февраля 2009

Я часто использую fdupes в Linux для поиска дубликатов файлов fdupes использует контрольные суммы md5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...