Skip to content

Supported Formats

ChouChiu edited this page Sep 23, 2026 · 3 revisions

支持的格式

解析格式

格式 类型枚举 同步粒度 特征与载荷
LRC LyricsRawTypes::Lrc 行级 纯文本,[mm:ss.xx] 时间标签与标准元数据标签
QRC LyricsRawTypes::Qrc 逐字 纯文本,行头 [开始ms,时长ms],行内 文本(开始ms,时长ms)
QRC XML LyricsRawTypes::QrcFull 信封 XML 信封(<QrcInfos>),需先取出 LyricContent 属性方可解析
KRC LyricsRawTypes::Krc 逐字 加密二进制,需 decrypt_krc 解密为纯文本后再解析
YRC LyricsRawTypes::Yrc 逐字 纯文本,行头 [开始ms,时长ms],音节 (开始ms,时长ms,0)文本
YRC JSON LyricsRawTypes::YrcFull 信封 网易云接口返回的 JSON 信封({"yrc":...}),需取出歌词字符串
TTML LyricsRawTypes::Ttml 行级/逐字 W3C XML 格式,Apple Music 及 AMLL TTML DB 使用
Apple Music JSON LyricsRawTypes::AppleJson 信封 Apple Music API 返回的 JSON 信封,需取出内嵌的 TTML 文本
Spotify JSON LyricsRawTypes::Spotify 行级/逐字 Spotify Color Lyrics 接口返回的 JSON 载荷
Musixmatch JSON LyricsRawTypes::Musixmatch 行级/逐字 Musixmatch 接口返回的 JSON 载荷(含 richsync 逐字)
Lyricify Syllable LyricsRawTypes::LyricifySyllable 逐字 纯文本,行头含对齐与分边标记(如 [4]、[7])
Lyricify Lines LyricsRawTypes::LyricifyLines 行级 纯文本,行头含首尾时间戳 [开始ms,结束ms]

Note

三个信封格式(QrcFull、YrcFull、AppleJson)只能被 get_lyrics_types() 检测识别,parse() 对它们返回 None。必须先从外层结构中提取出歌词正文文本再进行解析。

生成格式

格式 类型枚举 必需数据 说明
LRC LyricsTypes::Lrc 行开始时间 任何同步类型均可降级导出;逐字数据会丢失音节时间
QRC LyricsTypes::Qrc 音节级数据 输出 QQ 音乐逐字格式;行时长取自 LineInfo 的首尾时间
KRC LyricsTypes::Krc 音节级数据 输出未加密的酷狗逐字文本
YRC LyricsTypes::Yrc 音节级数据 输出网易云逐字格式,行时长取自 LineInfo 的首尾时间
Lyricify Syllable LyricsTypes::LyricifySyllable 音节级数据 输出 Lyricify 逐音节文本,保留主行与子行对齐码
Lyricify Lines LyricsTypes::LyricifyLines 行开始与结束时间 要求行必须同时具备开始时间和结束时间

格式特征详解

LRC

行级同步格式,每行仅记录该行的开始时间。

[ti:Song Title]
[ar:Artist Name]
[al:Album Name]
[00:12.00]Hello World
[00:15.50]Second line
  • 同步粒度:LineSynced
  • 支持标准头部标签:[ti:]、[ar:]、[al:]、[by:]、[offset:] 等
  • 时间格式:[mm:ss.xx] 或 [mm:ss.xxx]

QRC

QQ 音乐逐字歌词格式。行头给出整行的绝对开始时间与持续时长,行内每个音节紧跟其绝对开始时间与持续时长。

[0,4390]Stop(0,274) (274,274)And(548,274) (822,274)Stare(1096,274)
[4390,4390]Lyrics(4390,190) (4580,190)by(4770,190)
  • 同步粒度:SyllableSynced
  • 行头语法:[行开始时间ms,行持续时长ms]
  • 音节语法:文本(开始时间ms,持续时长ms)(绝对毫秒时间轴,非相对偏移)
  • 行头的持续时长被记录为 LineInfo 自身的结束时间,与最后一个音节的结束时间相互独立。末个音节唱完并不代表整行消失。
  • 若括号内不是合法的 数字,数字,解析器会将其作为正文文本处理,并归入紧随其后的音节。
  • 从 QQ 音乐网络接口直接获取的内容为十六进制密文,需经 decrypt_qrc() 解密后才可解析。

