ID3 (метаданные)
ID3 (от англ. Identify an MP3) — формат метаданных, наиболее часто используемый в звуковых файлах в формате MP3. В ID3 содержатся данные о названии трека, альбома, имени исполнителя и т. д., которые используются медиаплеерами и другими программами, а также аппаратными проигрывателями для отображения информации о файле и автоматического упорядочивания аудиоколлекции. Использование формата неразрешено в коммерческих целях, для стран Европы. Существует две несовместимых версии ID3: ID3v1 и ID3v2. ID3v1После создания формата MP3 появилась проблема с хранением информации о музыкальном файле – в MP3 это никак не предусматривалось. В 1996 году Эрику Кэмпу пришла идея добавить участок памяти в файл, чтобы решить эту проблему. Первая версия ID3-тегов занимала всего 128 байт, начинающихся со строки TAG. Тег помещался в конец файла для поддержания совместимости с ранними проигрывателями. Некоторые из них издавали небольшой шум, когда пытались прочесть тег, но большинство игнорировали его. Современные проигрыватели воспринимают эту информацию корректно. Поскольку для данных отводилось немного места, в таких тегах можно было хранить только основные сведения о песне: название, альбом, исполнитель, комментарий — по 30 байт на каждое поле, 4 байта для хранения года и один байт под жанр, который можно было выбрать из заранее определённого списка с 80 значениями (позднее Winamp расширил список своими 68 значениями). Если названия песен или альбомов содержали более 30 символов, они обрезались. Конечно, из-за ограничений по размеру ни о каких расширенных возможностях хранения метаданных не могло быть и речи. Единственное усовершенствование, реализованное в версии 1.1, было предложено Майклом Мутшлером (Michael Mutschler) в 1997 году: так как поле под комментарий всё равно слишком мало для хранения чего-либо полезного, было решено сократить его на два байта, чтобы использовать их для хранения номера трека. Расширенный форматРасширенный тег — это дополнительный блок данных перед тегом ID3v1, который позволяет в три раза расширить некоторые поля ID3(v1-v1.1) и добавить несколько новых полей. Разработчики этого расширения попытались следовать идее наибольшей совместимости, поэтому начало всех тегов хранится в обычном теге ID3v1, что позволяет читать или записывать данные любой программе, понимающей ID3v1, и только если выделенных байтов не хватает, продолжение для каждого поля будет храниться в расширенном блоке (при условии, что программа умеет туда записывать). Расширенный блок занимает 227 байт, находится перед тегом ID3v1 и начинается с метки TAG+. В нём было выделено дополнительно по 60 байт для полей "название песни", "исполнитель" и "альбом", один байт под скорость (стиль, тип) музыки (00=unknown, 01=slow, 02=medium, 03=fast, 04=hardcore), 30 байт под свободный ввод жанра, а также по шесть байт под начальное и конечное время музыки в файле (например, для плавного увеличения громкости). Поле комментария расширено не было и осталось равным 28–30 байтам. Если ничего из перечисленного не используется, он автоматически опускается. Это был неофициальный стандарт, и он поддерживался малым количеством проигрывателей. Структура ID3Строки разделяются нулями или пробелами. Неиспользуемые поля заполняются как пустые строки. ID3(v1-v1.1): 128 байт
Расширенный тегПомещается перед ID3v1 тегом: 227 байт
Размеры полей ID3v1 с учётом расширенного тега составят:
Lyrics3Lyrics3 — это первая попытка внедрить текст песни внутрь MP3-файла, реализованная Петром Стрнадом (Petr Strnad) во времена ID3v1.x. Текстовый блок помещался между строками LYRICSBEGIN и LYRICSEND в конце файла, перед тегом ID3v1.x (если его не было, то он создавался). Текст записывался в кодировке ISO-8859-1, максимальная длина 5100 байт, строки разделялись символами CR+LF, была реализована поддержка временны́х меток. Со временем был выпущен формат Lyrics3 v2.00, имевший больше возможностей (в частности, значительно увеличился размер блока, появились дополнительные поля и возможность вставки изображения). Блок версии 2.00 помещался между строками LYRICSBEGIN и LYRICS200 и имел переменную длину, которая записывалась в последних шести байтах перед конечной строкой LYRICS200. Идея не получила широкого распространения ввиду выхода стандарта ID3v2, в котором подобная идея была организована более гибко и функционально. Критика и комментарииID3v1 много критиковали за ряд проблем. Прежде всего это слишком маленькие поля, размера которых недостаточно для хранения большинства информации — 30 байт не хватало для длинных названий, они урезались. Предложение закрепить жанр за ограниченным числом альтернатив также нашло много противников. Многим просто не нравился предложенный список, в котором не отводилось места под такие жанры, как, например, минимализм или барокко. ID3v1 также не хватало интернационализации. Согласно спецификации, все строки должны храниться в ISO 8859-1, но на практике пользователи часто используют национальную кодировку. ID3v2В ответ на критику ID3v1 был разработан новый стандарт — ID3v2. Он опубликован 26 марта 1998 года и полностью отличается от ID3v1. Теги ID3v2 имеют переменную длину и могут располагаться в начале[2] или в конце[3] файла. Тег состоит из нескольких «фреймов». Каждый фрейм содержит какие-либо метаданные. Например, фрейм «TIT2» содержит название произведения, а фрейм «WOAR» — ссылку на сайт исполнителя. Максимальный размер фрейма ограничен 16 МБ, а тег не может превышать 256 МБ. Текст хранится в кодировках UTF-16[2] или UTF-8[3]. Текстовые фреймы помечаются битом кодировки. Стандарт ID3v2 определяет 84 типа фреймов, а также разрешает приложениям создавать свои фреймы. В числе стандартных имеются фреймы для хранения изображения обложки, числа ударов в минуту, информации об авторских правах и лицензии, текста песен, произвольного текста, ссылок и других данных. Файл, содержащий тег в формате ID3v2, начинается с последовательности символов «ID3». Эти символы являются частью заголовка («Header») тега. Заголовок состоит из 10 байт и содержит поля, перечисленные ниже. Порядок байтов в ID3v2 — big endian. Размер — в 7-битных байтах (старший бит устанавливается в 0).
Заголовок фрейма занимает 10 байт и содержит поля, перечисленные в следующей таблице.
Версии ID3v2ID3v2.2 — первая широко используемая версия ID3v2. Ныне считается устаревшей. Используется трёхсимвольный идентификатор фрейма вместо четырёхсимвольного («TT2» для фрейма с названием произведения вместо «TIT2»). Форматы фреймов ID3v2.2, ID3v2.3 и ID3v2.4 немного различаются. ID3v2.3 — третья и наиболее распространённая на сегодняшний день версия. Расширяет размер поля «Идентификатор» до четырёх байт, добавляет поле «Количество фреймов». Фрейм может содержать несколько значений, разделённых знаком «/». ID3v2.4 — четвёртая (текущая) версия. Позволяет хранить строки в кодировке UTF-8. Для разделения значений используется нулевой байт, а символ «/» можно использовать в тексте. Появилась возможность добавить тег в конец файла, как в ID3v1. «Разделы» ID3v2В декабре 2005 года предложены[6] расширения для привязки текста и изображения к времени воспроизведения. Первое позволяет создавать оглавления для быстрого перехода к определённому месту (или главе) внутри аудиофайла. С помощью второго можно организовать показ изображений (слайдшоу). Типичное применение — подкастинг. КритикаИз-за различий в версиях ID3v2 во многих проигрывателях до сих пор не реализована поддержка всех версий тегов. Проблема в том, что в разных версиях используются разные структуры данных. Например, для извлечения данных из фреймов «TIT2» (с названием произведения) и «USLT» (с текстом песни) требуются разные алгоритмы. В тегах других форматов, например в APEv2, данные хранятся в виде пар ключ-значение, и такой проблемы нет. ID3v2 хранит информацию об аудиоданных. Например, во фрейме «TLEN» хранится длина песни, а во фрейме «AENC» — информация о методе сжатия. В версиях ID3v2.2 и ID3v2.3 тег должен располагаться в начале файла, что упрощает потоковое воспроизведение, но требует перезаписи всего файла при изменении полей тега. Версия ID3v2.4 позволяет поместить данные тега в конец файла. Редакторы тегов могут оставлять свободное пространство в полях тега, чтобы предотвратить перезапись файла в случае увеличения тега, но эта операция не является стандартом: требования к тегам очень различаются, особенно если к музыке прилагается «APIC» (ассоциативные изображения). Устаревшие реализацииТак как большинство файлов содержат теги ранних версий ID3v2, разработчики не спешат добавлять в свои продукты поддержку всех форматов тегов и всех типов фреймов, описанных в стандарте ID3v2. Проводник WindowsWindows Explorer[какой?] поддерживает теги версий ID3v1 и ID3v2.3. Проводник не может прочитать тег версии ID3v2.4, а при попытке его редактирования выдаёт ошибку 0x8007000D. Проводник читает и записывает теги ID3v1, но с особенностями. Если в MP3-файле записан только тег ID3v1, Проводник его прочитает, а при редактировании — запишет данные в ID3v1 и добавит тег ID3v2.3. Редактирование тегов ID3v1 не поддерживается. Если в файле записаны теги ID3v1 и ID3v2.3, Проводник прочитает версию ID3v2.3, а при редактировании продублирует данные в оба тега. Если в MP3-файле не было никаких тегов, Проводник запишет только тег ID3v2.3. Редактирование ID3Существует множество программ для редактирования тегов ID3. Среди них:
Возможности:
Применение в других форматах и альтернативыТеги ID3 были созданы для включения в файлы формата MP3 и MP3Pro, но могут использоваться и в файлах других форматов. AIFF — единственный формат, начавший широко использовать тег ID3v2. Этот формат основан на RIFF; тег ID3 хранится внутри «чанка» (куска) с именем «ID3». WAV (тоже основан на RIFF) может включать тег ID3, но данная возможность не используется. «Broadcast WAV» — единственная теговая система, широко использующаяся WAV. Форматы Windows Media (ASF, WMA, WMV) имеют свои форматы тегов, но также поддерживают встраивание ID3 в виде атрибута[7]. Предусмотрена возможность включения ID3 в MP4[8], но большинство программ её не поддерживают. В других форматах, основанных на контейнерах, применяются собственные теговые системы. Например Vorbis использует Vorbis comment и не поддерживает встраивание ID3, так как ID3 может нарушить структуру контейнера. См. такжеПримечания
Ссылки
|