LINUX.ORG.RU

Как сравнить звуковые файлы?

 ,


0

1

Есть 2 файла MP3. Вроде бы, в них одно и то же, но как узнать точно? Размер отличается на несколько процентов. Если запустить их одновременно в MPV, заметно отставание одного от другого, но если один немного сдвинуть по времени в Audacity, совпадут очень хорошо.

Если бы это были картинки JPEG, я бы вычел одну из другой, и смотрел, останется ли что-то заметное. А как вычесть звук? Файлы не настолько совпадают, чтобы можно было инвертировать один в Audacity и вычесть. Можно ли вычесть Фурье-образы, и какая программа так умеет?

Или как лучше вычесть один звуковой файл из другого?

★★★★★

Если бы это были картинки JPEG, я бы вычел одну из другой, и смотрел, останется ли что-то заметное

А если бы это были картинки немного разных размеров и форматов?

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)

Преобразуй mp3 в картинку, таким образом задача сведена к той что ты умеешь решать

cobold ★★★★★
()

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

Смотря как файлы получены, если это оцифровка аналогового носителя, то они не совместятся. Если сжатый CD, то совместятся.

James_Holden ★★★★★
()

mp3 - это не lossless формат. Даже если ты два раза перекодируешь исходный звуковой поток в mp3 файл с одинаковым bitrate - на выходе получишь по разному сжатый звуковой поток кодеком mp3.

Плюс ещё в mp3 может быть VBR (Variable Bitrate).

Так что сравнение лоб в лоб не сработает. Смотри глазами, раз у тебя аудасити, ну и слушай, какой программной - анализатором воспользоваться не подскажу.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

по разному сжатый звуковой поток кодеком mp3.

Разница небольшая и очень специфическая.

Плюс ещё в mp3 может быть VBR (Variable Bitrate).

Как это влияет на возможность совместить, вообще? Разница будет минимальна после вычитания. Останется характерный пшшшпфффшпппшш

James_Holden ★★★★★
()
Ответ на: комментарий от kostik87

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

James_Holden ★★★★★
()

какая программа так умеет?

Я не пробовал, но вдруг оно?

$ gh search repos --language python wav diff -L 100:


ke4ahr/pydiffsa Python diff(1) and Spectrum Analyzer for comparing WAV files. public about 1 month ago

$ gh repo view ke4ahr/pydiffsa:

Python diff(1) and Spectrum Analyzer for comparing WAV files.

Periodic windowed frequency (spectral) analysis of WAV files.

pydiffsa applies a Hann-windowed FFT at regular hop intervals across one or two WAV files and prints the frequency bin magnitudes in dBFS for each window. When two files are given, it can compute the averaged per-bin dB difference (B − A) across all windows — useful for comparing a reference signal against a synthesised or processed version of it. …

dataman ★★★★★
()
Ответ на: комментарий от ya-betmen

А если бы это были картинки немного разных размеров и форматов?

ImageMagick и PIL умеют преобразовывать форматы, масштабировать, сдвигать и обрезать.

question4 ★★★★★
() автор топика
Ответ на: комментарий от kostik87

mp3 - это не lossless формат. Даже если ты два раза перекодируешь исходный звуковой поток в mp3 файл с одинаковым bitrate - на выходе получишь по разному сжатый звуковой поток кодеком mp3.

JPEG — тоже формат с потерями. Но если 2 разных файла преобразовать в несжатые битмапы RGB одинаковых размеров, их можно вычесть чтобы оценить сходство.

Смотри глазами,

Предпочитаю смотреть на результат преобразований, убирающих всё лишнее. Например, на разность.

question4 ★★★★★
() автор топика

Есть 2 файла MP3. Вроде бы, в них одно и то же, но как узнать точно?

Никак. MP3 при сжатии портит исходную длину файла. Тот же OGG Vorbis этим вроде бы не страдает, при декодировании выдаст файл исходной длины.

Skullnet ★★★★★
()
Последнее исправление: Skullnet (всего исправлений: 1)
Ответ на: комментарий от kostik87

100% можно сравнить через ffmpeg, с некоторой аппроксимацией.

