Об mp3
2016-02-22
В начале был винил. Не то чёрное рельефное недоразумение, которым обклеивают поцарапанные капоты, а виниловые пластинки. Первый массовый способ распространения звукозаписей. Такой большущий чёрный, а иногда даже полупрозрачный зелёный или жёлтый, диск с канавками. Их ещё на специальном проигрывателе проигрывать надо, с иголкой. Пластинки ещё даже производят, можно, например, в MediaMarkt купить, только стоят недёшево. Тёплый аналоговый звук.
Потом была эра магнитной звукозаписи. Тоже аналоговой. Крутейшую технику с бобинами в попсовости победила компакт-кассета. Приличный звук с кассеты могли выдать илитные стационарные деки с прямым приводом подкассетников и тон-вала. Но также были и почти карманные плееры на батарейках. Когда, чтобы сэкономить батарейку, кассету перематывали на карандаше. Музыка впервые стала мобильной.
Пробовал я как-то в начале века перегонять музыку с винила и кассет в цифру. Винил — шикарен. Кассета — говно. Для кассеты хватало 22 кГц дискретизации, уж такой частотный диапазон.
Потом был компакт-диск, он же CD. Первая популярная настоящая цифровая музыка. Без сжатия, голые 44 кГц, 16 бит, стерео, 74 минуты музыки на одном диске. Действительно хорошее качество. Даже были носимые плееры для CD. Тоже на батарейках, но карандаш уже не нужен. Но они быстро умерли. Потому что появились флэш-память и mp3.
Тогда наступили уже не просто интернеты, а веб. И вебу нужна была музыка. Интернет был не сильно быстрым, и слушать музыку онлайн, как сейчас можно изо всяких вконтактов, было невозможно. Музыку качали по трекам отдельными файлами. Но качать десятки мегабайт несжатого CD качества на каждую песню и тогда казалось дуростью. Нужен был формат сжатия. И им стал MP3.
Тогда, конечно, был WAV от Майкрософта, который мог сжимать музыку без потерь. Но mp3 сжимал лучше. Потому что mp3 — формат сжатия с потерями. Если вы сожмёте исходные байтики с CD в mp3, а потом разожмёте, как это на лету делает проигрыватель, то получите несколько совсем другие байтики. Mp3 использует магию преобразования Фурье, чтобы разобраться с частотной составляющей сигнала, и психоакустическую модель человеческого слуха. Выкидываем из исходных данных то, что человек всё равно не услышит: обрезаем частоты, убираем тихие звуки на фоне громких и т.п., и за счёт этого на выходе получаем меньше байтиков.
Вообще-то mp3 является частью стандарта MPEG-1 и носит официальное имя MPEG-1 Audio Layer 3. Это стандарт для цифрового телевидения до-HD эпохи. В нём делались Video CD. До появления этих наших торрентов нормальные цифровые видосы были, может, помните .mpg файлы. Ну а mp3 — это один из способов кодирования звука в этих видосах, только выделенный в свой формат файла .mp3.
А ещё у mp3 море недостатков. Он защищён патентами, и до сих пор в некоторых странах бесплатное использование mp3 кодека может являться незаконным. Психоакустическая модель mp3 по современным меркам весьма примитивна. Слышали, наверное, эти металлические призвуки в mp3 плохого качества? Mp3 не является sample-accurate кодеком. Это означает, что восстановленный из mp3 звук отличается от оригинала не только значениями отдельных отчётов (грубо говоря, громкостью и частотами), но и длительностью. Это приводит к невозможности использовать mp3, например, для наложения звуковых эффектов в тех же играх, там всё должно быть точно, до отчёта. Теги, ну эту информацию об исполнителе и название трека, в mp3 добавляли задним числом и наплодили кучу версий стандартов. Плюс эти стандарты исторически нифига не соблюдались. В результате увидеть в mp3 файле вместо имени исполнителя какие-то кракозябры — нормальное дело.
И все эти недостатки давно побеждены. В чудесном, любимом мною, свободном формате Vorbis, который в природе часто встречается в контейнерах Ogg. А ещё есть новый Opus, который славен тем, что одинаково хорошо кодирует и человеческую речь на низких битрейтах (что важно в телефонии) и музыку на высоких битрейтах. Ну а настоящие цифровые меломаны копят музыку в современном формате сжатия без потерь FLAC.
Меня очень удивляет, что на просторах сегодняшнего интернета легко найти mp3, сложно, но можно купить flac, но полностью отсутствует Vorbis. Ну почему? Ведь Vorbis объективно лучше? Я потратил многие часы, кодируя и в mp3 и в Vorbis, с разными битрейтами, разными кодерами. И Vorbis всегда был лучше.
Конечно, из flac можно накодировать что угодно, это, можно сказать, исходный звук. Да и почему бы не брать просто flac везде и всегда. Но таки кодеки с потерями остаются актуальными, когда нужно сэкономить место. В ресурсах игр, например, или в походной оффлайновой магнитоле.
Кстати, о магнитолах. Шесть лет назад искал магнитолу в машину. Хотелось малого, чтобы с USB флэшки или SD карты мог играть mp3 и Ogg Vorbis. Фиг вам. Магнитолы, которые умели бы играть Vorbis, являлись каким-то навороченным бортовым компьютером по соответствующей цене. А все остальные умели только mp3. Хотя все карманные флэш-плееры того времени уже давным-давно умели играть всё. Такое ощущение, что и тогда, и сейчас автомобильные магнитолы отстают от новейших веяний как минимум лет на пять. Моя магнитола, которой я всё же обзавелся, даже не умеет, как выяснилось позднее, читать SDHC карты, которые больше 2 ГБ.
Так вот, имея такую магнитолу, приходится музыку конвертировать.
Сконвертировать в mp3, имея ffmpeg или libav, очень просто. Например, так:
$ avconv -i in.flac -vn -acodec libmp3lame -ab 128k out.mp3
Тут используется LAME кодек mp3, он чуть получше остальных. Битрейт выставлен в 128 кбит, мало для приличной музыки, но вполне достаточно для прослушивания в автомобиле.
Эта магнитолка ещё и не умеет отображать теги русскими буквами. Ну и ладно, транслитерируем в латиницу, всё равно, нефиг пялиться на экранчик магнитолы во время вождения. Добраться до тегов можно с помощью, например, Mutagen — отличной библиотечки и пары утилит. А для транслитерации я раньше предпочитал использовать konwert, но transliterate тоже неплох.
Ну и, наконец, слушая рандомом кучу разных альбомов, я своими ушами столкнулся с проблемой динамического диапазона. Динамический диапазон — это, грубо говоря, соотношение между самым тихим и самым громким звуками трека. Диапазон ограничен как используемым цифровым кодированием, так и возможностями воспроизводящего оборудования. Но средняя воспринимаемая громкость трека находится где-то посередине между самыми тихими и громкими звуками. Отсюда возникает соблазн. Можно сжать динамический диапазон сигнала, сделав тихие звуки громче. Но тогда возрастёт и общая громкость сигнала, и трек со сжатым диапазоном будет звучать в эфире радиостанций громче, чем трек без сжатия.
Вот на этот соблазн, чтобы звучало громче, и ведутся звукорежиссёры из года в год. И даже у одной и той же группы записи двадцатилетней давности звучат тише, чем сегодняшние. Это и есть проблема динамического диапазона. И это, блин, слышно.
Нам поможет mp3gain. Оказывается, в mp3 файлах, в метаданных, есть некий глобальный «регулятор громкости». Его значение можно подкрутить, чтобы дать указание проигрывателю играть файл потише или погромче. Mp3gain анализирует содержимое файла, определяет, насколько, по его мнению, звучание файла громко относительно некоей нормы и подкручивает этот «регулятор громкости». Важно натравливать mp3gain не на каждый файл по отдельности, а на каталог со всеми файлами одного альбома. Разные треки в альбоме всё же могут различаться по громкости, и это нормально, эту разницу нужно сохранить. А выравнивать надо громкость разных альбомов разных лет, по одной универсальной линейке mp3gain. Это работает. И слушать рандомом становится значительно приятнее.
Все эти танцы вокруг mp3 родили маленький скриптик, который я использую для копирования музыки для этой грешной магнитолы. А что ещё делать, приходится есть кактус. Где мой Vorbis?