使用mutagen修复ID3标签的编码

时间:2015-05-21 18:21:38

标签: python id3 mutagen

我正在尝试修复ID3标记的编码,以便我的Nokia Lumia 630板载windows 8能够正确显示西里尔字母。我这样做with mutagen

# -*- coding: utf-8 -*-
import os
import mutagen.id3

for path in [u'Sergei Babkin - Aleksandr [pleer.com].mp3']:
    id3 = mutagen.id3.ID3(path)
    for key, value in id3.items():
        if key in ['TIT2', 'TPE1']:
            value.text = [u'тест']
            value.encoding = 1
    id3.save()

最初,有些歌曲显示正确。在我的实验之后,即使那些现在也没有可读的名字。但没有太大变化。也就是说,mid3v2的输出是这样的:

$ mid3v2 --list-raw Sergei\ Babkin\ -\ Aleksandr\ \[pleer.com\].mp3 
Raw IDv2 tag info for Sergei Babkin - Aleksandr [pleer.com].mp3
TYER(encoding=1, text=[u'2007'])
TIT2(encoding=1, text=[u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440']) 
USLT(encoding=0, lang='eng', desc=u'', text=u' ') 
TRCK(encoding=1, text=[u'9']) 
TPE1(encoding=1, text=[u'\u0421\u0435\u0440\u0433\u0435\u0439 \u0411\u0430\u0431\u043a\u0438\u043d']) 
TALB(encoding=1, text=[u'\u041c\u043e\u0442\u043e\u0440'])
TCON(encoding=1, text=[u'(12)Other'])

(这就是我在我的脚本中设置value.encoding = 1的原因,但我也尝试编码3。)现在它就像这样:

$ mid3v2 --list-raw Sergei\ Babkin\ -\ Aleksandr\ \[pleer.com\].mp3 
Raw IDv2 tag info for Sergei Babkin - Aleksandr [pleer.com].mp3 
TDRC(encoding=0, text=[u'2007']) 
TIT2(encoding=1, text=[u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440']) 
USLT(encoding=0, lang='eng', desc=u'', text=u' ') 
TRCK(encoding=1, text=[u'9']) 
TPE1(encoding=1, text=[u'\u0421\u0435\u0440\u0433\u0435\u0439 \u0411\u0430\u0431\u043a\u0438\u043d']) 
TALB(encoding=1, text=[u'\u041c\u043e\u0442\u043e\u0440'])
TCON(encoding=1, text=[u'Other'])

不确定哪些内容可能已更改TCON。此外,mp3info现在说:

$ mp3info Sergei\ Babkin\ -\ Aleksandr\ \[pleer.com\].mp3
File: /home/yuri/Downloads/music/бабкин/Sergei Babkin - Aleksandr [pleer.com].mp3
Title:   ????                           Track: 9
Artist:  ????
Album:   ?????                          Year:  2007
Comment:                                Genre: Other [12]

在使用mutagen之前显示西里尔字母。

那么,有没有办法找出ID3标签中的确切编码?你可能知道如何让它发挥作用吗?我做错了什么?

UPD 我有一个我的手机正确显示的mp3文件。任何提示?

1 个答案:

答案 0 :(得分:1)

到目前为止,我遇到了以下问题。第一个,我的手机没有正确处理id3v2.4标签(Windows 8的音乐应用程序)。保存为id3v2.3会有所帮助。作为维基百科says

  

Windows资源管理器和Windows Media Player无法处理任何版本的ID3v2.4标签,包括Windows 8 / Windows Media Player 12.Windows可以理解ID3v2,包括版本2.3。[13] [14]

第二个是我在开头有one file垃圾(http标头)。 Windows并不介意,并且可以在标题后看到id3v2标记。 {I}用于编辑标签的情况并非如此。因此,它在标题之前添加了一个puddletag标记。但Windows忽略了第一个id3v2标记。 (第二个覆盖第一个?)此外,艺术家没有出现在第二个id3v2标记中,因此它从文件末尾的id3v2标记处获取(由{添加}顺便说一句{1}}。有关详细信息,请参阅此bitbucket issue

以下是一些可能派上用场的脚本:

id3v1

puddletag

fix-encoding.py

#!/usr/bin/env python2
import sys
import mutagen.id3
id3 = mutagen.id3.ID3(sys.argv[1])
id3.save(v2_version=3)

用法:

dump-id3.py

P.S。 #!/usr/bin/env python2 import sys import mutagen.id3 id3 = mutagen.id3.ID3(sys.argv[1]) print id3.version for key, value in id3.items(): if key in ['TIT2', 'TPE1']: print value.encoding, ', '.join(value.text).encode('utf8') doesn't support既不$ find ~/Music -name '*.mp3' -exec ./dump-id3.py \; $ find ~/Music -name '*.mp3' -exec bash -c './fix-encoding.py "$1" && mid3v2 --delete-v1 "$1"' -- {} \; $ mid3v2 --list-raw PATH # for completeness 也不mp3info

P.S。关于useful links的一些mp3 format