Можно подробнее? Это cmp и dct?

Один файл сдвинут относительно другого на 4.336 с, как это учесть?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Но если 2 разных файла преобразовать в несжатые битмапы RGB одинаковых размеров, их можно вычесть чтобы оценить сходство.

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

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

А что именно надо сравнить, конкретно, и с какой целью? Какие нужны выводы?

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

question4 ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

Поэтому нужно точное выравнивание.

Как в Audacity сдвигать треки друг относительно друга помимо двиганья заголовка мышью? Мышью точно не получается.

question4 ★★★★★
() автор топика
Ответ на: комментарий от dataman

ke4ahr/pydiffsa Python diff(1) and Spectrum Analyzer for comparing WAV files. public about 1 month ago

Работает и с MP3. Выдаёт 1 число до 1.0 — видимо, степень соответствия. Для идентичных файлов — 1.0, для почти неразличимых на слух — ~0.9, для не имеющих ничего общего — ~0.5.

Недостаточно информативно.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Выдаёт 1 число до 1.0 — видимо, степень соответствия.

Это с параметром --diff так?

Недостаточно информативно.

Что ж, чем смог. :)

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от question4

Есть 2 файла MP3. Вроде бы, в них одно и то же, но как узнать точно?

Недостаточно информативно

По-моему это достаточно информативно по ТЗ топика. Иначе тебе надо рихтовать ТЗ дополнительными условиями

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 3)
Ответ на: комментарий от ya-betmen

Если бы это были картинки JPEG, я бы вычел одну из другой, и смотрел, останется ли что-то заметное

А если бы это были картинки немного разных размеров и форматов?

Вычитать картинки не вариант даже когда формат и размер совпадают - а что, если цвета хоть чуть-чуть скорректированы?

Я уже давно с этой темой игрался, было интересно, пробовал несколько подходов, код (старый, новее на notabug, а он бесконечно лежит): https://github.com/Bfgeshka/picunic

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Вычитать картинки не вариант даже когда формат и размер совпадают - а что, если цвета хоть чуть-чуть скорректированы?

Значит на разностной картинке будут цветные пятна в соответствующих местах. Обычно довольно тусклые. Это не будет сплошной чернотой, но будет ближе к ней, чем к исходным.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Они слишком сильно различаются.

Ну значит получишь довольно существенную «разницу».

Всё ещё непонятно, что ты хочешь. В случае с JPEG твоим так же ведь. Если отличаются слабо, в виде разности получишь почти полностью чёрную картинку с лёгким шумом, если отличаются сильно (например один адски зашакален), получишь пёструю картинку с кучей информации. Ну и тут так же. Отличаются слабо — получишь «почти тишину», отличаются сильно — получишь много шума, в котором даже читается оригинал.

Разве это и не есть то, чего ты хотел? Чего ты хочешь добиться в итоге?

CrX ★★★★★
()
Ответ на: комментарий от question4

Значит на разностной картинке будут цветные пятна в соответствующих местах. Обычно довольно тусклые. Это не будет сплошной чернотой, но будет ближе к ней, чем к исходным.

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

Bfgeshka ★★★★★
()
Ответ на: комментарий от CrX

Всё ещё непонятно, что ты хочешь. В случае с JPEG твоим так же ведь. Если отличаются слабо, в виде разности получишь почти полностью чёрную картинку с лёгким шумом, если отличаются сильно (например один адски зашакален), получишь пёструю картинку с кучей информации. Ну и тут так же. Отличаются слабо — получишь «почти тишину», отличаются сильно — получишь много шума, в котором даже читается оригинал.

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

Можно ли как-то преобразовать, чтобы убрать такой сдвиг? Или только сконвертировать в PCM и перебором искать сдвиг, когда сумма модулей (или квадратов) разностей будет минимальна?

question4 ★★★★★
() автор топика
Ответ на: комментарий от Bfgeshka

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

Предложи такой алгоритм для звука. Выше уже было что-то через Фурье, но грубо.

Кроме того, интересуют именно различающиеся места. Через хеши их не найдёшь, всё равно придётся вычитать.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Если вычитаемые звуковые файлы очень похожи, но не совпадают по фазе

