Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Кое-что о MP3-файлах

Здравствуйте, все!

Тут в рассылках [Integr], [TC] одновременно обсуждались разные вопросы
по MP3. Точно не помню кто, что, где, когда. Примерные формулировки:
- чем резать MP3-файлы;
- принципы работы таких "резающих" программ;
- чем склеивать MP3-файлы;
- почему аудиоредакторы напрямую не производят обработку MP3-файлов;
и т.д. Я бы и не влезал в эти дела, но тут было предложено соединять
MP3-файлы Тотал Коммандером без всяких оговорок. Были письма "за", а вот
критики не было. Считаю, что использовать как общий метод сборку Тоталом или
bat-файлами нельзя. Меня попросили "объясниться", пообещал сделать
старт-топик по MP3-файлам и вот выполняю. Это письмо шлю сразу в обе
рассылки - может кое-что будет интересным для подписчиков и из этой и из той
рассылки, хотя многие из нас как Фигаро - и тут, и там...

Немного теории очень упрощённо. Для комп. обработки аналогового
аудиосигнала его цифруют - через малые одинаковые промежутки времени
измеряют значения (амплитуду). То, что мы называем частотой дискретизации,
например, 44100 герц - это сэмплрейт (samplerate), то есть за секунду
делается 44100 измерений, выборок, сэмплов. По стандарту MP3 каждые 1152,
если мне не изменяет память, сэмпла кодируются для сжатия в один неделимый
фрейм. Можете легко точно вычислить его продолжительность. Это десятые,
сотые доли секунды (зависит от сэмплрейта). Тогда получается, что
какая-нибудь песня в MP3 формате состоит из тысяч и тысяч фреймов -
неделимых боевых единиц MP3-файла. Первые байты фрейма содержат инфу о
битрейте, сэмплрейте, режиме (моно, стерео, джоинт), оригинальный ли это
файл, версии MPEG, лейере и так далее. Но там нет информации о других
фреймах, CBR, ABR, VBR, продолжительности звучания файла. А вот в каком-то
формате (огг ворбис?) каждый фрейм "знает" свой порядковый номер.

Получается такая картина. При кодировании по стандарту MP3 с его
психоакустическими алгоритмами каждый фрейм делается кодером с учётом
предыдущих. Но вот как только MP3-файл создан, то мы увидим, что он
состоит из фреймов никак не связанных между собой. Получаются "автономные"
фреймы. В этом и сила, и слабость MP3.

При воспроизведении MP3-файла декодер просто берёт фрейм и развёртывает
его без оглядки на другие. Ему совершенно наплевать каким был
предыдущий фрейм, сколько их всего, какова должна быть их
последовательность и так далее - он только смотрит заголовок текущего
и развёртывает его на основе только этой информации из начала фрейма.
Считается, что это, во-многом, предопределило популярность этого формата.
Можно было качать из сети MP3-файл и тут же его слушать, хотя он ещё
полностью не загрузился; постоянный битрейт формировал битовый поток,
который, видимо, был удобен по разным техническим причинам.

В стандарте MP3 некоторые вещи очень чётко указаны. Например, при
вычислении длины фрейма в байтах получается не целое число. Как быть?
Это решается введением так называемых "байтов выравнивания", которые кодер
по своим правилам распределяет по всему файлу, чтобы обеспечить заявленный
битрейт, то есть сколько бит данных должно быть обработано за секунду. Также
стандарт требует, чтобы на протяжении всего файла сэмплрейт не менялся. А
вот битрейт может меняться. Поэтому мы пользуемся кроме постоянного, ещё
усреднённым и переменным битрейтами. Если плеер воспроизводит CBR, то ему
достаточно посмотреть заголовок только одного фрейма, размер аудиоданных
файла и он может вычислить продолжительность звучания, может точно
позиционироваться. А вот в случае VBR надо просмотреть все фреймы!! Если кто
помнит MNavigator, то я там писал про некорректную работу с VBR - просто
лень было всё отсматривать и вычислять...

