Linux -- это интересно

Метаинформация (теги) в звуковых и видеофайлах


Рубрика: Изучаем Linux -> Аудио и видео ПО
Метки: | |
Просмотров: 984

ID3 - формат контейнера, позволяющий хранить в файлах формата MP3 (MPEG-1 Layer III) дополнительную информацию, такую как имя артиста, название композиции, название альбома, номер дорожки и др. Версия ID3v1 была разработана в 1996 (Eric Kemp). Метка располагается в конце файла, занимает 128 байт и начинается со строки "TAG". Поля: title (30 байт), artist (30 байт), album (30 байт), year (4 байта), comment (30 байт), genre (1 байт, список жанров предопределён). Кодировка - ISO-8859-1/ISO-Latin 1 (в России обычно используется cp1251), символ-заполнитель - 0x0.

Версия ID3v1.1 была разработана в 1997 (Michael Mutschler): в последнем байте поля comment записывается номер дорожки. Версия ID3v2.2 была разработана в 1998 (M. Nilsson). Не имеет ничего общего с ID3v1. Теги располагаются в начале файла. Каждый тег занимает отдельный кадр (frame) размером до 16МБ.

Для "безнаказанной" вставки незвуковых данных в MP3 файл используется тот факт, что любой MP3 декодер начинает декодирование после получения сигнала синхронизации (0b11111111 111xxxxx), так что достаточно поместить тег до первого такого сигнала и не допускать его случайного появления внутри тега (0b11111111 111xxxxx заменяется на 0b11111111 00000000 111xxxxx, а 0xff00 на 0xff0000). Порядок бит - MSB, порядок байт - big endian, символ-заполнитель - 0x0.

В начале тега идёт заголовок (10 байт): "ID3", подверсия ID3v2 (0x0200), флаги (1 байт: использование алгоритма десинхронизации, использование сжатия, остальное - резерв), длина тега без заголовка (4 байта, в каждом байте используются только младшие 7 бит), за которым идёт последовательность кадров. Каждый кадр имеет заголовок: 3-х символьное имя, 3-байтная длина кадра без заголовка. Имена, начинающиеся с 'X', 'Y' или 'Z', считаются экспериментальными (читай: можно придумывать свои кадры). По умолчанию, используется кодировка ISO-8859-1 (терминатор строки - 0x00). Некоторые (не все, а только имена которых начинаются с 'T'?) типы кадров могут использовать UCS-2 (Unicode), терминатор строки - 0x0000, про необходимые для определения порядка байт символы BOM разработчики забыли, такие кадры имеют однобайтовый флаг в начале кадра (0 - ISO-8859-1, 1 - UCS-2). Текстовые кадры могут иметь 3-х символьное поле, описывающее язык (ISO-639-2). Используемые в кадрах URL могут быть относительными.

Основные кадры (всего их более 80, в скобках даны имена для ID3v2.3 и ID3v2.4):

  • TT1 (TIT1) - Content group description
  • TT2 (TIT2) - название произведения
  • TT3 (TIT3) - уточнение названия
  • TP1 (TPE1) - основной исполнитель (можно указать несколько, разделяя их символом '/')
  • TP2 (TPE2) - уточнение исполнителя (название группы и т.д.)
  • TP3 (TPE3) - дирижёр
  • TP4 (TPE4) - обработчик, модификатор
  • TCM (TCOM) - композитор (можно указать несколько, разделяя их символом '/')
  • TXT (TEXT) - автор текст произведения (можно указать несколько, разделяя их символом '/')
  • TLA (TLAN) - язык (языки)
  • TCO (TCON) - жанр (ссылки на жанры из списка ID3v1 в виде '(номер)' или свой текст)
  • TAL (TALB) - название альбома. фильма, шоу и т.д.
  • TPA (TPOS) - номер части альбома (если используется несколько носителей) или "номер/из"
  • TRK (TRCK) - номер произведения в альбоме или "номер/из"
  • TRC (TSRC) - номер ISRC (International Standard Recording Code)
  • TYE (TYER) - год (4 символа)
  • TDA (TDAT) - дата записи в формате 'DDMM'
  • TIM (TIME) - время записи в формате 'HHMM'
  • TMT (TMED) - тип носителя, произвольный текст или код в скобках:
  • DIG[/A] (прочие цифровые источники [аналоговая передача])
  • ANA (прочие аналоговые источники)
  • CD[/A|/DD|/AD/AA]
  • LD[/A]
  • TT[/33|/45|/78] (грампластинка)
  • MD
  • DAT
  • DVD
  • TV/SECAM
  • VID/PAL/SVHS
  • RAD/FM
  • TEL (телефон)
  • MC (кассетный магнитофон)
  • REE (катушечный магнитофон)
  • TFT (TFLT) - тип аудиокодека: MPG/1, MPG/2, MPG/3, MPG/2.5, MPG/AAC, PCM, VQF, MIME
  • TBM (TBPM) - BPM (beats per minute)
  • TCR (TCOP) - запись об авторском праве ("1999 Иванов")
  • TPB (TPUB) - издатель
  • TEN (TENC) - кодировщик файла
  • TSS (TSSE) - название программы или оборудования, используемой при кодировании, и параметры
  • TOF (TOFN) - оригинальное имя файла
  • TLE (TLEN) - длина произведения в милисекундах
  • TDY (TDLY) - пауза между произведениями в милисекундах
  • TKE (TKEY) - тональность произведения
  • TXX (TXXX) - строка пользователя
  • IPL (IPLS) - прочие участники
  • MCI (MCDI) - содержимое CD-ROM TOC для поиска в cddb и т.п.
  • ETC (ETCO) - таблица событий и их времена для синхронизации со слайд-шоу и т.п.
  • MLL (MLLT) - индекс для быстрого позиционирования в файле
  • ULT (USLT) - текст песни (содержит поля кодировки, языка и типа текста; разрешаются переводы строк, может быть только один текст для каждого языка и типа)
  • SLT (SYLT) - синхронизированный текст песни (для караоке)
  • COM (COMM) - комментарий (содержит поля кодировки и языка)
  • RVA (RVAD) - позволяет задать желаемое изменение громкости левого и правого канала, а также имеющиеся в файле пиковые значения
  • EQU (EQUA) - кривая эквалайзера
  • REV (RVRB) - задание уровня эха и прочие спецэффекты (интересно, существует ли хоть один проигрыватель, учитывающий этот кадр?)
  • PIC (APIC) - встроенная картинка (задаётся кодировка текста, описание картинки, тип картинки (иконка, передняя обложка, задняя обложка и т.д.), формат картинки ('PNG', 'JPG', '-->' для указания URL отдельного файла), последовательность байт)
  • GEO (GEOB) - произвольный встроенный объект (задаётся кодировка текста, описание, MIME-тип, имя файла, последовательность байт)
  • CNT (PCNT) - сколько раз игрался этот файл
  • POP (POPM) - рейтинг популярности (содержит email, рейтинг и счётчик)

Версия ID3v2.3 была разработана в 1999 (M. Nilsson). Подверсия ID3v2 изменилась на 0x0300. Вместо флага сжатия появились флаги дополнительного заголовка (содержит CRC-32) и экспериментального статуса. Имена кадров стали 4-х символьными, длина кадра также задаётся теперь 4-мя байтами. В кодировке UCS-2 вспомнили про символ BOM для определения порядка байт (а про разницу UCS-2 и UTF-16 пока нет). Заголовок кадра получил свои флаги (2 байта): что должна делать программа редактирования тега с незнакомым типом кадра (удалять или копировать), что должна делать программа редактирования файла с незнакомым типа кадра, только чтение, кадр сжат zlib, кадр зашифрован, кадр принадлежит группе. Кадр RVAD теперь имеет поля, позволяющие управлять громкостью дополнительных каналов. В кадре APIC формат картинки задаётся с помощью MIME типа и подтипа ("image/png" или "-->" для указания URL отдельного файла).

Добавлены кадры:

  • USER - определяет права на использование файла
  • OWNE - определяет продавца, цену и дату покупки
  • PRIV - для частного использования
  • "экспериментальный" тег XRVA (relative volume adjustment, в dB) добавляется утилитой normalize

Версия ID3v2.4 была разработана в 2000 (M. Nilsson). Подверсия ID3v2 изменилась на 0x0400. Формат дополнительного заголовка изменился: полностью переработана структура, добавлен флаг наложения кадров (позволяет иметь несколько тегов в файле или потоке), возможность наложить ограничение на количество кадров и размер тега, кодировку и длину строк, формат и разрешение картинок. Появился флаг наличия заключения тега и само опциональное заключение (10 байт) для упрощения нахождения тега с конца файла. Наконец, разобрались с кодировками, теперь строки могут быть в кодировках: ISO-8859-1, UTF-16 с BOM, UTF-16BE без BOM и UTF-8. Код языка - 3 символа в соответствии с ISO-639-2 строчными буквами, неизвестный язык - XXX. В заголовок кадра добавлены флаги десинхронизации и Data Length Indicator. Текстовые кадры могут содержать несколько значений, разделяемых терминатором строки (0x0 для ISO-8859-1, 0x0000 для UTF-16, 0x00 для UTF-8) вместо '/' в версии ID3v2.3. Вместо кода в скобках (TCON, TMED) теперь необходимо использовать строки, разделённые терминаторами.

Добавлены кадры (удалены TYER, TDAT, TIME, IPLS, RVAD, EQUA):

  • TSST - подзаголовок набора записей
  • TMCL - таблица соответствия между названиями инструментов (нечётные поля) и именами музыкантов (чётные поля через запятую)
  • TIPL - таблица соответствия между функциями (нечётные поля) и именами исполнителей (чётные поля через запятую), заменяет кадр IPLS
  • TMOD - настроение (Romantic и т.д.)
  • TPRO - аналогично TCOP, но для отметки изготовителя (P)
  • TOWN - имя покупателя лицензии
  • TDEN - отметка времени кодирования (ГГГГ-ММ-ДДTЧЧ:ММ:СС или сокращённое)
  • TDOR - отметка времени изготовления оригинала
  • TDRC - отметка времени записи (заменяет TYER, TDAT и TIME)
  • TDRL - отметка времени выпуска записи
  • TDTG - отметка времени записи тега
  • TSOA - строка, используемая для сортировки по альбомам вместо TALB
  • TSOP - строка, используемая для сортировки по исполнителям вместо TPE2
  • TSOT - строка, используемая для сортировки по названиям вместо TIT2
  • RVA2 - позволяет задать желаемое изменение громкости для каждого канала (формат изменился совершенно по сравнению с RVAD)
  • EQU2 - кривая эквалайзера (формат изменился совершенно по сравнению с EQUA)
  • ASPI - ещё один индекс для позиционирования внутри файла

Наличие множества мелких, но неприятных и бессмысленных несоответсвий между версиями, совершенно дикий формат и непонимание автором стандарта понятий Unicode привело к тому, что во многих программах до сих пор нет поддержки ID3v2.4, выпущенной в 2000 году, а вместо этого разработчики запихивают UTF-8 в ID3v2.3 и даже в ID3v1. В сочетании с коллекциями с тегами ID3v1 в cp1251 (и даже тегами ID3v2.3 в cp1251 и указанием языка "eng"!) и новыми приложениями, в которых преднамеренно выключена обработка неверных кодировок, вызывает ужасное раздражение. Для редактирования тегов можно использовать специальные приложения или такие аудиопроигрыватели.

Официальный сайт ID3

RusXMMS борьба с различными русскими кодировками в ID3

Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)