使用mutagen编辑MP3元数据后iTunes显示时长翻倍问题求助
MP3元数据编辑后iTunes时长翻倍问题解决方案
问题描述
使用Python的mutagen模块编辑MP3的标题、艺术家、专辑等元数据后,iTunes中显示的时长翻倍(变为7:07),但文件资源管理器和VLC中仍显示正常时长3:39。
当前代码
def info_of_mp3(dictionary_of_info, filenamefull): from mutagen.id3 import ID3, TIT2, TPE2, TALB, TPE1, TYER, TDAT, TRCK, TCON, TORY, TPUB, USLT dictionary_of_info = { # example info input "TIT2":"Idli Chutney", #TITLE "TPE1":"Sean Roldan", #ARTIST "TALB":"None" #ALBUM } filenamefull = "Sean Roldan - Idli Chutney.mp3" #example filename input SAVE_PATH = "C:/directions/to/my/folder" audio = ID3(SAVE_PATH+"/"+filenamefull) audio.add(TIT2(encoding=3, text = dictionary_of_info["TIT2"])) #TITLE audio.add(TPE1(encoding=3, text = dictionary_of_info["TPE1"])) #ARTIST audio.add(TALB(encoding=3, text = dictionary_of_info["TALB"])) #ALBUM audio.save(v2_version=3)
截图说明
- 文件资源管理器显示正常时长:

- iTunes显示时长翻倍:

解决方案
1. 替换add方法为直接赋值,避免重复标签
mutagen的add方法会追加标签而非覆盖,若原文件已有对应标签,重复执行会导致标签重复,iTunes解析时出错。修改代码如下:
# 替换原add语句为直接赋值 audio["TIT2"] = TIT2(encoding=3, text=dictionary_of_info["TIT2"]) audio["TPE1"] = TPE1(encoding=3, text=dictionary_of_info["TPE1"]) audio["TALB"] = TALB(encoding=3, text=dictionary_of_info["TALB"])
2. 清理现有重复标签
若文件已存在重复标签,先清理再写入:
audio = ID3(SAVE_PATH+"/"+filenamefull) # 删除目标标签(如果存在) for tag_id in ["TIT2", "TPE1", "TALB"]: if tag_id in audio: del audio[tag_id] # 再添加新标签 audio["TIT2"] = TIT2(encoding=3, text=dictionary_of_info["TIT2"]) # ...其余标签赋值
3. 尝试保存为ID3v2.4版本
iTunes对ID3v2.4的兼容性更稳定,修改保存语句:
audio.save(v2_version=4)
4. 修复MP3帧头错误
若上述方法无效,可能是MP3文件本身的帧结构损坏,用ffmpeg重新封装修复(无损音质):
ffmpeg -i "Sean Roldan - Idli Chutney.mp3" -c:a copy "fixed_Sean Roldan - Idli Chutney.mp3"
内容的提问来源于stack exchange,提问作者Aarush Anantha Prakash
相关产品推荐
相关产品推荐