Про качество кодеков не будем. Вот про теги нужно сказать. Итак, имелся
MP3-файл, состоящий из голых аудиоданных - просто цепочка фреймов. Один
человек захотел прикрепить к файлу инфу о названии песни, альбоме и так
далее. Записал нужную инфу в 128 байтов и приклеил к концу MP3-файла. Удачно
получилось, разработчики плееров сделали поддержку такого расположения
тегов. Затем 30 символов на поле не стало хватать, сделали тег плюс,
расположив его между аудиоданными и простым тегом в 128 байт. Этого тоже
вскоре оказалось недостаточным. Стали располагать инфу в начале MP3-файла. И
всё это народное творчество не противоречит формату MP3, так как декодер
умеет вычленять из потока битов фреймы, а всё остальное игнорирует! Обратим
внимание, что между фреймами пока никто ничего не располагает, хотя это тоже
не повредит проигрыванию MP3-файла. Это считается моветоном, такое вот
джентльменское соглашение. Вы можете вставить txt-файл "Война и мир"
Толстого внутри MP3-файла - и ничего не услышите, если там не встретится
область синхронизации (11 битовых единиц). А вот, если вставите в wav-файл,
то услышите этот роман в исполнении ЦАПа. Так что, если кто имеет тайны,
явки, пароли, счета в швейцарских банках, то можете спрятать их в
MP3-файлах.

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

Итак, теперь можем легко догадаться, что программы, режущие MP3-файлы,
скорее всего, режут их по границам фреймов. В этом случае никакие
аудиоданные не теряются, но куда деваются теги? Если MP3-файл окаймляли теги
и спереди и в конце, то при разбиении тег будет в начале первого куска и в
конце последнего. Всё зависит от программы - она может всё продублировать
для каждого куска, а может и нет. Кроме этого, вспомнив "байты
выравнивания", трудно сказать насколько "правильно приготовленными" будут
полученные куски. Если пройтись каким-нибудь спец. MP3-сканером, то может
обнаружится их недостача или избыток. Но это всё более-менее нормально.

А вот если резать Тотал Коммандером (а я знаю такие случаи), то в местах
разреза, скорее всего, фрейм повредится, верно? Вспомним, что
продолжительность фрейма несколько сотых долей секунды. То есть на слух это
не услышим, но это уже "грязная" работа, на концах таких кусков будут висеть
непонятные байты. Это тоже моветон и "неправильно приготовленный" MP3-файл.

Если же склеивать произвольные MP3-файлы Тоталом или батниками, то это
вообще абзац. Внутри файла могут оказаться "окаймляющие" теги, может
оказаться разный сэмплрейт! А это уже серьёзно - нарушение одного из базовых
требований стандарта MP3. Если плеер не заточен под тотальное сканирование
фреймов, то он будет ошибаться в позиционировании и продолжительности
звучания. Это уже будет не MP3. Если в борщ положить ещё и курятину,
макароны, бананы, то это будет "работать", то есть это будет съедобным,
питательным, но это уже будет не борщ.

Помните, говорил про силу и слабость MP3 - он, бедняга, будет
воспроизводиться, как бы над ним не измывались. Ему остаётся уповать только
на нашу добросовестность. Если хотите делать подкаст, выложить на публичное
обозрение, а не для личного пользования, то лучше "готовить" MP3-файлы
хорошими специализированными программами. Я упомянул лишь явные признаки
нарушения стандартов MP3, но есть и скрытые, которые легко выявляются.

Серьёзные аудиоредакторы обычно всегда разворачивают MP3 в wav,
обрабатывают, а потом опять в MP3. Так обеспечивается выполнение стандартов.
Да и напрямую, например, увеличить громкость, довольно сложная задачка.
Чтобы получить качественный продукт надо поиграться битрейтами,
сэмплрейтами, у всех всё индивидуально. Встречал MP3-файлы стерео, которые
при перекодировке в моно с не меньшими битрейтом и сэмплрейтом, резко теряли
в качестве звучания. Конвертация в joint решала проблему. Хотя в теории
такого быть не должно, но кодеры делают разные люди и по-разному...

