用诱变剂固定ID3标签的编码

2024-06-28 14:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试修复ID3标记的编码,以便我的Nokia Lumia 630windows 8一起正确显示西里尔字母。我在做这个with ^{}

# -*- 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的输出是这样的:

^{pr2}$

(这就是为什么我在脚本中设置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文件,我的手机可以正确显示。有什么提示吗?


Tags: textincom编码forvaluemp3encoding
1条回答
网友
1楼 · 发布于 2024-06-28 14:30:48

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

Windows Explorer and Windows Media Player cannot handle ID3v2.4 tags in any version, up to and including Windows 8 / Windows Media Player 12. Windows can understand ID3v2 up to and including version 2.3.[13][14]

第二个问题是,我在开头使用了onefile和垃圾(http头)。Windows并不介意,它可以在标题后面看到id3v2标记。我用来编辑标记的puddletag不是这样。因此,它在标题之前又添加了一个id3v2标记。但是Windows忽略了第一个id3v2标记。(第二个胜过第一个?)另外,艺术家没有出现在第二个id3v2标记中,因此它从文件末尾的id3v1标记中获取了它(顺便说一下,puddletag添加了这个标记)。有关详细信息,请参阅此bitbucket issue。在

下面是一些有用的脚本:

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

^{pr2}$

用法:

$ 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

请注意mp3infodoesn't support既不是unicode也不是{}。在

另外一些关于^{}formatusefullinks。在

相关问题 更多 >