Re: id tags, mp3, ogg..
Max Sinelnikov wrote:
> Решил перейти с xmms на amorok. Больно уж красив и фичаст:) Но пришлось
> вспомнить о давно застрявшей проблеме с кодировками тагов в мп3.
Аналогично пришлось решать проблему при переходе на Rhythmbox.
> 2) можно все таги из id3v1 перевести в id3v2.3 или в id3v2.4. В какую
> лучше переводить и в какой кодировке в таком случае надо писать
> русские таги?
Лучше и удобнее под линуксом использовать кодировку UTF-8, а она
появилась только в id3v2.4
> И общий вопрос .. есть какой-нибудь готовый инструмент для массовой
> переконвертации тагов? Наверняка не у меня одного эта проблема, может
> кто-нибудь уже написал нужные скрипты?
Я написал скриптик на питоне (см. вложение; использует python-id3lib),
который сканирует .mp3 файлы в текущем каталоге и выводит набор
шеловских команд с вызовом eyeD3. Довольно сырой, но работает. Обычно
перед перекодировкой я всё что нужно правлю в EasyTag'e и сохраняю тэги
в кодировке 1251.
> Напоследок, скажу, что совместимость с виндовс- и железными
> mp3-плеерами меня при этом нисколько не волнует. Если у меня будет все
> по стандарту, то это их проблемы.
Под виндой есть foobar2000, он может правильно показывать UTF-8 тэги из
id3v2.4; с винампом не боролся.
--
С уважением,
Игорь.
#!/usr/bin/python
import os, pyid3lib
frameids = {
'TIT2': '-t',
'TPE1': '-a',
'TALB': '-A',
'TYER': '-Y'
}
notneeded = ('TLEN')
# TRCK: -n[/-N]
# TCON: (-G)
entries = os.listdir('.')
files = []
for entry in entries:
if entry[-4:] == '.mp3':
files.append(entry)
files.sort()
for file in files:
cmdline = 'eyeD3'
tags = pyid3lib.tag(file)
for tag in tags:
frameid = tag['frameid']
if frameid in frameids.keys():
cmdline = '%s %s "%s"' \
% (cmdline, frameids[frameid], tag['text'].decode('cp1251').encode('utf-8'))
elif frameid == 'TRCK':
text = tag['text']
if '/' in text:
n = text.index('/')
cmdline = '%s -n %s -N %s' % (cmdline, text[:n], text[n+1:])
else:
cmdline = '%s -n %s' % (cmdline, text)
elif frameid == 'TCON':
cmdline = '%s -G %s' % (cmdline, tag['text'][1:-1])
elif tag.has_key('text') and frameid not in notneeded:
cmdline = '%s --set-text-frame="%s:%s"' \
% (cmdline, frameid, tag['text'].decode('cp1251').encode('utf-8'))
print 'eyeD3 --remove-all "%s"' % file ,
print '&&' ,
print '%s --set-encoding=utf8 "%s"' % (cmdline, file)
Reply to: