Linux для всех

индекс
247,20

Решаем проблемы с кодировкой в mp3

Не секрет, что многие, до сих пор, прописывают тэги во всяких cp1251 и KOI-8R — после чего их не понимают ни телефоны, ни плееры (некоторые) и с проигрывателями под linux бывает много проблем.
Больше всего неприятно, то что при загрузке новой музыки, ты не можешь быть уверен в какой кодировке идут тэги и вот добавив в свой проигрыватель ты обнаруживаешь нечитаемые символы вместо названия трека, исполнителя и альбома. А ведь оно еще и на last.fm скроблится в таком виде.

Можно использовать EasyTag и прочие редакторы тэгов.
Но чаще всего, мне надо только поправить кодировку, а тэги прописаны верно.

До этого, я всегда пользовался простым shell скриптом, но решил немного облегчить задачу.

Вот решение:


Нам понадобится пакет python-mutagen
sudo aptitude install python-mutagen

создадим shell скрипт
$ touch mp3.sh
$ nano mp3.sh


и добавим в него следующее:
#!/bin/sh

FILE=`zenity --file-selection --directory --title="Выберите путь к крякозябрам"`
case $? in
0)
echo "Выбран \"$FILE\".";;
1)
echo "Файл не выбран.";;
-1)
echo "Файл не выбран.";;
esac
cd "$FILE" || exit;
(find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e KOI8-R --remove-v1; find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1)|zenity --progress --pulsate --auto-close --text "идет процесс" --title "Меняем кодировку"
zenity --info --text="теперь у Вас православный UTF"



Необходимо дать права на выполнение скрипта
chmod u+x mp3.sh

Вот и всё, можете запускать ($ sh mp3.sh) и указать папку где требуется исправить кодировку.

Перед вами предстанет диалоговое окно с выбором каталога, в котором надо навести порядок — остается выбрать и нажать «ок»

Для удобства, я предлагаю сделать еще пару движений:
sudo mv mp3.sh /usr/bin/mp3

И теперь в любой момент, мы нажимаем заветный alt+F2 и набираем mp3
Можно и кнопку запуска переделать.

P.S. Это первый опыт в написании shell скрпта, для себя — немного облегчить жизнь.
Если кому-то еще пригодится — буду рад.
Наверняка этот код не совершенен.
Буду признателен за любые советы. Например как сделать окно с выбором директории на QT :-)
+39
13 марта 2010, 02:04
80

комментарии (36)

+2
michurin #
Полезная вещь. Спасибо.

Для выбора директории, ИМХО, проще всего использовать tcl/tk.
FILE=`echo 'wm withdraw .; puts [tk_chooseDirectory -title {Select a directory} -mustexist 1]; exit' | wish8.4`

В вашей системе wish может называться wish, wish8.4, wish8.5 или ещё как-то так.

Кроме того, я бы советовал проверять, случилось ли cd:
cd "$FILE" || exit;

Иначе можно накосячить :-)

Перед exit-ом можно выдавать GUI сообщение
echo 'wm withdraw .; tk_messageBox -icon error -type ok -message {Invalid dir.} -title {Abort}; exit' | wish8.4
+1
xjunkiex #
cd "$FILE" || exit; добавил, а вот tcl/tk какой-то «вырвиглаз» :)
+1
barker #
Тоже раньше пользовался очень похожим самописным скриптом, потом (вроде даже здесь) посоветовали sourceforge.net/projects/tag2utf/, более удобным и отточенным показался.
+1
pima #
Спасибо Вам. Вы сподвигли меня разобраться с кракозябрами в своей коллекции музыки. Но Ваш способ у меня почему то не сработал. Зато помог вот этот рецепт: forum.ubuntu.ru/index.php?topic=5356.msg41046#msg41046

«Перекодировал все кириллические теги в ID3v2.4 utf-8 с помощью тулзы mid3iconv из пакета python-mutagen.
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1»
0
xjunkiex #
Очень странно почему этот способ не сработал, там как раз используется mid3iconv для KOI8-R и cp1251
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e KOI8-R --remove-v1; find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1
0
pima #
mp3.sh: 7: Syntax error: word unexpected (expecting ")")
0
xjunkiex #
paste.ubuntu.com/394596/ попробуйте так, должно сработать.
0
naething #
Попробуйте запустить в bash вместо sh
0
pima #
mp3.sh: line 7: ошибка синтаксиса около неожиданной лексемы `"$FILE"'
mp3.sh: line 7: `cd "$FILE";'
0
xjunkiex #
Я поправил в топике — вы оттуда пробовали или с paste.ubuntu.com — сейчас не открывается, может там что-то неверно.
Попробуйте в 7строке заменить на cd "$FILE" || exit;
0
beho1der #
sh mp3.sh
Выбран "/home/pysik/Музыка/2006 — Летние Дни".
mp3.sh: 14: Syntax error: ";;" unexpected

