Про кодировку тегов в 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
О подобном преобразовании пишут довольно часто. Существует несколько методов для этого, расскажу о команде, которая у меня работает всегда:
1
|
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). Выполняем следующую команду:
1
|
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.: С обложками так же всё просто:
1
|
eyeD3
--
add
-
image
file
.jpg
:
FRONT_COVER
music
.mp3
|
Источник: welinux.ru.
Вы спросите почему в заголовке Android? Просто на себе испытал проблему с кодировкой на встроенном в Android плеере. Когда просто прослушиваешь файлы на компьютере не верная кодировка не слишком мешает, а на телефоне неудобно, сложно нужный трек найти.