
В интернете можно найти массу информации о слепых тестированиях различных форматов и сравнении спектрограмм. Уже давно сделана масса выводов о том, какое качество предпочтительней. Но основная рекомендация остается одна — опираться на свои уши. И тут может оказаться, что кому-то и MP3 128kbps сойдет за CD-качество — скорее всего, купить неплохую акустику еще предстоит, а может и медведь на ухо наступил. Как быть?
Предлагаю провести совершенно ненормальный, но тем не менее наглядный эксперимент. Чтобы услышать разницу, мы будем кодировать звук не один, а 5, 10 или 50 раз!
При каждом повторном кодировании кодировщик будет удалять всё новую и новую информацию, которую на его взгляд человеческое ухо не услышит. Наша задача — выявить минимальный битрейт популярных форматов сжатия с потерями (MP3 и Ogg Vorbis), который и при 100 итерациях перекодирования сохранит звук практически неотличимым от оригинала.
Подготовка
Для кодирования MP3 будем использовать последнюю стабильную версию LAME (3.98.4). Чтобы автоматизировать процесс повторного кодирования сделаем небольшой bat файл. Схема работы проста: кодируем wav файл в mp3, затем декодируем обратно в wav, затем кодируем уже полученный wav и т.д.
@copy /Y %1 ~temp.wav
@for /L %%i in (1,1,%3) do @(
@echo -------------------------------------------------------------------------------
@echo -- Iteration %%i
@echo -------------------------------------------------------------------------------
lame %4 ~temp.wav ~temp.mp3
lame --decode ~temp.mp3 ~temp.wav
)
@copy /Y ~temp.mp3 %2
@del ~temp.wav
@del ~temp.mp3
Назовем его mp3_xcode.bat. Формат запуска выглядит так:mp3_xcode <input.wav> <output.mp3> <iterations> "<lame params>"
Для Ogg Vorbis воспользуемся OggEnc aoTuV b5.7. Сделаем bat файл для этого формата.
@copy /Y %1 ~temp.wav
@for /L %%i in (1,1,%3) do @(
@echo -------------------------------------------------------------------------------
@echo -- Iteration %%i
@echo -------------------------------------------------------------------------------
oggenc %4 -o ~temp.ogg ~temp.wav
oggdec -w ~temp.wav ~temp.ogg
)
@copy /Y ~temp.ogg %2
@del ~temp.wav
@del ~temp.ogg
Назовем его ogg_xcode.bat. Формат запуска выглядит так:ogg_xcode <input.wav> <output.ogg> <iterations> "<oggenc params>"
Если вы захотите самостоятельно поэкспериментировать, вам пригодится архив sndexp.7z (1,3Мб), в который включены все необходимые файлы.
На старт, внимание, марш!
Ниже вы увидите множество ссылок на аудио-файлы. Рекомендую воспользоваться плеером, который может воспроизводить файлы напрямую по http ссылке (например, foobar2000).
В качестве исходной композиции во всех случаях использовался насыщенный отрывок из композиции «O Fortuna» в исполнении Therion. Скачать его можно здесь: fortuna.flac (2,8Мб) или fortuna.ogg (466Кб).
Итак, приступим.
Первый рубеж: ~128kbps
Будем кодировать в VBR, поэтому подберем параметры, выдающие в среднем 128kbps.
mp3_xcode fortuna.wav fortuna_128x10.mp3 10 "-V 6"
ogg_xcode fortuna.wav fortuna_128x10.ogg 10 "-q4"
Получаем файлы:x10 | fortuna_128x10.mp3 (340Кб) | fortuna_128x10.ogg (360Кб) |
x50 | fortuna_128x50.mp3 (326Кб) | fortuna_128x50.ogg (367Кб) |
Во всех случаях мы получили отвратительный результат.
Поднимаем планку: ~192kbps
Подберем параметры, которые дают приблизительно 192kbps.
mp3_xcode fortuna.wav fortuna_192x10.mp3 10 "-V 2"
ogg_xcode fortuna.wav fortuna_192x10.ogg 10 "-q6"
Получаем файлы:x10 | fortuna_192x10.mp3 (533Кб) | fortuna_192x10.ogg (528Кб) |
x50 | fortuna_192x50.mp3 (531Кб) | fortuna_192x50.ogg (552Кб) |
Еще выше: ~256kbps
Подберем параметры, которые дают приблизительно 256kbps.
mp3_xcode fortuna.wav fortuna_256x10.mp3 10 "-V 0"
ogg_xcode fortuna.wav fortuna_256x10.ogg 10 "-q7,3"
Получаем файлы:x10 | fortuna_256x10.mp3 (624Кб) | fortuna_256x10.ogg (624Кб) |
x50 | fortuna_256x50.mp3 (624Кб) | fortuna_256x50.ogg (747Кб) |
x99 | fortuna_256x99.mp3 (624Кб) | fortuna_256x99.ogg (849Кб) |
И напоследок: ~320kbps
Поскольку в LAME параметр -V нельзя задать ниже 0, мы воспользуемся параметром -b 320. Для OggEnc сделаем то же самое. При этом Ogg Vorbis будет работать в режиме VBR, а MP3 в режиме CBR.
mp3_xcode fortuna.wav fortuna_320x10.mp3 10 "-b 320"
ogg_xcode fortuna.wav fortuna_320x10.ogg 10 "-b 320"
Получаем файлы:x10 | fortuna_320x10.mp3 (862Кб) | fortuna_320x10.ogg (888Кб) |
x50 | fortuna_320x50.mp3 (862Кб) | fortuna_320x50.ogg (1099Кб) |
Вердикт
- Ogg Vorbis лучше MP3 на битрейтах до 256kbps
- MP3 лучше Ogg Vorbis на битрейтах от 256kbps до 320kbps
- Кодер Ogg Vorbis с трудом переваривает ранее собой же закодированные данные, поэтому увеличивает битрейт
- Тестируемые кодеры обоих форматов при многократном перекодировании не смогли обеспечить прозрачное звучание на всех проверенных битрейтах
Выводы
В свете некоторой абсурдности всего эксперимента прошу не относиться к написанному слишком серьезно. Все это может стать лишь одним из поводов задуматься о хранении домашней колекции музыки lossless форматах наподобие FLAC. Пожалуй, это единственный разумный вывод, который можно было бы вынести из написанного.
P.S. Кандидат на звание псевдо-lossless
В 2002 году для кодирования Ogg Vorbis был популярен кодер OggEnc GT3 (176Кб). При кодировании на максимальном качестве он выдает битрейт в среднем более 500kbps. Чуть позже я попробовал воспользоваться им для нашего эксперимента, в результате чего был удивлен: даже после тысячи перекодирований кажется я не могу отличить полученный файл fortuna_q10x1000.ogg (1421Кб) от оригинала. Да и средний битрейт получаемого файла практически не изменялся после каждой итерации. Последняя официальная версия кодера Ogg Vorbis и популярная версия aoTuV даже при 100 перекодированиях давали плохой результат. Так что старый GT3 при максимальном качестве кодирует лучше всего. Однако, на других битрейтах GT3 не показал себя так же хорошо.