[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: