Правильно и удобно перекодируем mp3-теги в UTF-8

    Здравствуй, уважаемый Хабр.

    Если у Вас есть mp3-файлы с тегами в windows-1251 кодировке, то Amarok в своей базе данных такие файлы показывает криво.

    Этот пост — для тех, кто ранее использовал Rus-Xmms
    проект для быстрого и удобного избавления от головной боли, связанной с кодировкой mp3-тегов и получил ее снова с выходом KDE4 и
    нового Amarok.

    Этот пост — также для тех, кто не совсем понимает, как в Linux можно корректно и рекурсивно перекодировать теги у
    множества mp3 файлов в юникод и версию ID3v2.4.

    Постараюсь преподнести это максимально лаконично, поэтому не буду описывать установку программы в [здесь подставить
    название Вашего любимого дистрибутива]
    .

    Рецепт приготовления прост и находится под катом.



    1.
    Устанавливаем EasyTag
    EasyTag

    2.
    Заходим в настройки и выставляем значения, как на скриншоте(ALT+P).
    Settings

    3. В дереве выбираем директорию с музыкой.

    TreeView

    4. Ждем.

    5. Нажимаем 2 кнопки — выделить все файлы, сохранить все файлы.

    6. Ждем. Заставляем Амарок пересканировать всю базу. Всё.

    Itworked

    В качестве бонуса EasyTag поправит расширения у файлов в lowercase.
    Спасибо за внимание.

    upd1. Подумал и перенес в «Linux для всех».
    upd2. Хабра-пользователь Miroling подсказал название аналогичного софта под Windows — TagScanner
    upd3. krig подсказал проект tag2utf
    upd4. Прислали на почту:
    Меня выручал mp3unicode, рекомендую
    mp3unicode.sourceforge.net
    Я писал по нему статью, но НЛО не понравилась.
    Alexander Prenko <prenko@gmail.com>
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 68
    • +4
      Так просто 8-)
      Я думал будет больше возни. Спасибо за информацию.

      PS
      Немного погуглив нашел бесплатный аналог программы для Windows — TagScanner.
      • 0
        Добавил в топик.
        Это оказалось действительно очень просто, но в сумме проблема у меня оставалась в течение нескольких лет :)
        • +3
          Для Windows ещё есть mp3Tag — тоже простая и удобная софтина. Ставил именно для смены кодировки, но потом ещё не раз пригодилась в других случаях.
          • НЛО прилетело и опубликовало эту надпись здесь
          • +6
            Есть способ значительно проще:
            python tag2utf.py /path/to/music/dir
            • 0
              Даже не знал об этом скрипте. Спасибо.
              • +2
                Да, я тоже ожидал увидеть здесь этот скрипт а не изитег.
                Хотя, с личного опыта, ИзиТег перекодирует на порядок быстрее.
                • 0
                  Между 3 и 10 секундами для одноразовой операции большая разница?
                  • +1
                    На 80 гигах музыки, из которых 30 кирилические — да.
                • 0
                  Этот скрипт обламывается на файлах, полный путь к которым вместе с названием файла превышает некоторую длину, по-моему 255 символов.
                  • 0
                    а если в этой папке музыка в перемешку с utf-8 кодировкой?
                    нормально перекодирует? не хочется самому экспириментировать:)
                    • 0
                      Easytag у меня не попортил нормальный UTF-8.
                      К таким файлам просто не было написано «Applying changes to file file.mp3».
                      • 0
                        НО!
                        всегда делайте резервные копии. Вдруг чо :)
                      • 0
                        Он делает проверки пофайлово и предлагает для конвертирования только файлы с кодировкой в cp1251 или koi8r.
                        • 0
                          Сегодня прогнал свою коллекцию скриптом на питоне, скрипт затронул только нужное, то что уже в utf-8 пропускалось автоматически… Кстати по времени заняло это отсилы секунд 10. В папках вперемешку находились как mp3, так и flac файлы, все выжило…
                      • +5
                        Я уже привык к mid3iconv -f cp1251 *.mp3, но как правило, приходится править еще много всего, кроме кодировки, для этого я использую Ex Falso. В следующий раз попробую EasyTeg, там все в одном флаконе, может окажется удобнее :)
                        • +1
                          К сожалению, mid3iconv мне не помог.
                          Я пробовал такой вариант:
                          find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

                          Я где-то читал, что если в пути к файлу есть точка — способ не помогает.
                        • +1
                          ИзиТег вообще крутая софтина, у нее также весьма мощные механизмы автозаполнения тегов, и ручной работы с тегами в множестве файлов.
                          • +1
                            Способов, как оказалось, множество. Я писал про скрипт на Perl-е, который конвертирует кодировки тэгов.
                            • 0
                              Посмотрите выше, пожалуйста. Мне почему-то мутаген не помог :(
                            • +1
                              Отлично, спасибо очень пригодилось. А как можно автоматизировать добавление обложек к файлам?
                              • 0
                                К сожалению, не в курсе, использую плагин к amarok, который скачивает обложки автоматически.
                              • +1
                                Как насчет такого метода?
                                find -iname '*.mp3' -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1
                                • 0
                                  К сожалению, mid3iconv мне не помог. Я где-то читал, что если в пути к файлу есть точка — способ не помогает.
                                • +1
                                  Под винду сколько видел прог — Tag & Rename — ИМХО самая удобная. Она и теги конвертит и инфу на cddb находит и обложки на амазоне и еще много всего. Единственный минус — она платная. Под Макось лично я использую CoverScout для обложек, а для тэгов — MPFreaker.
                                  А под линукс вот как-то так, как автор написал.
                                  • –4
                                    Это не решение проблемы. Решение проблемы — это правильный детект кодировок. Горе тому плееру который умеет работать только с утф8. Почему с винампом, с фубаром никогда не было и нет таких проблем?
                                    • +4
                                      Тут не дело в не-умении. Тут позиция разработчиков, которая называется „utf8 и не*бет“.
                                      И я ее поддерживаю.
                                      • –1
                                        С каких это пор винамп научился определять кодировки?
                                        Я потому от него и отказался, что он мне кракозябры показывал
                                        • +3
                                          По стандарту id3 v2 в тегах не может быть cp1251. Либо iso-8859-1, либо юникод в разных видах (UTF8, UTF16).
                                          • 0
                                            про v2 не спорю. но v2 в файле может и не быть и насколько мне известно, для v1 нет никаких ограничений по кодировке. поправьте если не прав
                                            • 0
                                              Нет, там однобайтовая кодировка. К тому же в v1 очень мало места для текста, так что оно не актуально сейчас.
                                          • 0
                                            cat echo '35 6 * * 7 root python tag2utf.py /path/to/music/dir' >> /etc/crontab
                                            Как то так, надо на досуге скорректировать да добавить, и не нужно кучи библиотек для поддержки старых форматов/кодировок…
                                            • 0
                                              Небольшой комментарий, для тех, кто не в теме: вышенаписанное запускает tag2utf.py раз в месяц в воскресенье в 6:35. Кстати то же самое можно скорее всего можно сделать и через планировщик виндовса (до этого видел запуск по расписанию скриптов на перле, еще в убогом планировщике ХР). Дамаю что так и сделаю, надо только отключить сообщения скрипта, после, о кодировке можно в принципе забыть.
                                            • 0
                                              >Решение проблемы — это правильный детект кодировок.

                                              Решение проблемы — это правильная кодировка в тегах. Для этого есть соответствующий стандарт, и этот стандарт — юникод. Стандарты для того и принимаются, чтобы не было проблем, понимаете?
                                              А «детект кодировок» — это не «решение проблемы», а всего лишь вынужденный костыль, придуманный из-за некоторых «умников», которые создали эту самую проблему своим наплевательством на принятые стандарты.

                                              Вы ещё скажите, что решение проблемы криво свёрстаных сайтов — это «правильный детект» и имитирование того кривописанного браузера, под который точился тот или иной сайт. Мол, браузеры должны сами определять, что такой-то криворукий Васисуалий заточил этот сайт под ИЕ6, поэтому надо имитировать его поведение и рендерить так, как это сделал бы он. Так, по-Вашему?
                                              • 0
                                                то о чем вы говорите — практически невозможная задача. а детект кодировок весьма простая и тем более уже имеющая готовые решения(которые нужно только правильно использовать) задача.
                                                • 0
                                                  Нужно лечить не симптомы, а причину болезни. И уж тем более не называть лечение симптомов «правильным решением», как это делаете Вы.
                                                  Причина «болезни» (кракозябр) — несоответствие стандарту. Правильное решение — описано в топике.
                                              • 0
                                                >Почему с винампом, с фубаром никогда не было и нет таких проблем?

                                                Да, насчёт «не было и нет проблем»: а Вы им пробовали скармливать файлы с тегами в koi8-r? Попробуйте для разнообразия — не будете больше такие смешные вещи рассказывать :)
                                              • 0
                                                Может вопрос немного не по теме, по как я могу быстро, а то в ручную лень, добавить теги к 5 дискам? Можем можно сделать какой нибудь скрипт… чтобы он из текстового файла читал данные

                                                title,artist и добавлял их. Структуда дисков… CD1/, CD2/,… CD5/. В ручную ну очень лень. Очень очень.

                                                Альбом — www.amazon.co.uk/101-Running-Songs/dp/B002NXNZRC

                                                • 0
                                                  если под windows, то помжет программа Mp3Tag. Там есть возможность брать теги из текстового файла с треклистом.
                                                  • 0
                                                    допустим в каждой директории файлы песен пронумерованы (1.mp3, 2.mp3, 3.mp3 и так далее) и есть файл tracks примерно такого содержания:

                                                    1. Don't Stop Me Now — Queen
                                                    2. The Rockafeller Skank — Fatboy Slim
                                                    3. Hey Ya! — Outkast


                                                    теперь можно считывая файл tracks переименовать пронумерованные mp3 файлы этой командой:

                                                    while read; do mv ${REPLY%%.*}.mp3 "${REPLY}.mp3"; done < tracks

                                                    для подстройки и экспериментов лучше всего сначала запускать с echo вместо mv, то есть так:

                                                    while read; do echo ${REPLY%%.*}.mp3 "${REPLY}.mp3"; done < tracks

                                                    собственно это просто переименует пронумерованные файлы в такие, какие прописаны в файле tracks. затем стоит прибегнуть к услугам easytag, который отлично парсит теги из названий файлов, а затем…
                                                  • 0
                                                    EasyTag — действительно полезная вещь. Тем более, когда объем музыки переваливает за 100 Гб. Единственный неприятный момент, с которым столкнулся: если музыка находится на диске ntfs, то EasyTag не всегда в состоянии сохранить изменения.
                                                    • 0
                                                      Вот у меня как раз на диске NTFS. Около 80 гигов. Посмотрим что будет. Думаю бекапить на диск-сосед или нет.
                                                      • 0
                                                        Можно и не бэкапить. Не потрет ничего. Если сомневаетесь, скормите сначала небольшую папочку и посмотрите, что произойдет.
                                                        • 0
                                                          Тоесть, он трогает только заголовок с ID-тегами?
                                                          Сегодня поищу в портежах или из сурцов соберу.
                                                    • 0
                                                      считаю что тег ID3v1.x нужно удалять от греха, а не записывать в кодировке CP1251, как это показано на картинке
                                                      • –1
                                                        что за бред?
                                                        пользуюсь однострочным скриптом, находит mp3 файлы в папках и конвертирует в теги юникод

                                                        nymin :~$ cat /usr/bin/tagconv
                                                        #!/bin/bash
                                                        find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v
                                                        • 0
                                                          Не хочется в третий раз отвечать одно и то же, прочтите комментарии.

                                                          ps забыли единицу в конце команды.
                                                        • 0
                                                          Извините за небольшой оффтоп, но может быть кто-то знает, чем в линуксе можно понизить битрейт mp3-файлов с сохранением тегов?
                                                          • 0
                                                            Понижение невозможно. Только перекодировка.
                                                            • 0
                                                              Извращенец…
                                                              Возможна схема: открытие, сохранение в другом битрейте. Но имхо это бред.
                                                              Можно скриптом сделать, но все равно. Вам уши не жалко?
                                                              • 0
                                                                Проблема в том, что треки с высоким битрейтом быстрее сажают батарейку плеера и занимают много места, а на слух разницу между 192 и 320 я определить не могу, поэтому и перекодирую песни для плеера в более низкий битрейт.
                                                                • 0
                                                                  Честно говоря, разница сильная, как мне кажется.
                                                                  Вот изврещений с FLAC я никогда не понимал, да, но 320 битрейт — это комфортный.

                                                                  Про батарейку плеера истину глаголите, но COWON D2 заставить посадиться достаточно сложно :) Маленький пиар cowon получился.
                                                                  • 0
                                                                    С другой стороны это портативный плеер. На нем можно и с флаком разницы не почувствовать, если бы он его играл. Теперь понятно почему человек хочет это сделать.
                                                            • +1
                                                              Спасибо, наконец то привел базу в порядок!
                                                              • 0
                                                                Я очень рад тому, что статья Вам пригодилась. Пожалуйста.
                                                              • +1
                                                                заплюсовал бы, да заряда не хватает :)
                                                                • 0
                                                                  Поправил немножко. Спасибо.
                                                                • +1
                                                                  спасибо за статью. как раз на днях обновления стёрли мою либу которая понимала русские тэги, так что это как раз то что нужно.
                                                                  • 0
                                                                    Не подскажете название либы? :)
                                                                    • +1
                                                                      у меня даже стояло зеркало. конкретно название либы уже и не вспомню.

                                                                      deb rusxmms.sourceforge.net/debian.lenny lenny main

                                                                      ну а щас squeeze.
                                                                      • 0
                                                                        Вы знаете, я почти уверен, что библиотека от ленни и сейчас будет работать. Попробуйте. В Убунте все работало вплоть до версии нового амарока, на всех версиях.
                                                                        • 0
                                                                          работать будет. да, но у меня тестинг, я часто обновляюсь. и темболее я уже всё перекодировал в утф8. пусть будет так :) кстати мои 8,6к файлов уже сутки редактирует, загрузка на процессор 50%. проц: Intel® Pentium® D CPU 2.80GHz
                                                                  • +1
                                                                    храню музыку на сетевом хранилище, сталкнулся с проблемой тегов в линухе и винде.
                                                                    если совсем убрать IDv1 то WMP «ослепнет».
                                                                    если сделать IDv1 и IDv2 то амарок и wmp работает нормально, а rhythmbox показывает закарючки…
                                                                    пока забил на rhythmbox.
                                                                    • 0
                                                                      Согласен, большую базу музыки удобно конвертнуть через EasyTag, но когда надо добавлять музыку отдельными альбомами этот способ не удобен.
                                                                      Для этого я использую скрипт для наутилуса forum.ubuntu.ru/index.php?topic=15605.msg126303#msg126303
                                                                      Правый клик по файлам -> Сценарии -> mp3tag_to_utf
                                                                      • 0
                                                                        а какие теги понимает winamp: cp1251 или utf8?
                                                                        • +1
                                                                          Картинки пропали

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