Решаем проблемы с кодировкой в 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 :-)
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 36
    • +2
      Полезная вещь. Спасибо.

      Для выбора директории, ИМХО, проще всего использовать 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
        cd "$FILE" || exit; добавил, а вот tcl/tk какой-то «вырвиглаз» :)
      • +1
        Тоже раньше пользовался очень похожим самописным скриптом, потом (вроде даже здесь) посоветовали sourceforge.net/projects/tag2utf/, более удобным и отточенным показался.
        • +1
          Спасибо Вам. Вы сподвигли меня разобраться с кракозябрами в своей коллекции музыки. Но Ваш способ у меня почему то не сработал. Зато помог вот этот рецепт: 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
            Очень странно почему этот способ не сработал, там как раз используется 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
              mp3.sh: 7: Syntax error: word unexpected (expecting ")")
              • 0
                paste.ubuntu.com/394596/ попробуйте так, должно сработать.
                • 0
                  Попробуйте запустить в bash вместо sh
                  • 0
                    mp3.sh: line 7: ошибка синтаксиса около неожиданной лексемы `"$FILE"'
                    mp3.sh: line 7: `cd "$FILE";'
                    • 0
                      Я поправил в топике — вы оттуда пробовали или с paste.ubuntu.com — сейчас не открывается, может там что-то неверно.
                      Попробуйте в 7строке заменить на cd "$FILE" || exit;
                      • 0
                        sh mp3.sh
                        Выбран "/home/pysik/Музыка/2006 — Летние Дни".
                        mp3.sh: 14: Syntax error: ";;" unexpected

                        Скрипт использую с paste.ubuntu.com/394596/
            • +3
              В /usr/bin как-то неправославно. Лучше положить в /usr/local/bin или даже в домашней директории создать каталог bin, добавить его в $PATH и положить файл в него.
              • +1
                Ещё со времён обладания Sony Ericcson я прознал про мегатехнологию.
                В iTunes можно сконвертировать теги в формат версии 2.4, а он в юникоде.
                • +1
                  но Itunes не выпускают для linux
                  • +1
                    Ну это совет для залётных виндосоводов, чтоб не вздумали, что их проблема не решаема без bash, или хотя бы cygwin :)
                • 0
                  Хм, не подскажите, где именно это сделать?
                  • 0
                    Правой кнопкой мыши на файл (или файлы, если выделено несколько) и четвёртый сверху пункт «Конвертировать id3 теги...»
                • 0
                  чтобы использовать qt-like диалог можно попробовать kdialog
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      > Можно использовать EasyTag и прочие редакторы тэгов. Но чаще всего, мне надо только поправить кодировку, а тэги прописаны верно.

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

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

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