Инвертируй фазу.

Можно ли как-то преобразовать, чтобы убрать такой сдвиг?

Какой сдвиг? Если там по времени сдвиг на пару сэмплов — просто визуально совмести в том же audacity. Так, чтобы сэмпл одного файла был над соответствующим сэмплом другого.

У тебя с твоими JPEG то же самое же. Если одна картинка будет имеет какое-то смещение относительно другой (ну скажем, вправо на 3 пикселя и вниз на 5), то тоже всё твоё вычетание будет бесполезным, пока не совместишь.

CrX ★★★★★
()

Ключевое слово - мел-спектрограмма. Преобразует аудиозапись в спектрограмму, представляющую собой изображение. Можно преобразовать всю запись или часть, разбив на чанки.

Далее сравниваются изображения.

Попробуй в этом направлении поиграться. В Python есть библиотека librosa, в ней функция librosa.feature.melspectrogram Результат очень желательно перевести в децибелы.

ИИшечка примерно такой код сгенерила для примера использования librosa. Проверил - работает:

import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt

# 1. Загружаем аудиофайл
# sr=None оставит оригинальную частоту дискретизации
y, sr = librosa.load('твой_файл.wav', sr=None)

# 2. Вычисляем мел-спектрограмму
# n_mels — количество полос (фильтров) в мел-шкале
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)

# 3. Переводим мощность в децибелы (логарифмическая шкала)
S_dB = librosa.power_to_db(S, ref=np.max)

# Визуализация (опционально)
plt.figure(figsize=(10, 4))
librosa.display.specshow(S_dB, x_axis='time', y_axis='mel', sr=sr)
plt.colorbar(format='%+2.0f dB')
plt.title('Mel-spectrogram')
plt.tight_layout()
plt.show()

Кстати, можно сразу в mp3 грузить файл.

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 2)

По аналогии если.

Допустим, сняли с рук на телефон два кадра в одном месте. Как надежно опрелелить вычитанием, что во втором кадре не добавился предмет? Между кадрами все поедет, с рук же снимали. Ракурс поедет. Я не знаю с ходу, как это сделать.

James_Holden ★★★★★
()

sounddiff, AFT SonicDeCloner

если хочешь сам разобраться как сравнивать смотри sounddiff там питон есть исходники

cylon17
()
Ответ на: комментарий от question4

простой как три копейки….
вычитаешь и получаешь шум квантования и сжатия, эт если они еще идеально по таймингу совпадут :)
а если сдвинуты даже на доли секунд (точнее большее чем на 1/(2*20кгц) = 25 мкс) , то есть вероятность что найдется частота которая в разных треках будет сдвинута на полфазы и на выходе будет жопа жопошная… :)

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

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 2)
Ответ на: комментарий от question4

Можно ли как-то преобразовать, чтобы убрать такой сдвиг?

Если не видно глазами по waveform’ам, то прицепить эффект delay на одну из дорожек и подбирать задержку на слух.

Т.е. кидаем два файла на треки, нормализуем громкость до одинакового уровня, совмещаем по времени «на глаз», выравниваем по длительности, разворачиваем один трек по фазе, включаем отображение сонограмм и елозим delay’ем до приемлемого ушами результата. Сводим в один трек, ищем на сонограмме (с тюненым режимом отображения) яркие пятна. Получается херово, ну а что делать.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от CrX

Если вычитаемые звуковые файлы очень похожи, но не совпадают по фазе

Инвертируй фазу.

Был сдвиг на 1/4 периода, будет на 3/4.

Если там по времени сдвиг на пару сэмплов — просто визуально совмести в том же audacity.

Как в Audacity двигать без мыши? Руки трясутся, не попадаю.

У тебя с твоими JPEG то же самое же. Если одна картинка будет имеет какое-то смещение относительно другой (ну скажем, вправо на 3 пикселя и вниз на 5), то тоже всё твоё вычетание будет бесполезным, пока не совместишь.

С картинками хорошо видно, какова невязка и куда и на сколько двигать. Как визуализировать для звука?

question4 ★★★★★
() автор топика

Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария