|
Bog BOS: dw: Метаинформация (теги) в звуковых и видеофайлах |
Последнее изменение файла: 2008.05.25
Скопировано с www.bog.pp.ru: 2024.11.21
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):
Версия 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 отдельного файла). Добавлены кадры:
Версия 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):
Наличие множества мелких, но неприятных и бессмысленных несоответсвий между версиями, совершенно дикий формат и непонимание автором стандарта понятий Unicode привело к тому, что во многих программах до сих пор нет поддержки ID3v2.4, выпущенной в 2000 году, а вместо этого разработчики запихивают UTF-8 в ID3v2.3 и даже в ID3v1. В сочетании с коллекциями с тегами ID3v1 в cp1251 (и даже тегами ID3v2.3 в cp1251 и указанием языка "eng"!) и новыми программами, в которых преднамеренно выключена обработка неверных кодировок, вызывает ужасное раздражение.
Для редактирования тегов можно использовать специальные программы или такие аудиопроигрыватели как Amarok (ID3v2.4), Quod Libet (ID3v2.4).
Метаинформация хранится в Xiph Comments (аналогично во flac и speex).
Версия 0.30: RG_RADIO, RG_PEAK, RG_AUDIOPHILE
Новая версия: REPLAYGAIN_TRACK_GAIN (относительное усиление в dB), REPLAYGAIN_TRACK_PEAK (абсолютное значение, 1.0 - максимум), REPLAYGAIN_ALBUM_GAIN, REPLAYGAIN_ALBUM_PEAK.
Шутка. WAV не содержит метаинформации.
id3lib - библиотека для работы с ID3v1/ID3v1.1 и ID3v2/ID3v2.3 (хотя в текте упоминается 2.4). В состав пакета входят утилиты id3info (выдать информацию о тегах), id3tag (редактировать теги: артист, альбом, название, комментарий, жанр, год, номер дорожки), id3convert. Последняя версия (3.8.3) выпущена 2003-03-02, т.е. проект заброшен. Используется в id3v2, easytag и grip (соответственно они тоже работают только с ID3v2.3).
В FC6 установил пакеты id3lib-3.8.3 и id3lib-devel-3.8.3.
id3v2 (0.1.11) - консольный редактор ID3v2. Позволяет смотреть, добавлять (артист, альбом, название, комментарий, жанр, год, номер дорожки), изменять, удалять теги ID3v2, а также преобразовывать ID3v1 в ID3v2. Не понимает ID3v2.4 и UTF-8 в ID3v1. Не развивается с 2004.
libid3tag - библиотека для работы с ID3v1 и ID3v2 (ID3v2.4 судя по madplay). Последняя версия (0.15.1) выпущена 2004/02/17, т.е. проект заброшен. Однако используется в большом количестве пакетов (mpd, audacity, madplay, imlib2, gstreamer-plugins-ugly).
taglib - библиотека для работы с ID3v1 и ID3v2, Ogg Vorbis comment, ID3 и Vorbis comment во FLAC |
taglib - библиотека для работы с ID3v1 и ID3v2 (включая 2.4 судя по audacious), Ogg Vorbis comment, ID3 и Vorbis comment во flac. Часть проекта KDE. Из документации - текст лицензии и выхлоп doxygen. Используется в amarok, audacious, tellico, libtunepimp.
В FC6 установил пакеты taglib-1.4 и taglib-devel-1.4.
EasyTAG - редактор (GTK2) тегов ID3, FLAC, Ogg Vorbis, MP4/AAC, MusePack, Monkey |
EasyTAG - редактор (GTK2) тегов ID3, FLAC, Ogg Vorbis, MP4/AAC, MusePack, Monkey. Точнее говоря, огромный комбайн по визуализации и редактированию тегов различных типов. Файлы можно обрабатывать как поштучно, так и группами. Делает теги из имени файла и имена файлов из тегов. Умеет обращаться к CDDB для автоматического заполнения тегов. Теги ID3v2.3: название, исполнитель, альбом, часть альбома, год, номер дорожки, жанр, комментарий, композитор, первый исполнитель, авторское право, URL (который из них?), кодировщик, картинки. Автоматическая обработка пробелов, подчёркиваний, прописных и строчных букв. Умеет преобразовывать из одной версии ID3 в другую и обрабатывать нестандартные кодировки. К сожалению, использует id3lib и, соответственно, не понимает ID3v2.4, поэтому не совместима с современными проигрывателями (amarok, quodlibet).
В FC6 установил пакет easytag-1.99.13 (2.0-1, 2.0.1-1).
python-mutagen - модуль python для редактирования тегов ID3v1.1, ID3v2.4, APEv2, FLAC, Ogg Vorbis |
python-mutagen - модуль python для редактирования тегов ID3v1.1, ID3v2.4, APEv2, FLAC, Ogg Vorbis, ASF, M4A, Monkey, Musepack, Ogg Speex, Ogg Theora, True Audio, WavPack и OptimFROG. Используется в exaile и quodlibet. Включает утилиты:
Перекодировка типового альбома конца 90-х (комментарии не перекодируются!):
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1
Для перекодировки виесте с комментариями использовал сначала преобразование из нестандартной кодировки в UTF-16BE с помощью easytag, а затем mid3iconv (без ключа -e) для преобразования ID3v2.3 в ID3v2.4. Параметры easytag (~/.easytag/easytagrc):
write_id3v1_tag=0 write_id3v2_tag=1 convert_old_id3v2_tag_version=1 use_id3_iso_8859_1_character_set=0 use_id3_iso_8859_1_then_unicode_character_set=1 use_id3_unicode_character_set=0 use_non_standard_id3_reading_character_set=1 use_non_standard_id3_writing_character_set=1 id3_file_reading_character_set=windows-1251 id3_file_writing_character_set=UTF-16BE
В FC6 установил пакет python-mutagen-1.10.1 (1.11-1).
Ex Falso - редактор (GTK2, python) тегов из пакета quodlibet |
Ex Falso - редактор (GTK2, python) тегов из пакета quodlibet. Используется python-mutagen, так что позволяет просматривать и редактировать теги MP3 (больше 30 типов кадров), Ogg Vorbis, FLAC, Musepack, WavPack, MOD/XM/IT. Есть возможность переименования файлов, поиска в CDDB. Дополнительные модули: поиск в google и wiki, запись на CD, загрузка обложек, экспорт/импорт.
В FC6 установил пакет quodlibet-0.24.
|
Bog BOS: dw: Метаинформация (теги) в звуковых и видеофайлах |