Про кодировку тегов в 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 для записи тегов, поэтому на этот раз нам понадобится eyeD3 (в Ubuntu это пакет 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 плеере. Когда просто прослушиваешь файлы на компьютере не верная кодировка не слишком мешает, а на телефоне неудобно, сложно нужный трек найти.
- Об авторе
- Последние статьи
Подробнее
- Олимпиада Яндекс.Root для системных администраторов - 3 апреля 2015
- Полезная накрутка друзей Вконтакте - 2 января 2015
- Обзор игры Rail Nation - 31 декабря 2014