Python的eyed3包未正确设置ID3元数据

3

我使用Python 2.7.13、Windows 10和这里记录的eyed3包。

目标:我正在尝试创建一个脚本,可以为缺少信息的MP3文件输入任何所需的ID3元数据。

问题:脚本似乎可以正确更新元数据,但无法将信息添加到MP3属性的“详细信息”屏幕(MP3详细信息屏幕)。然而,如果在运行脚本之前手动在这些字段中输入数据,它就会正确添加元数据,并在详细信息屏幕上显示!我注意到的另一件事是,只需要在至少一个字段中输入数据,脚本就可以正确地填充所有字段。这样做似乎以某种方式初始化并允许访问字段...

眼镜蛇文档列出了示例代码,我已经在我的代码中更多或更少地遵循了它:

import eyed3
import eyed3.mp3

path = [path to some MP3 file]

if eyed3.mp3.isMp3File(path):
     audiofile = eyed3.load(path)   # load file from file path
     audiofile.tag.artist = u"Artist"    # u needed to denote unicode
     audiofile.tag.album_artist = u"Album Artist"
     audiofile.tag.album = u"Album"
     audiofile.tag.save()    # save altered tags

问题:

  1. 我是否不知道ID3元数据和MP3属性详细信息屏幕上实际字段之间存在某种隐藏的分离?
  2. 我看到另一个问题,涉及到使用initTag()解决眼睛3的问题,当文件一开始没有ID3标签时。虽然我没有得到同样的错误,但我的问题可能与此相关吗?
  3. 我可能缺少一个导入语句吗?
  4. 我应该尝试使用不同的Python模块来操作ID3元数据吗?

我尝试了各种测试,但无法得出任何指向解决方案的不同结果。

感谢您提前阅读!任何帮助都将不胜感激:)

1个回答

4
我面临着同样的问题,最终在这个主题中找到了解决方案:https://bitbucket.org/nicfit/eyed3/issues/22/tag-save-method-does-not-apply-changes 要点:默认情况下 eyed3.load(pathtofile) 加载 ID3_V2_4 标签,而资源管理器和 Windows Media Player 使用 1.x 标签。
解决方案: 将您的保存语句替换为以下内容:
   audiofile.tag.save(version=(1,None,None))
   audiofile.tag.save()

第一条语句将确保更新资源管理器和 Windows 媒体播放器使用的标签。第二条语句将确保使用 v2.4 标签的应用程序(例如 VLC)也得到更新。希望这能帮到您!
编辑:如果您打算在将来添加专辑封面,那么还应添加以下内容:
    audiofile.tag.save(version=(2,3,0))

不太确定为什么,但是更新v2.3标签似乎可以成功更改专辑封面。


谢谢!这个解决了问题。我最终使用了version=(2,3,0),因为它似乎也涵盖了其他方面,比如专辑艺术家。 - Orin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接