[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ID3v2 теги в lame



Zakhary Akulov wrote:
> Занялся вот перекодированием звуковых файлов в mp3 и столкнулся с
> неприятностью -- lame записывает кириллические теги в непонятной
> кодировке:

В id3v2 допустимо применять либо кодировку latin1, либо одну из уникодных (их и используют для кириллицы). Проблема в том, что и lame и id3v2 работают только с latin1, независимо от локали. Строку в UTF-8 lame интерпретирует как простой набор 8-битных байтов, а id3v2 этот набор достаёт и без преобразования выводит. mid3v2 же честно пытается перевести её из указанной кодировки latin1 в кодировку локали (UTF-8).

Для иллюстрации попробуем теги в cp1251 (кодировка терминала UTF-8):

$ export LANG=ru_RU.cp1251
$ lame --id3v2-only --pad-id3v2 --ta "$(echo "Пример тега"|iconv -f utf8 -t cp1251)" Sample.wav
$ id3v2 -l Sample.wav.mp3|grep TPE1
TPE1 (Lead performer(s)/Soloist(s)): ������ ����
$ id3v2 -l Sample.wav.mp3|grep TPE1|iconv -f cp1251 -t utf8
TPE1 (Lead performer(s)/Soloist(s)): Пример тега
$ mid3v2 -l Sample.wav.mp3|grep TPE1
TPE1=?????? ????
$ export LANG=ru_RU.UTF-8
$ id3v2 -l Sample.wav.mp3|grep TPE1
TPE1 (Lead performer(s)/Soloist(s)): ������ ����
$ id3v2 -l Sample.wav.mp3|grep TPE1|iconv -f cp1251 -t utf8
TPE1 (Lead performer(s)/Soloist(s)): Пример тега
$ mid3v2 -l Sample.wav.mp3|grep TPE1
TPE1=Ïðèìåð òåãà
$ mid3v2 -l Sample.wav.mp3|grep TPE1|iconv -t latin1|iconv -f cp1251
TPE1=Пример тега
$ mid3v2 --list-raw Sample.wav.mp3|grep TPE1
TPE1(encoding=0, text=[u'\xcf\xf0\xe8\xec\xe5\xf0 \xf2\xe5\xe3\xe0'])

> Курение мана ясности не внесло.
> Кто виноват, что делать, и где про это почитать?

Виноваты lame и id3v2. Решение — использовать другие инструменты. Поскольку v2.4 пока не всеми понимается, mid3v2 может оказаться преждевременным решением. Лучше всего eyeD3, он позволяет выбирать между v2.3 и v2.4 и явно указывать кодировку (опытным путём установлено, что EasyTAG совместим с v2.3 и utf16-LE).



Reply to: