gpt4 book ai didi

python - 使用诱变剂修复 ID3 标签的编码

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:05 25 4
gpt4 key购买 nike

我正在尝试修复 ID3 标签的编码,以便我的带有 windows 8Nokia Lumia 630 能够正确显示西里尔字母。我正在这样做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]

在使用诱变剂之前它显示了西里尔字母。

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

UPD 我有一个 mp3 文件,我的手机可以正确显示该文件。有什么提示吗?

最佳答案

到目前为止,我遇到了以下问题。第一个,我的手机无法正确处理 id3v2.4 标签(即 Windows 8 的音乐应用程序)。另存为 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]

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

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

修复编码.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

附注mp3info doesn't support既不是 unicode 也不是 id3v2

附注一些useful links关于mp3 format .

关于python - 使用诱变剂修复 ID3 标签的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30381503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com