LINUX.ORG.RU

Бардак с кодировками в id3v1/2 и пути выхода из него


0

0

Вчера вышла статья Михаила Якшина, который в свободное время решил разобраться с бардаком, который возник с id3 тегами в mp3 файлах и что у него из этого получилось. Как и я вчера в треде http://www.linux.org.ru/jump-message.... он пришел к выводу, что нужно либо переходить на Ogg, где все железно просто, либо исправлять и доводить до ума существующие id3tag библиотеки, либо использовать id3v2.4 тэги, где кодировка задается явно http://www.id3.org/id3v2.4.0-structur...:

$00 ISO-8859-1 [ISO-8859-1]. Terminated with $00.
$01 UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All
strings in the same frame SHALL have the same byteorder.
Terminated with $00 00.
$02 UTF-16BE [UTF-16] encoded Unicode [UNICODE] without BOM.
Terminated with $00 00.
$03 UTF-8 [UTF-8] encoded Unicode [UNICODE]. Terminated with $00.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Я уже послал feature request на изменение amarok и easyTag и поддержку в них id3v2.4. Для этого можно использовать taglib 1.4, в которой 2.4 вроде как уже появилась.

GladAlex ★★★★★
() автор топика

>Первые кандидаты на выкидывание – mp3info, id3v2, xmms, kid3, id3editor. Вторые в ряду – beep, easytag, moc, lamip, orpheus

Да уж, я так и вижу, как мэйнтэйнеры Сизифа побежали удалять вышеназванные пакеты из репозитария:) XMMS и Beep, между прочим, одни из самых популярных аудиоплейеров. А аналога easytag по удобству использования ещё не написали. И те пользователи, которые не держат у себя на компе MP3-файлов с кириллическими тегами, должны страдать.

V_L_A_D ★★
()

Хочу добавить, что некоторые проги, вроде Beep-Media-Player усиленно не понимают правильно записанных id3v2.3 тэгов в UTF16-LE, шытаясь их конвертнуть в ascii.

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

svyatogor ★★★★★
()

Сталкивался я с этим, даже как-то, чудом, разобрался локально со всем что было... Но впечатление о кривости mp3 осталось...

catap ★★★★★
()
Ответ на: комментарий от svyatogor

Это wiki, там еще и форум есть. А смысл что-то писать, когда уже 2.4 есть. А для более ранних версий амарок и xmms отлично все перекодируют.

>Хочу добавить, что некоторые проги, вроде Beep-Media-Player усиленно не понимают правильно записанных id3v2.3 тэгов в UTF16-LE, шытаясь их конвертнуть в ascii.

А как он их может понять: если в id3v2.3 не понятно в какой кодировке записан тег: ISO-8859-1 или UTF16-LE?

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от V_L_A_D

> Да уж, я так и вижу, как мэйнтэйнеры Сизифа побежали удалять вышеназванные пакеты из репозитария:) XMMS и Beep, между прочим, одни из самых популярных аудиоплейеров.

Чудики сказочные ваши альтовцы. Надо фиксить, а не удалять.

Novel ★★★★
()
Ответ на: комментарий от V_L_A_D

> А аналога easytag по удобству использования ещё не написали.

Навскидку: Cantus, Ex Falso.

Нормальные плееры тоже все давно уже там.

int19h ★★★★
()

В bmp убрал перекодировку из cp1251 - ни один тег из test suite нормально не показал..

init ★★★★★
()

Хочу огорчить, вставлял когда-то utf8 в mp3...

Есть такая прога, WinAmp называется, наверное некоторые про нее уже слышали... Так вот она не поддерживает юникод. По крайней мере, у меня ничего не вышло. Что-то могло измениться, не знаю. А на нее в основном рассчитывают компании, производящие mp3 диски. Так что, хотелось бы, но мне в это что-то как-то не верится.

devinull ★★
()

патамушта кадирофка далжна быть адна UTF-8. и головы болеть _не_будут_!!!

--седайко стюмчик

anonymous
()
Ответ на: комментарий от grob

>Используйте mpd, id3v2.4 и eyeD3. Ничего удобнее пока я еще не видел.

