ID3-теги, mp3, Ubuntu Linux и Android

/www/pages/modesco/ubuntovod

Про кодировку тегов в MP3 было сказано действительно очень много, ведь почти каждый линуксоид знаком с проблемой "кракозябр". Казалось бы, что ещё можно сказать? Сегодня я расскажу, как сделать теги читаемыми сразу и в Windows, и в Linux. Это будет весьма полезно для тех. кто любит обмениваться музыкой с друзьями или распространяет её в файлообменных сетях.

Немного теории

Существует две основных версии ID3-тегов - первая и вторая. Основным различием между ними является то, что ID3v1 располагается в конце файла, а ID3v2 - в начале. Кроме этого, в ID3v1 есть ограничение на длину тега, что временами вызывает проблемы.

В спецификации ID3v1 сказано, что должна использоваться только кодировка ISO 8859-1 (она же Latin-1), однако на практике это редко когда соблюдается. Лучший и самый популярный кодировщик Lame не сильно мудрствует и просто пишет всё в кодировке локали, поэтому и возникает столько проблем с "кракозябрами".

В ID3v2 тег может быть помечен как использующий Latin-1, UTF-16 (LE и BE) или UTF-8. К сожалению, UTF-8 поддерживается только начиная с относительно новой версии ID3v2.4, поэтому не все программы могут его прочитать. В число таких проблемных программ входит Explorer, Windows Media Player и старые версии остальных проигрывателей. В списках изменений новых версий Lame что-то сказано про юникод, но на практике всё без разбору помечается как Latin-1, а man-страница по этому поводу молчит.

Почти все программы, которые исправляют теги для нормального отображения под Linux, используют ID3v2.4 + UTF-8. По этой причине мы либо теряем совместимость с устаревшими проигрывателями, либо теряем совместимость с Linux. Но есть и консенсус - использование предыдущей версии ID3v2.3, которая поддерживается гораздо шире, совместно с кодировкой UTF-16 LE.

Шаг первый - из локальной кодировки в UTF-8

О подобном преобразовании пишут довольно часто. Существует несколько методов для этого, расскажу о команде, которая у меня работает всегда:

find . -iname "*.mp3" -type f -exec mid3iconv -e CP1251 --remove-v1 `{}` ;

Для работы необходим пакет Mutagen (python-mutagen). Если файлы были закодированы в Linux, то вместо CP1251 пишем UTF-8 (а если дело бы очень давно, то KOI8-R). Можно добавить ключ -d к mid3iconv, тогда на экран будут выводиться сами теги и вы сможете проконтролировать, всё ли правильно сделано.

Шаг второй - из UTF-8 в UTF-16

И Mutagen, и TagLib используют только ID3v2.4 для записи тегов, поэтому на этот раз нам понадобится eyeD3Ubuntu это пакет eyed3, в ArchLinux - python-eyed3). Выполняем следующую команду:

find . -iname "*.mp3" -type f -exec eyeD3 --force-update --to-v2.3 --set-encoding=utf16-LE --no-tagging-time-frame `{}` ;

Ключ --force-update включает принудительную перезапись тегов, а --no-tagging-time-frame запрещает записывать в файл информацию о дате изменения тегов (зачем она нужна?).

EasyTag

Многим больше нравится EasyTag. Лично у меня он никогда не хотел правильно работать, в отличие от консольных утилит. Тем не менее. если уж так вы его любите, то его настройки должны выглядеть примерно так:

P.S.: С обложками так же всё просто:

eyeD3 --add-image file.jpg:FRONT_COVER music.mp3

Источник: welinux.ru.

Вы спросите почему в заголовке Android? Просто на себе испытал проблему с кодировкой на встроенном в Android плеере. Когда просто прослушиваешь файлы на компьютере не верная кодировка не слишком мешает, а на телефоне неудобно, сложно нужный трек найти.

Dummy
2011-05-15 07:32:00
 спасибо !