2

我正在尝试修复 ID3 标签的编码,以便我Nokia Lumia 630的 with windows 8onboard 可以正确显示西里尔字母。我正在这样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 文件,我的手机可以正确显示。有什么提示吗?

4

1 回答 1

2

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

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

第二个是我有一个 开头有垃圾的文件(http 标头)。Windows 不介意,并且可以id3v2在标题之后看到标记。这不是puddletag我用来编辑标签的情况。所以它id3v2在标题前又添加了一个标签。但是 Windows 忽略了第一个id3v2标签。(第二个覆盖了第一个?)此外,艺术家不在第二个id3v2标签中,因此它从id3v1文件末尾的标签中获取它(puddletag顺便添加了)。有关更多详细信息,请参阅此bitbucket 问题

这里有一些可能会派上用场的脚本:

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

#!/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')

用法:

$ 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

PS既不支持也不mp3info 支持unicodeid3v2

PS 一些有关格式的有用 链接mp3

于 2015-05-30T19:42:37.893 回答