如何为MP3文件添加SYLT标签?使用Mutagen遇问题求指导
解决Mutagen添加SYLT同步歌词失败的问题
几个常见的坑和修复方法:
1. Windows路径转义错误
你写的路径"C:\Music\Ghost.mp3"里的\M会被当成转义字符,导致程序找不到文件。两种修复方式:
- 用原始字符串(前面加
r):aud = ID3(r"C:\Music\Ghost.mp3") - 把反斜杠转义成两个:
aud = ID3("C:\\Music\\Ghost.mp3")
2. 时间戳不是整数
SYLT要求时间戳必须是整数类型,如果你的millisecond是字符串(比如从文本里读出来的),必须先转成int。比如:
# 正确格式:每个元素是(歌词文本, 整数时间戳) sl = [("第一句", 1000), ("第二句", 3500), ("第三句", 6200)]
3. 原有标签未被覆盖
如果目标MP3已经有SYLT标签,用add()方法大概率不会替换掉旧标签,直接赋值更靠谱:
# 把add改成直接赋值 aud["SYLT"] = SYLT(encoding=Encoding.UTF8, format=2, type=1, text=sl)
4. 完整可运行代码
别忘了导入所有需要的模块,保存时指定ID3版本兼容性更好:
from mutagen.id3 import ID3, SYLT, Encoding # 读取文件 aud = ID3(r"C:\Music\Ghost.mp3") # 同步歌词列表 sl = [("Ghost", 0), ("I'm getting tired of you", 1200), ("You're a ghost", 2500)] # 设置SYLT标签 aud["SYLT"] = SYLT( encoding=Encoding.UTF8, format=2, # 2代表绝对时间(毫秒),无需修改 type=1, # 1代表歌词类型,无需修改 text=sl ) # 保存修改,指定v2.3版本兼容性更广 aud.save(v2_version=3)
验证标签是否生效
可以用这段代码检查是否成功添加:
from mutagen.id3 import ID3 aud = ID3(r"C:\Music\Ghost.mp3") if "SYLT" in aud: print("同步歌词已添加成功:") for line, time in aud["SYLT"].text: print(f"{time}ms → {line}") else: print("SYLT标签未找到,添加失败")
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

