Как обрезать MP3 без потери качества
Онлайн-резалки декодируют файл и кодируют его заново. Разбираемся, что вместо этого делает срез по кадрам и когда лучше взять WAV.
Когда я впервые отрезал четыре секунды вступления у подкаста через онлайн-резалку, файл вернулся меньше, чем позволяла арифметика, и глуше в наушниках. Я удалил четыре секунды. Остальное меняться не должно было.
Причина у таких сервисов обычно одна, и писать о ней они не любят. Файл декодируется в несжатый звук, режется и кодируется обратно с тем битрейтом, который стоит у них по умолчанию. Два круга сжатия с потерями там, где хватило бы одного.
MP3 уже нарезан на части
MP3 — это не цельный поток. Это цепочка независимых кадров, в каждом по 1152 сэмпла, то есть примерно по 26 миллисекунд при 44,1 кГц. У каждого кадра свой четырёхбайтовый заголовок с битрейтом и частотой дискретизации, и декодер может начать играть с любого. Поэтому недокачанный до конца MP3 всё равно проигрывается до места обрыва.
Значит, есть способ подешевле. Находим кадр, в который попало начало выделения, находим кадр с его концом и копируем этот диапазон байтов в новый файл. Без декодирования, без кодека. Сохранённый звук остаётся теми же битами, что и был, потому что сэмплов никто не касался.
Именно это делает обрезка аудио по кнопке «Скачать MP3». Она разбирает таблицу кадров, выравнивает оба маркера по ближайшей границе и показывает, куда они встали.
Когда 26 миллисекунд — уже много
Выравнивание по кадрам — настоящее ограничение, а не мелочь округления. Если вы срезаете тишину в начале или вытаскиваете припев из трека, разницу не услышит никто. А вот если нужно убрать вдох перед первым словом вокалиста, то эти 26 мс как раз и есть то, что вас волнует.
Для таких случаев есть экспорт в WAV. Он работает с декодированными сэмплами, поэтому срез точен до одного сэмпла из 44 100 в секунду и умеет накладывать фейды. Платить приходится размером: 16 бит, стерео, 44,1 кГц дают около 10 МБ на минуту независимо от того, что было на входе. Четырёхминутный трек, пришедший как MP3 на 5 МБ, уходит как WAV на 42 МБ.
Откуда тик в начале обрезанного MP3
Иногда у среза по кадрам в первые доли секунды слышен слабый тик. Это свойство формата, а не поломка инструмента.
Layer III пользуется резервуаром битов: кадру, которому не хватает места под своим битрейтом, разрешено занять неиспользованное место у предыдущих кадров. Срезали в произвольном месте — и первым одному-двум кадрам может не хватить занятых данных, на которые они рассчитывали, так что декодируются они чуть грубее. Длится это около 50 мс, дальше поток выправляется сам. Начните выделение в тихом месте, и вы ничего не услышите.
Теги с собой не поедут
У обрезанного MP3 нет ни названия, ни исполнителя, ни обложки. Теги ID3 лежат вне звуковых кадров, и там же находится заголовок Xing с исходной длительностью. Перенесите его в более короткий файл — и плееры покажут неверное время, а перемотка начнёт вести себя странно. Честнее выбросить и то, и другое. Теги потом впишутся в плеере за минуту.
Ещё одна полезная штука, которая следует из самодостаточности кадров: два среза MP3 можно соединить простой склейкой. В Windows команда copy /b часть1.mp3 + часть2.mp3 итог.mp3 даёт рабочий файл. Так и вырезают кусок из середины — за один проход этого не сделает ни одна резалка.
Перетащите файл в обрезку аудио и режьте прямо во вкладке: звук не уходит с вашего устройства, поэтому нет ни ожидания загрузки, ни лимита на размер.