Как обнаружить потерю генерации транскодированного аудио

Допустим, у вас есть 96-килобитный mp3, и вы перекодируете файл в 320-килобитный mp3. Как можно программно определить исходный битрейт или качество? Потеря генерации возникает потому, что каждый раз, когда применяется алгоритм с потерями, новая информация будет считаться "ненужной". и отбрасывается. Как алгоритм может использовать это свойство для обнаружения транскодирования аудио.

128 кбит/с LAME mp3, перекодированный в 320 кбит/с LAME mp3 (I Feel You, Depeche Mode) 10,8 МБ.
альтернативный текст

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


person rook    schedule 26.05.2010    source источник
comment
Вы можете перекодировать вверх по битрейту, но в лучшем случае он будет иметь точно такую ​​же точность, как оригинал, и, скорее всего, внесет новые артефакты. По общему признанию, артефакты на 320 кбит довольно тривиальны, но если у вас нет внешней потребности в более высоком битрейте, вы ничего не покупаете себе: что потеряно, то потеряно. andrewdavidson.com/articles/transcoding-mp3-files   -  person msw    schedule 26.05.2010
comment
Ладья: вы можете сделать простую проверку существования. Если вы еще существуете, то ничего не выиграно от перекодирования с 96 кбит до 320 кбит.   -  person MusiGenesis    schedule 26.05.2010
comment
Гы, я прокомментировал ревизию 1. По ревизии 6 вопроса мой комментарий выглядит так, как будто я был неграмотным. Кстати, это сейчас вопрос или утверждение?   -  person msw    schedule 26.05.2010


Ответы (4)


Одним из способов сделать это является анализ спектра сигнала. Я не уверен, можно ли определить точную исходную скорость, но вы определенно можете отличить настоящий mp3 320 кбит/с от перекодированного 96 -> 320 кбит/с. MP3 со скоростью 96 кбит/с будет иметь более высокие частоты на уровне 15 кГц или около того. 320 кбит/с должны иметь ненулевое значение на частоте 18-20 кГц или даже выше (это зависит от кодировщика).

person Igor Krivokon    schedule 26.05.2010
comment
+1 интересная идея. Я не знал, что кодировщики обрезают разные диапазоны частот для разных скоростей передачи данных, хотя вполне логично, что они могут это делать. Есть ли какой-нибудь доступный источник, который дает битрейты и типичные диапазоны, отбрасываемые разными кодировщиками? - person MusiGenesis; 26.05.2010

Битрейт хранится в заголовке кадра MPEG. Если вы не сохраните исходный битрейт с чем-то вроде ID3, то это не так просто.

EDIT: обновлен ответ, похоже, я неправильно понял исходный вопрос.

person Community    schedule 26.05.2010
comment
Это скажет вам, что новый файл имеет размер 320 КБ, но не то, что исходный файл был 96 КБ. - person MusiGenesis; 26.05.2010
comment
Обновил ответ, похоже, я неправильно понял исходный вопрос. Прости. - person ; 26.05.2010

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

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

Обновление: теперь, когда я думаю об этом, может быть возможно как-то обнаружить это, хотя я понятия не имею, как это сделать программно. Человеческое ухо может различать примерно так (некоторые из них, во всяком случае): я могу четко различить 128k MP3 и 196k MP3, так что отличить 96k от 320k будет проще простого. MP3 96k, который был перекодирован, по-прежнему будет иметь все звуковые артефакты, присутствующие в версии 96k (плюс, к сожалению, новые).

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

person MusiGenesis    schedule 26.05.2010

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

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

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

person Marcus Adams    schedule 26.05.2010
comment
Я все еще думаю, что разница связана с характером mp3 с потерями, у вас есть ссылка, чтобы поддержать ваше опровержение? - person rook; 26.05.2010
comment
Вау, это был вовсе не твой вопрос. - person Marcus Adams; 27.05.2010