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

Общее описание процесса

Эталонный трек — трек, выбранный для тестирования наборов настроек. Это оригинальный трек в формате WAV в хорошем качестве.

  1. Строится спектрограмма эталонного трека
  2. Эталонный трек кодируется с выбранными настройками
  3. Закодированный результат декодируется обратно в WAV-файл
  4. Строится спектрограмма декодированного файла
  5. Спектрограммы эталона и закодированного файла считываются и сравниваются

Построение спектрограммы

Для построения спектрограммы применяется утилита Sox со следующими ключами:

-n spectrogram -r -m -x 5000 -y 257

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

Пример спектрограммы

Спектрограмма

Сравнение спектрограмм

Одним из наиболее важных вопросов в новой методике является непосредственно принцип сравнения спектрограмм. Результатом я хотел получить усреднённый во всему файлу спектр искажений. Искажения представляют собой процентное соотношение изменения к теоретически максимально возможному изменению. Например, если эталонное значение спектрограммы в определённой точке 120, а кодированной спектрограммы 117, то уровень искажения вычисляется следующим образом:

| 120 - 117 | / 255 ≈ 1.18%

где 255 — максимальное значение для 8-битного беззнакового целого числа.

При таком подходе к сравнению для получения искажения в 100%, мы должны иметь закодированное значение в 255, а эталонное 0. Этот случай скорее всего невозможен на практике, иначе можно было бы говорить о явном дефекте в кодировщике или декодировщике. Поэтому в реальных условиях одни из наихудших уровней искажений будут порядка 20-30%.

В какой-то момент хотелось сделать показатель искажений динамическим, в зависимости от текущего значения. Чтобы, например, при эталонном значении 120 и кодированном значении 0 получалось бы 100% искажений, что, согласитесь, тоже имеет свою логику. Но это приводило к усложнению нормализации и, как следствие, к ухудшению дифференциации результатов различных кодеков и настроек.

Недостатки методики

Этот способ не даёт главного ответа на вопрос: является ли кодирование с выбранными параметрами прозрачным? С трудом могу себе представить автоматизацию ABX-тестов, разве что посредством обучения нейронных сетей. Но, тем не менее, метод вполне пригоден для сравнения форматов и реализаций кодеков между собой.