ID3 (метаданные)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

ID3 (от англ. Identify an MP3) — формат метаданных, наиболее часто используемый в звуковых файлах в формате MP3. В ID3 содержатся данные о названии трека, альбома, имени исполнителя и т. д., которые используются медиаплеерами и другими программами, а также аппаратными проигрывателями для отображения информации о файле и автоматического упорядочивания аудиоколлекции. Использование формата неразрешено в коммерческих целях, для стран Европы.

Существует две несовместимых версии ID3: ID3v1 и ID3v2.

После создания формата 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 байт

Поле Длина, байт Описание
Заголовок 3 «TAG»
Название 30 30-символьное название
Исполнитель 30 30-символьное имя исполнителя
Альбом 30 30-символьное название альбома
Год 4 Строковая запись года
Комментарий 28[1] или 30 Комментарий
Нулевой байт[1] 1 Если номер трека присутствует, этот байт равен 0
Track[1] 1 Номер трека в альбоме или 0; учитывается, только если предыдущее поле равно 0
Жанр 1 Индекс в списке жанров или 255

Расширенный тег

[править | править код]

Помещается перед ID3v1 тегом: 227 байт

Поле Длина, байт Описание
Заголовок 4 «TAG+»
Название 60 Дополнительные 60 байт для поля «Название» ID3v1
Исполнитель 60 Дополнительные 60 байт для поля «Исполнитель» ID3v1
Альбом 60 Дополнительные 60 байт для поля «Альбом» ID3v1
Скорость (стиль, тип) музыки 1 Чем больше число, тем «активней» музыка
Жанр 30 30-символьная строка
Время начала 6 Время в формате mmm: ss
Время конца 6 Время в формате mmm: ss

Размеры полей ID3v1 с учётом расширенного тега составят:

Поле Размер, байт
Название 90
Исполнитель 90
Альбом 90

Lyrics3 — это первая попытка внедрить текст песни внутрь 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, но на практике пользователи часто используют национальную кодировку.

В ответ на критику 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).

Поле Смещение, байт Длина, байт Описание
Сигнатура 0 3 «ID3»
Версия 3 2 2, 3 или 4
Флаги 5 1
Размер 6 4 (7-битных)

Заголовок фрейма занимает 10 байт и содержит поля, перечисленные в следующей таблице.

Поле Смещение, байт Длина, байт Описание
Идентификатор 0 3[4], 4[5] Тип фрейма, заглавные латинские буквы и цифры
Размер 3 4
Флаги 5 2

ID3v2.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.

Проводник Windows

[править | править код]

Windows Explorer[какой?] поддерживает теги версий ID3v1 и ID3v2.3.

Проводник не может прочитать тег версии ID3v2.4, а при попытке его редактирования выдаёт ошибку 0x8007000D.

Проводник читает и записывает теги ID3v1, но с особенностями. Если в MP3-файле записан только тег ID3v1, Проводник его прочитает, а при редактировании — запишет данные в ID3v1 и добавит тег ID3v2.3. Редактирование тегов ID3v1 не поддерживается. Если в файле записаны теги ID3v1 и ID3v2.3, Проводник прочитает версию ID3v2.3, а при редактировании продублирует данные в оба тега. Если в MP3-файле не было никаких тегов, Проводник запишет только тег ID3v2.3.

Редактирование ID3

[править | править код]

Существует множество программ для редактирования тегов ID3. Среди них:

Возможности:

  • правка сразу нескольких файлов («batch tagging»);
  • поиск и замена.

Применение в других форматах и альтернативы

[править | править код]

Теги 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 может нарушить структуру контейнера.

Примечания

[править | править код]
  1. 1 2 3 Номер трека записывается в последние два байта комментария. Если размер комментария больше 28 символов, номер трека недоступен
  2. 1 2 Для ID3v2.2, ID3v2.3, ID3v2.4
  3. 1 2 Для ID3v2.4
  4. Для ID3v2.2
  5. Для ID3v2.3 и ID3v2.4
  6. Newell, C. "ID3v2 Chapter Frame Addendum". ID3.org (2 декабря 2005). Дата обращения: 6 февраля 2008. Архивировано из оригинала 15 марта 2012 года.
  7. "Windows Media Developer Center: ID3 Tag Support". Microsoft Developer Network. Microsoft. Дата обращения: 6 февраля 2008. Архивировано из оригинала 15 марта 2012 года.
  8. The 'MP4' Registration Authority. Дата обращения: 5 июля 2008. Архивировано из оригинала 26 августа 2012 года.