You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读写MP3评论标签遇问题:无法读取或保存评论

解决Python使用eyed3读写MP3评论标签的问题

一、正确设置评论的方法

你的代码问题出在两个地方:一是没处理MP3无ID3标签的情况,二是comments.set()的参数没适配VLC这类播放器的识别逻辑。试试下面的修正代码:

import eyed3

mp3 = eyed3.load(filename)
# 先确保标签存在,没有就初始化
if mp3.tag is None:
    mp3.initTag()
# 设置评论时指定语言和空描述(多数播放器优先读取空描述的评论)
mp3.tag.comments.set("comment set with eyed3", lang='eng', desc='')
# 用ID3v2.3版本保存,兼容性更好,同时指定UTF-8编码
mp3.tag.save(version=eyed3.id3.ID3_V2_3, encoding='utf-8')

解释:

  • initTag():如果MP3原本没有ID3标签,直接操作mp3.tag会报错,这一步是兜底。
  • desc='':VLC等播放器通常只识别描述为空的评论,默认参数可能带了隐藏描述,导致不显示。
  • 指定ID3v2.3:ID3v2.4的兼容性不如v2.3,部分老播放器识别不了。

二、正确读取评论的方法

mp3.tag.comments是一个评论列表,不是单个值,直接读取会拿到对象而不是文本。要获取实际内容,得遍历或匹配目标评论:

mp3 = eyed3.load(filename)
if mp3.tag and mp3.tag.comments:
    # 优先找英文、空描述的评论(和设置的对应)
    for comment in mp3.tag.comments:
        if comment.lang == 'eng' and comment.desc == '':
            print("读取到的评论:", comment.text)
            break
    else:
        # 没找到的话就取第一个评论
        print("读取到的评论:", mp3.tag.comments[0].text)
else:
    print("这个MP3没有评论标签")

三、排查要点

  • 升级eyed3:旧版本有不少bug,执行pip install --upgrade eyed3更新到最新版。
  • 检查文件权限:确保你有MP3文件的写入权限,不然save()会静默失败。
  • 刷新VLC缓存:修改后关闭VLC再重新打开,避免显示旧的缓存数据。

内容的提问来源于stack exchange,提问作者B Panzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:15:01