25.11.2005

mp3, id3-тэги, кодировка и юникод.

Меня тут окончательно затрахали id3-тэги.

Удобнейший EasyTAG не умеет писать id3v2 версии 2.4, которая единственная нормально работает в юникоде.

После долгого задумчивого секса с eyeD3, который умирал, пытаясь прописать пару тэгов в файл "Юлия Савичева - Если в сердце живет любовь.mp3" (да-да, я понимаю - такую попсу править грех), я решил что пора бы применить меру наказания за неисполнение приказа в боевой обстановке...
В общем - R.I.P. eyeD3...

Тем не менее, проблема оставалась нерешённой.
Что ж, если гора не идёт к Мухаммеду, Мухаммед объявляет ей джихад, решил я и начал подготовку к массированному переходу на ogg.

Тут следует сделать небольшое лирическое отступление:
ogg - это не только lossy-формат сжатия звука, но и подобно mp4, контейнер для более других форматов. Так что пережимать из одного lossy-формата (mp3) в другой (ogg), теряя в качестве, я и не собирался. Благо, команда ogmmerge позволяет засунуть mp3 файл в (нет-нет, не туда. Всего лишь в ogm-контейнер). А поскольку создатели ogg держали в уме тот простой факт, что музыку пишут не только в англоязычных странах, то подумали об интернационализации. А интернационализация в наше просвещённое время означает юникод (в этом месте многие российские провайдеры и линуксоиды-ортодоксы плюются и уходят). А юникод - это как раз отсутствие проблем с кодировками.
Конец лирического отступления.

Итак, дамы и господа, представляю вашему вниманию простенький скрипт, который заворачивает mp3 в ogg-контейнер, прописывая при этом потребные тэги. Для корректной работы требуются две программы: id3v2 и ogmmerge. Как их устанавливать? Гугль в помощь...

Итак:


#!/bin/sh
title=""TITLE="`id3v2 -l "$1" | grep TIT2 | cut -c 44-`"
artist=""ARTIST="`id3v2 -l "$1" | grep TPE1 | cut -c 38-`"
album=""ALBUM="`id3v2 -l "$1" | grep TALB | cut -c 32-`"
comment=""COMMENT="`id3v2 -l "$1" | grep COMM | cut -c 18-`"
composer=""COMPOSER="`id3v2 -l "$1" | grep TCOM | cut -c 18-`"
track=""TRACKNUMBER="`id3v2 -l "$1" | grep TRCK | cut -c 38-39`"
file="$1"".ogg"
ogmmerge -c "$title" -c "$artist" -c "$album" -c "$comment" -c "$composer" -c "$track" -o "$file" "$1"
rm "$1"

Здесь следует заметить, что тэги у меня вполне корректно выводились командой id3v2 -l имяфайла.mp3
Если эта команда выводит у Вас всяческие закорючки, попробуйте команду:
id3v2 -l имяфайла.mp3 | iconv -f CP1251

И если это сработало - добавьте в скрипт "iconv -f CP1251". Т.е. скрипт будет выглядеть вот так:

#!/bin/sh
title=""TITLE="`id3v2 -l "$1" | iconv -f CP1251 | grep TIT2 | cut -c 44-`"
artist=""ARTIST="`id3v2 -l "$1" | iconv -f CP1251 | grep TPE1 | cut -c 38-`"
album=""ALBUM="`id3v2 -l "$1" | iconv -f CP1251 | grep TALB | cut -c 32-`"
comment=""COMMENT="`id3v2 -l "$1" | iconv -f CP1251 | grep COMM | cut -c 18-`"
composer=""COMPOSER="`id3v2 -l "$1" | iconv -f CP1251 | grep TCOM | cut -c 18-`"
track=""TRACKNUMBER="`id3v2 -l "$1" | iconv -f CP1251 | grep TRCK | cut -c 38-39`"
file="$1"".ogg"
ogmmerge -c "$title" -c "$artist" -c "$album" -c "$comment" -c "$composer" -c "$track" -o "$file" "$1"
rm "$1"

Если же не сработало - значит тэги у Вас храняться не в windows-кодировке, а значит кто-то (Вы сами?) перегнали их в другую кодировку, из чего следует, что и в данном конкретном случае сами разберётесь что делать... :)

Результат: нормальные файлы, читающиеся нормальными плейерами. Отсутствие бардака с кодировками. Возможность выковырять нетронутые mp3 файлы в любой потребный момент. Удобство и комфорт, короче.

P.S. Кроме того, в данном случае unix-way - рулит... ;)

upd: Тааак. Полученный ogg не понимает половина плейеров, при разворачивании в mp3 теряются тэги, а как выковырять тэги из полученных файлов - ещё не придумал. Самое забавное - xfmedia их вполне себе проигрывает...

technorati: , ,

6 прокомментировало:

mishaa комментирует...

Спасибо, я и не подозревал о такой возможности, безболезненной миграции. Ща попробую.

P.S. Скриптик, только не вписался в столь узкий формат странички.

mis комментирует...

Скриптик отработал, файлик создался... Но beep-media-player его играть отказывается. плагин для ogg в наличии. В чем проблема?

compress комментирует...

iTunes'ом конвертнул все тэги в id3v2 2.3 в Unicode. Никаких проблем с русским.

SilverStranger комментирует...

чтото неработает...тоесть файл создается, но не играется ничем... другие .ogg файлы(которые изначально .ogg) были читаются нормально...

Анонимный комментирует...

Хм, а как же mpeg4ip? :-)

StraNNicK комментирует...

Его нет в Debian'овских репозитариях.
А руками собирать - лень...