Пользователь
0,0
рейтинг
18 октября 2009 в 10:43

Администрирование → Правильно и удобно перекодируем 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>
Николай Шелехов @RainFall
карма
84,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (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
    Картинки пропали
    • 0
      Fixed.
      • 0
        Спасибо.

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