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

时间:2017-01-05 21:51:27

标签: python mp3 id3 eyed3

为此,我使用的是Python 2.7.13,Windows 10和eyed3包,记录为here

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

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

eyed3文档列出了我在代码中或多或少地遵循的示例代码:

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. 我看到another question关于eyed3问题,当文件没有ID3标签时,使用initTag()解决了该问题。虽然我没有得到同样的错误,但我的问题是否可以相关?
  3. 我可以错过导入声明吗?
  4. 我应该尝试使用其他Python模块来操作ID3元数据吗?
  5. 我尝试了各种各样的测试,但无法提出可能指向解决方案的任何不同结果。

    提前感谢任何花时间阅读此内容的人!任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,最后在这个帖子上找到了解决方案: 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标记。

解决方案: 用以下内容替换save语句:

   audiofile.tag.save(version=(1,None,None))
   audiofile.tag.save()

第一个语句将确保更新资源管理器和WMP使用的标记。第二个将确保使用v2.4标签的应用程序也得到更新(例如VLC)。希望这有帮助!

编辑:将来如果您计划添加专辑封面,那么您还应该添加以下内容:

    audiofile.tag.save(version=(2,3,0))

不完全确定原因,但更新v2.3标签似乎是第一次专辑艺术更改的工作。