Вот и всё, что хотел сказать. Каждый выбирает сам методы обработки
MP3-файлов, но может кого-то это письмо удержит от слишком смелых "решений".
Спасибо всем кто дочитал это письмо, спасибо мне, что его написал, спасибо
MP3 за то, что он у нас есть!

С н.п. Родион.

Ответить   Fri, 7 Oct 2011 18:30:18 +1000 (#1951939)

 

Ответы:

Всем доброго времени суток.

Хотя и не я начал эту тему,но всё-таки часто пользуюсь склеиванием
Mp3-файлов, И особенно,если,скачал какую-либо аудиокнигу без указания
дорожек или хочу разбить её по-своему. Там,полагаю,это особой роли не
играет. И для склеивания Mp3-файлов,на мой взгляд как нельзя лучше подходит
Total Commander.
Ну,а вообще-то,Родион,огромное вам спасибо за подробное и грамотное
разъяснение по этому вопросу.

Василий.

Ответить   "Indigo" Fri, 7 Oct 2011 17:12:42 +0300 (#1952061)

 

Доброго времени суток, Родион.

7 октября 2011 г. в 11:30 Вы написали:

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

Ответить   Fri, 7 Oct 2011 22:02:37 +0300 (#1952675)

 

Здравствуйте, все!

Спасибо тем, кто откликнулся! Кажется, дискуссии нет, просто обмен
мнениями. Тоже немного выскажусь и одно маленькое рац.предложение.

yuniks пишет:

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

Тоже не считаю MP3 суперформатом. Выхолощенный звук. Например, удивил формат
3gp в дэйзи-плеере "Виктор ридер стрим". Показалось, что сжатие больше, чем
у MP3, а качество выше. Хотя это может только для голосовых заметок...
Однако, MP3 напоминает автомат Калашникова - по дальности, кучности и т.д.
уступает другим, но по комплексу показателей он - лидер, как-то гармоничней,
что-ли. Так и MP3 - простота, надёжность, ресурсозатраты при приемлемом
звучании и сжатии.

Иван Штефуряк пишет:

Совершенно с Вами согласен. Тотал просто режет и собирает файлы как байтовые
цепочки. Я имел ввиду, что на практике режут файлы не для того, чтобы потом
их собирать. Например, имели 5 больших MP3-файла, порезали, получили 80,
загнали в плеер, кто-то увидел, скопировал эти 80 файлов, оформил теги и
поставил на торрент-раздачу - и пошли гулять по свету бракованные
MP3-файлы...

Indigo пишет:

Конечно, это так. Я сам - большой сторонник Total Commander. Режу,
собираю, использую не целевым образом и др. возможности. Лишь хотел сказать,
что желательно не выпускать "в люди" неправильные MP3. Единственный случай,
когда более или менее допустимо собирать Тоталом для публичного пользования
(и то с оговорками) - это если склеиваемые файлы - все с одинаковыми
аудиохарактеристиками и без тегов! Отмечу одну возможность, если нет желания
возиться с аудиоредакторами, а MP3-файл собирается для общественного
использования. В той папке, где Вы обычно собираете MP3-файлы можно положить
lame.exe и через командную строку Тотала перекодировать 1.MP3. lame выметет
весь мусор и всё откорректирует. Если хочется ещё легче, то рядом с lame.exe
можно положить скриптик, автоматизирующий эти дела - энтер, ввести битрейт,
энтер и можно идти пить чай...

Старые lame не подойдут - приходилось MP3 в wav, затем в MP3. А версия
lame 3.98 сразу, в одну команду. lame - медленный, но даёт качественный
продукт.

С н.п. Родион.

Ответить   Tue, 11 Oct 2011 19:34:22 +1000 (#1964805)