Ага ничего удобнее командной строки ;-) Иногда конечно удобнее, но не всегда. Кроме того непонятно какую кодировку из 4-х возможных в v2.4 использует eyeD3, а клиенты к mpd пока страшные очень.

GladAlex ★★★★★
() автор топика

Приемущество опсорс. И десяти лет не прошло...

anonymous
()

Да что-то нет уже веры в mp3. id3v1 были только iso8859-1 (о других странах забыли?), id3v2 -- еще и UTF-16 (о средствах различения и о том, что бывают BE/LE машины, тоже забыли), теперь вот ввели UTF-8. Кто им сразу мешал, а?

Zulu ★★☆☆
()
Ответ на: комментарий от Novel

>Чудики сказочные ваши альтовцы. Надо фиксить, а не удалять.

Наши? /dev/me уже давно забил на альт и перешёл на Сьюзи:)

V_L_A_D ★★
()

>$01 UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All strings in the same frame SHALL have the same byteorder.

SHOULD или WILL, но никак не SHALL...

Вопрос: а почему UTF-16 должна вообще различать порядок байтов - Little Endian или Big Endian? Почему этого не надо делать UTF-8?

PashaKustov ★★
()
Ответ на: комментарий от PashaKustov

> а почему UTF-16 должна вообще различать порядок байтов - Little Endian или Big Endian?

Потому что "полный" формат удобнее для внутреннего представления данных, в программах. Но процессоры бывают как LE, так и BE. :)

UTF-8 предназначен для побайтового считования, по этому там порядок не используется, т.к. ни одного процессора с инверсионным порядком бит нету. Во всяком случае - мне не известно. :)

atrus ★★★★★
()
Ответ на: комментарий от PashaKustov

потому что UTF-8 это один или два или три или четыре байта на символ. А UTF-16 это одно или два двухбайтовых слова на символ. Так что в UTF-8 порядок байт в слове не имеет значения (понятие "слово" вообще не употребляется), а в UTF-16 имеет.

Zulu ★★☆☆
()

ой. тоже мне проблемы. уже года полтора пользую amaroK + eyeD3. написал простенький скрипт который натравливается на упорядоченные (в виде `Artist/NN - Album (YEAR)/NN - Track.mp3`) альбомы и сам расставляет таги (есессно v2.3 в уникоде). добавление нового принесённого альбома в коллекцию отнимает минуты две (включая проверку данных на metal-archives.com или, в крайнем случае, гуглингом).

порядок - он в головах должен быть.

PS. на юзверей убогих недоплэйеров которые потом данные таги не могут прочитать я ложил есессно - это их личные сексуальные проблемы.

IceD
()
Ответ на: комментарий от GladAlex

>Кроме того непонятно какую кодировку из 4-х возможных в v2.4 использует eyeD3

eyeD3 --help

IceD
()
Ответ на: комментарий от Zulu

>потому что UTF-8 это один или два или три или четыре байта на символ.

хмм, разве до 4-х? если не изм. память 1-2-3 байта...

бардак с кодировками в софт-плейерах излечим, Михаил толково расписал

а вот с УЖЕ выпущенными хард-плейерами и наштампованными болванками :/...

volonter
()

По моему, правильное решение следущее:

Делать новый тип плейлистов, в которых можно было бы указывать кодировку. В этой папке у меня cp1251, в этой - koi8-r, в этой - utf-8. Это не решит проблемы с уже существующими дисками, но с файлами на харде проблем не останется.

devinull ★★
()
Ответ на: комментарий от devinull

>По моему, правильное решение следущее: >Делать новый тип плейлистов, в которых можно было бы указывать кодировку. В этой папке у меня cp1251, в этой - koi8-r, в этой - utf-8. Это не решит проблемы с уже существующими дисками, но с файлами на харде проблем не останется.

правильное решение - перекодировать. если ты удосужился почитать статью то мог бы заметить что по стандарту ни koi8-r ни тем более cp1251 в тагах быть не может.

IceD
()
Ответ на: комментарий от IceD

А если музыка лежит /mnt/win-d например? И я хочу ее слушать и WinAmp'ом и Juk'om ? На WinAmp то как можно повлиять?

Я даже удосужился в свое время почитать этот самый стандарт. Знаю, что не может быть в тегах koi8-r и cp1251. Но есть же! Кто этому стандарту сейчас соответствует полностью? Да никто.

По моему решению ( кстати о птичках ) можно было бы создать плейлист который содержал бы в себе _папку_ (не файлы!) /mnt/cdrom, и указывал бы кодировку cp1251. И проблемы с mp3 дисками пропадут.

Да и проще это все. Я лично совсем не горю желанием переконвертировать всю свою коллекцию в другой формат. У меня практически всё лежит на mp3 дисках, а на хард я копирую то, что хочу послушать. То nirvana лежит с классикой, то Чайф и Scorpions. А хранить на харде всю коллекцию, мне жадность и объем свободного места не позволяют. Что в таком случае мне делать? Каждый раз конфертировать таги/файлы? Что то не хочется.

devinull ★★
()
Ответ на: комментарий от devinull

> По моему решению ( кстати о птичках ) можно было бы создать плейлист который содержал бы в себе _папку_ (не файлы!) /mnt/cdrom, и указывал бы кодировку cp1251. И проблемы с mp3 дисками пропадут.

> Что в таком случае мне делать? Каждый раз конфертировать таги/файлы? Что то не хочется.

То есть только потому что не хочется исправлять ошибки, нужно придумывать костыли, которые будут способствовать дальнейшим нарушениям формата (все будут продолжать писать cp1251 в тэги, раз работает и так) ?

init ★★★★★
()
Ответ на: комментарий от devinull

> Предлагаешь выбросить все имеющиеся диски?

Нет, я просто сказал, что такой вариант способствует нарушениям стандарта. А что делать с этими дисками, я не знаю.

init ★★★★★
()
Ответ на: комментарий от devinull

> Да и проще это все. Я лично совсем не горю желанием переконвертировать всю свою коллекцию в другой формат. У меня практически всё лежит на mp3 дисках, а на хард я копирую то, что хочу послушать. То nirvana лежит с классикой, то Чайф и Scorpions. А хранить на харде всю коллекцию, мне жадность и объем свободного места не позволяют. Что в таком случае мне делать? Каждый раз конфертировать таги/файлы? Что то не хочется.

Слей всё на винт, сейчас они довольно дешево стОят.

Novel ★★★★
()
Ответ на: комментарий от devinull

>А если музыка лежит /mnt/win-d например? И я хочу ее слушать и WinAmp'ом и Juk'om ? На WinAmp то как можно повлиять?

про то как меня волнует проблемы пользователей недоплэйеров (винамп) я уже написал.

>Я даже удосужился в свое время почитать этот самый стандарт. Знаю, что не может быть в тегах koi8-r и cp1251. Но есть же! Кто этому стандарту сейчас соответствует полностью? Да никто.

у меня так. я наверное дурак.

>Да и проще это все. Я лично совсем не горю желанием переконвертировать всю свою коллекцию в другой формат. У меня практически всё лежит на mp3 дисках, а на хард я копирую то, что хочу послушать. То nirvana лежит с классикой, то Чайф и Scorpions. А хранить на харде всю коллекцию, мне жадность и объем свободного места не позволяют. Что в таком случае мне делать? Каждый раз конфертировать таги/файлы? Что то не хочется

у меня тоже часть коллекции не на винчестере. но и там она по стандарту вся (возможно потому что на 99% не содержит русских груп)

IceD
()

люди, а что нет никаких либ которые автоматический язык и кодировку могут вычислить?

anonymous
()
Ответ на: комментарий от anonymous

>люди, а что нет никаких либ которые автоматический язык и кодировку могут вычислить?

есть, но они разные для разных языков.

adarovsky ★★★★
()
Ответ на: комментарий от anonymous

Far autodetect codepage ;)

Частотным анализом к этому делу можно подойти.
Вот только не все однозначно можно определить.
Тот же FAR на коротких текстах ошибается.

odip ★★
()
Ответ на: комментарий от devinull

> Кто этому стандарту сейчас соответствует полностью? Да никто.

Вообще-то, не соответствие - это единичные случаи. Весь _нормальный_ софт и под линух, и под вынь уже давно понимает юникод в тэгах.

int19h ★★★★
()
Ответ на: комментарий от odip

> Far autodetect codepage

фффтопку это глюкавое поделие фар.

ЗЫ: есть чудесная либа enca

anonymous
()
Ответ на: комментарий от devinull

>Что в таком случае мне делать? Каждый раз конфертировать таги/файлы? Что то не хочется.

Написать скрипт, который копирует и сразу конвертит выбранные файлы и пользовать его вместо cp.

MYMUR ★★★★
()
Ответ на: комментарий от GladAlex

2GladAlex:

Уф. Товарищ, вы бы так сильно не врали то, что я написал и не дезынформировали общественность %))) А еще лучше - не писать абсолютно бессмысленных feature request'ов, не разобравшись в том, в чем там дело и даже не читав, видимо, статью, которая и была призвана хоть немножко осветить ситуацию...

GreyCat ★★
()
Ответ на: комментарий от svyatogor

>Кстати, никто не кинет в меня емайлом автора, хочу ему отписать.

Присоедините к этому самому нику, с которого пишу, @altlinux.org.

GreyCat ★★
()
Ответ на: комментарий от PashaKustov

>> $01 UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All strings in the same frame SHALL have the same byteorder.
> SHOULD или WILL, но никак не SHALL...

Юридический диалект английского учить не пробовали?

anonymous
()
Ответ на: комментарий от anonymous

>Юридический диалект английского учить не пробовали?

Линк пожалуйста, линк :)

SHALL для I или We. Для остального здесь будет WILL.

Так что - в UTF-16 присутствуют какие-то символы, которые в UTF-8 не уместили?

PashaKustov ★★
()
Ответ на: комментарий от GladAlex

Мне нравился phpMp2, пока я не сделал phpMp3 ;-)

За страничку не пинайте, только-только начал выкладывать всё это счастье :)

AngryElf ★★★★★
()
Ответ на: комментарий от PashaKustov

>> Юридический диалект английского учить не пробовали?

> Линк пожалуйста, линк :)

http://www.canadianlawsite.com/10commandments.htm :)))

> SHALL для I или We. Для остального здесь будет WILL.

Так уже ДАВНО не говорят.

> Так что - в UTF-16 присутствуют какие-то символы, которые в UTF-8 не уместили?

Нет. Раз уж любишь линки, лови: http://www.unicode.org/ Там всё написано.

pitekantrop ★★★
()
Ответ на: комментарий от PashaKustov

Буквы -- они в Unicode. UTF-8, UTF-16/UCS-2, UCS-4 -- это только _представления_ unicode, что описано, кажется, в iso10646.

Zulu ★★☆☆
()
Ответ на: комментарий от devinull

Дурацкая мысль.
1) А в одном каталоге с разными почему нельзя?
2) если все равно переписывать клиентов, то почему не пойти по УЖЕ принятому id3v2.4?

Zulu ★★☆☆
()
Ответ на: комментарий от GreyCat

2GreyCat:

Во-первых я не врал, а немного добавил от себя ;-) 2-е: почему бессмысленных? Я так понимаю до недавнего времени все теги были и v1 и v2 в ISO-8859-1 (но все мы заполняли теги в cp1251) и проблема решается перекодировкой в софте. Зачем спрашивается продолжать усложнять ситуацию и использовать, цитирую: "2.4 в windows-1251, замаскированной под iso8859–1" вместо utf-8, например. Эти русские (то есть мы ;-) с 1991 не могут с кодировками разобраться (читай КАРМУ ОТРАБОТАТЬ ;-), а люди кучу софта должны править? Чего ради?!

Версия v2.4 не поддерживается ни amarok ни easyTag, которыми я пользуюсь ;-) Статью я прочитал от и до, но для меня она носит ценность только как подтверждение моих собственных изысканий и мучений с вышеуказанным софтом.

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от IceD

>правильное решение - перекодировать.

Правильное решение - завернуть свой зоопарк в контейнер OGG/OGM и забыть про проблемы с кодировками, не исполтзовать id-тэги вобще... Ну ещё плейеры научить парсить этот контейнер (но это ИМХО проще, чем патчить их на предмет всевозможных версий id и кодировок)

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.