Скрипт использую с paste.ubuntu.com/394596/
+3
naething #
В /usr/bin как-то неправославно. Лучше положить в /usr/local/bin или даже в домашней директории создать каталог bin, добавить его в $PATH и положить файл в него.
+1
smartello #
Ещё со времён обладания Sony Ericcson я прознал про мегатехнологию.
В iTunes можно сконвертировать теги в формат версии 2.4, а он в юникоде.
+1
xjunkiex #
но Itunes не выпускают для linux
+1
smartello #
Ну это совет для залётных виндосоводов, чтоб не вздумали, что их проблема не решаема без bash, или хотя бы cygwin :)
0
xjunkiex #
Есть методы проще, всё таки айтюнс слишком огромен для таких задач.
UTF16 Encoder подойдет очень хорошо elfse.com/2009/11/02/utf16-encoder.html
0
kuzya555 #
Хм, не подскажите, где именно это сделать?
0
smartello #
Правой кнопкой мыши на файл (или файлы, если выделено несколько) и четвёртый сверху пункт «Конвертировать id3 теги...»
0
bl00dl1nes #
чтобы использовать qt-like диалог можно попробовать kdialog
+1
andreyu #
На эту тему уже не раз писали даже тут. Я поступаю проще:
$ find. -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

Есть еще такой вариант:

$ mp3unicode --source-encoding windows-1251 --id3v1-encoding none --id3v2-encoding unicode file.mp3
0
m52 #
> Можно использовать EasyTag и прочие редакторы тэгов. Но чаще всего, мне надо только поправить кодировку, а тэги прописаны верно.

И что мешает в EasyTag просто поправить кодировку? :)

В любом случае, раз уж все равно сам пишешь скрипт, эту функциональность оформить в виде Nautilus script.
0
siasia #
Я раньше так же пользовался, но у него уж слишком много настроек любая неправильная комбинация, которых часто не работает. Все эти вкладочки и галочки оказались не нужны когда я начал использовать mutagen.
0
ant99 #
У меня две ОС: Ubuntu 9.10 и Windows 7. Все тэги музыкальных файлов в UTF8. Сама аудиоколлекция на NTFS-разделе. И никаких проблем с прослушиванием :)
+2
xjunkiex #
вам повезло, я когда скачиваю чтонибудь новое, то ~70% приходится в ср1251
0
ant99 #
Да, большую часть загруженного приходится «приводить в порядок». Спасает EasyTAG. Но я заметил, что всё чаще и чаще попадается музыка с тэгами в UTF8, что не может не радовать.
0
stetzen #
Я не поручусь за 11й, но 12й WMP по дефолту сохраняет теги в UTF-16, с которым все Linux-плееры нормально работают. MS взялись за ум, похоже :)
НЛО прилетело и опубликовало эту надпись здесь
+1
Imposeren #
еще есть mp3unicode.sourceforge.net
–2
alexfg #
Программка MP3tag — www.mp3tag.de/en/ решает все проблемы.
0
cblp #
>как сделать окно с выбором директории на QT
QFileDialog::getExistingDirectory(), если это ещё актуально.
0
posix #
>KOI-8R
facepalm.jpg
0
soshial #
а после этого а amarok'e треки теперь перестанут вопросоками отображаться? :)
0
xjunkiex #
именно!
0
Ryav #
Насколько я помню, Amarok и так отлично читал все тэги ;)
0
xjunkiex #
1.4 — да, отлично читал. А вот 2 — нет, если я не ошибаюсь, там эта проблема стала актуальной в связи с переходом на новую версию taglib
0
Istarin #
Неужели я единственный у кого куча мп3 в кой8-р и у кого не сработал ни один из перечисленных способов? Т.е. после
mid3iconv -e KOI8-R --remove-v1 ./*.mp3
выводятся строчки «Updating», но все мп3 файлы в текущей папке показывают стандартную койф-р последовательность в audacious, amarok, easytag. Последний, кстати, тоже их не исправляет.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.