【问题标题】:How to add SYLT(synced lyrics) tag on ID3v2 mp3 file using python?如何使用 python 在 ID3v2 mp3 文件上添加 SYLT(同步歌词)标签?
【发布时间】:2020-05-16 11:43:37
【问题描述】:

我想使用 python 在我的 mp3 文件中添加来自 vtt 的同步歌词。我尝试使用 mutagen 模块,但它没有按预期工作。

from mutagen.id3 import ID3, USLT, SLT
import sys
import webvtt

lyrics = webvtt.read(sys.argv[2])
lyri = []
lyr = []
for lyric in lyrics:
    times = [int(x) for x in lyric.start.replace(".", ":").split(":")]
    ms = times[-1]+1000*times[-2]+1000*60*times[-3]+1000*60*60*times[-4]
    lyri.append((lyric.text,ms))
    lyr.append(lyric.text)
fil = ID3(sys.argv[1])
tag = USLT(encoding=3, lang='kor', text="\n".join(lyr)) # this is unsynced lyrics
#tag = SLT(encoding=3, lang='kor', format=2, type=1, text=lyri) --- not working
print(tag)
fil.add(tag)
fil.save(v1=0)

我该如何解决这个问题?

【问题讨论】:

    标签: python mp3 id3v2


    【解决方案1】:

    我用mutagen解析了一个已经有SYLT数据的mp3文件,发现了SYLT的用法:

    from mutagen.id3 import ID3, SYLT, Encoding
    
    tag = ID3(mp3path)
    sync_lrc = [("Do you know what's worth fighting for", 17640), 
                ("When it's not worth dying for?", 23640), ...]  # [(lrc, millisecond), ]
    tag.setall("SYLT", [SYLT(encoding=Encoding.UTF8, lang='eng', format=2, type=1, text=sync_lrc)])
    tag.save(v2_version=3)
    

    但我不知道format=2, type=1 是什么意思。

    【讨论】:

      【解决方案2】:

      检查 https://id3.org/id3v2.3.0#Synchronised_lyrics.2Ftext

      • 格式1:绝对时间,32位大小,以MPEG帧为单位

      • 格式2:绝对时间,32位大小,以毫秒为单位

      • 类型0:是其他

      • 类型 1:是歌词

      • 类型 2:是文本转录

      • 类型 3:是动作/部分名称(例如“Adagio”)

      • 类型 4:是事件(例如“堂吉诃德上台”)

      • 类型 5:是和弦(例如“Bb F Fsus”)

      • 类型6:是琐事/'弹出'信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 2013-08-24
        • 2011-06-18
        相关资源
        最近更新 更多