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 байт
Поле | Длина, байт | Описание |
---|---|---|
Заголовок | 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
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, но на практике пользователи часто используют национальную кодировку, поэтому нередко им приходилось видеть кракозябры.
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).
Поле | Смещение, байт | Длина, байт | Описание |
---|---|---|---|
Сигнатура | 0 | 3 | «ID3» |
Версия | 3 | 2 | 2, 3 или 4 |
Флаги | 5 | 1 | |
Размер | 6 | 4 (7-битных) | |
Заголовок фрейма занимает 10 байт и содержит поля, перечисленные в следующей таблице.
Поле | Смещение, байт | Длина, байт | Описание |
---|---|---|---|
Идентификатор | 0 | 3[4], 4[5] | Тип фрейма, заглавные латинские буквы и цифры |
Размер | 3 | 4 | |
Флаги | 5 | 2 | |
Версии ID3v2
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 может нарушить структуру контейнера.
См. также
- APEv2
- Getid3
- Редактор тегов
- Vorbis comment
Примечания
- Номер трека записывается в последние два байта комментария. Если размер комментария больше 28 символов, номер трека недоступен
- Для ID3v2.2, ID3v2.3, ID3v2.4
- Для ID3v2.4
- Для ID3v2.2
- Для ID3v2.3 и ID3v2.4
- Newell, C. "ID3v2 Chapter Frame Addendum" (недоступная ссылка). ID3.org (2 December 2005). Дата обращения: 6 февраля 2008. Архивировано 15 марта 2012 года.
- "Windows Media Developer Center: ID3 Tag Support" (недоступная ссылка). Microsoft Developer Network. Microsoft. Дата обращения: 6 февраля 2008. Архивировано 15 марта 2012 года.
- The 'MP4' Registration Authority (недоступная ссылка). Дата обращения: 5 июля 2008. Архивировано 26 августа 2012 года.
Ссылки
- Официальный сайт ID3, включающий полную спецификацию(англ.)
- Список жанров для ID3v1(англ.)
- Спецификация ID3v1(англ.)
- Спецификация, графическое представление и разница ID3v1 и ID3v1.1 на id3.org(англ.) Архивная копия от 11 мая 2009 на Wayback Machine
- Спецификация Lyrics3 на id3.org(англ.) Архивная копия от 23 апреля 2009 на Wayback Machine
- Спецификация ID3v2.x на id3.org(англ.) Архивная копия от 11 сентября 2009 на Wayback Machine
- ID3 TAG и Enhanced TAG спецификации(англ.)
- mp3: ППЗ — Статья «mp3: Простейшие практические занятия»