KRC

酷狗音乐逐字格式,原始文件为二进制加密格式。

  • 同步粒度:SyllableSynced
  • 行头语法:[行开始ms,行持续时长ms]
  • 音节语法:<相对行首的开始ms,时长ms,0>文本
  • 行头时长记录为行自身的结束时间;若行头缺失时长,则回退到末个音节的结束时间。
  • 原始文件解密流程:Base64 解码 → 跳过前 4 字节魔数头(krc1)→ 与固定 16 字节密钥逐字节循环异或 → zlib 解压 → 去除正文开头的 UTF-8 BOM(若存在)→ UTF-8 解码。

YRC

网易云音乐逐字格式,允许在正文中混排 JSON 元数据行。

{"t":0,"c":[{"tx":"作词: "},{"tx":"Ryan Tedder"}]}
[420,4440](420,1320,0)Lately(1740,0,0), (1740,570,0)I've (2310,600,0)been
  • 同步粒度:SyllableSynced
  • 开头的 {"t":...} 为元数据行,不会作为歌词行放入 lines
  • 逐字行语法:[行开始ms,行时长ms](音节开始ms,音节时长ms,0)文本...(绝对毫秒)

TTML

W3C Timed Text Markup Language,基于 XML,Apple Music 与社区歌词库 AMLL TTML DB 均采用此格式。

  • 同步粒度:SyllableSynced 或 LineSynced
  • 使用 <p> 表示歌词行,<span> 表示音节
  • 翻译与注音支持:
    • Apple Music 风格:位于 <head> 下的 <itunes:translation>
    • AMLL 行内风格:<p> 内部的 <span ttm:role="x-translation" xml:lang="..."> 解析为该行的翻译;<span ttm:role="x-roman"> 解析为注音(pronunciation);若位于 ttm:role="x-bg" 内则解析为背景和声子行的翻译或注音。两处均有翻译时,<head> 优先。

Lyricify Syllable

Lyricify 专用的逐字格式,行头包含对唱分边及对齐控制码。

[4]Hate (14872,393)to (15265,190)give (15455,262)
[7](How (93600,114)do (93714,208)you (93922,176)lie,
  • 同步粒度:SyllableSynced
  • 行语法:[对齐码]文本(开始ms,时长ms)...(绝对毫秒)
  • 对齐码:3 = 未指定,4 = 左对齐,5 = 右对齐;子行(背景和声)对齐码在主行基础上偏移 +3(例如主行 [4] 对应子行 [7])

Lyricify Lines

Lyricify 专用的逐行格式,每行必须记录明确的起止时间。

[0,1000]Hello World
[1000,2500]Second line
  • 同步粒度:LineSynced
  • 行语法:[开始ms,结束ms]文本

格式转换矩阵

实测转换矩阵(- 表示 generate_string 返回 None):

输入 \ 目标输出 LRC QRC KRC YRC Lyricify Syllable Lyricify Lines
LRC(行级,无结束时间) ✓ - - - - -
Lyricify Lines(行级,有结束时间) ✓ - - - - ✓
Spotify 逐行 ✓ - - - - -
QRC ✓ ✓ ✓ ✓ ✓ ✓
KRC ✓ ✓ ✓ ✓ ✓ ✓
YRC ✓ ✓ ✓ ✓ ✓ ✓
TTML(逐字) ✓ ✓ ✓ ✓ ✓ ✓
Spotify(逐字) ✓ ✓ ✓ ✓ ✓ ✓
Musixmatch(richsync 逐字) ✓ ✓ ✓ ✓ ✓ ✓
Lyricify Syllable ✓ ✓ ✓ ✓ ✓ ✓

转换规则:

  • QRC / KRC / YRC / Lyricify Syllable 生成器只输出音节级歌词行;若输入缺少音节数据,生成结果为空,函数返回 None。
  • Lyricify Lines 要求每行必须同时具备开始与结束时间;标准 LRC 只有行开始时间,因此 LRC 无法转换为 Lyricify Lines。
  • LRC 生成器只需要开始时间,任何输入格式均可降级导出为 LRC。

Clone this wiki locally