返回博客列表

LRC 歌词文件怎么制作 — 3 种方法与格式说明

Lacuna.fm Research Team
LRC 歌词文件怎么制作 — 3 种方法与格式说明

LRC 文件是一种纯文本文件,每一行歌词都以时间戳开头。把它存成与音频文件相同的名字,放进同一个文件夹,支持 LRC 的播放器就会在歌曲播放到某一行时高亮这一行。

制作方法有三种:在文本编辑器里手动输入时间戳,在浏览器工具里跟着歌曲按键打点,或者让软件把歌词自动对齐到音频。用哪一种取决于你手里有什么。已经有歌词、只需要逐行时间轴时,用打点工具把歌完整播放一遍就够了。需要逐字时间轴,或者手头没有歌词文本时,自动对齐是更实际的做法:在我们的测试中,它的词起始时间误差中位数为 36 到 69 毫秒。无论用哪种方法,播放器找得到文件,歌词才会显示,这一点在最后两节说明。

LRC 文件格式:LRC 文件里写了什么

一个最简单的文件是这样的:

[ti:Paper Boats]
[ar:Example Artist]

[00:12.00]Paper boats on a morning tide
[00:15.30]Carry what I could not say
[00:19.84]
[00:41.20][01:32.60]Let it go, let it go

文件里有四种行:

  • 时间标签。 标准写法是 [mm:ss.xx]:分、秒和百分之一秒。标签标记的是这一行开始的时间。LRC 没有结束时间,一行歌词会一直显示到下一行开始。
  • ID 标签。 写在文件开头的可选元数据,格式为 [type:value]。常见的有 ti(歌名)、ar(歌手)、al(专辑)、by(LRC 文件制作者)和 offset。播放器通常把它们当作元数据读取或直接忽略,所以它们不会作为歌词行显示。
  • 重复的行。 唱了不止一次的歌词,比如副歌,可以带多个时间标签,上面示例的最后一行就是这样。
  • 空行。 只有时间标签、没有文字的行会清空显示,适合用在间奏处。

解析器实际比定义宽松。FFmpeg 的 LRC 读取器接受任意位数的小数,所以三位的毫秒通常也能用。写入 LRC 的工具仍默认使用两位小数,这是稳妥的选择。

LRC 没有正式规范,也没有规定编码。歌词不是英文时,UTF-8 是实际可行的选择,索尼 Walkman 的帮助指南则明确要求使用 UTF-8。

现成的 LRC 文件去哪里下载

已经发行的歌曲,往往可以直接下载做好的 LRC 文件,不必自己制作。LRCLIB 是一个免费的、由用户共同贡献的同步歌词库,它的桌面客户端 LRCGET 会扫描音乐文件夹,在每首歌旁边保存一个匹配的 .lrc 文件。

能否匹配取决于具体的录音版本。LRCLIB 的 API 文档写明,客户端按歌名、歌手和时长查询一首歌时,只有时长与库中记录相差在 ±2 秒以内才会返回歌词。Apple 在歌词交付指南里也向唱片公司作了同样的提醒:“同一首歌的不同版本,时间同步会不一样。”

自己创作或生成的歌曲、翻唱、现场版、混音版,或者前奏与专辑版不同的剪辑版,就需要自己制作文件。

制作 LRC 文件的三种方法

方法需要准备什么工作量逐字时间轴
文本编辑器歌词,以及能显示百分之一秒的播放器每一行都要暂停再输入可以做,但很慢
浏览器里的打点工具文本形式的歌词按原速完整播放一遍,再加上修正取决于工具
自动对齐音频文件;歌词可选上传,然后检查支持

方法一:在文本编辑器里手写时间戳

把歌词粘贴到任意纯文本编辑器里,一句歌词占一行。用能显示秒以下时间的播放器播放歌曲,在每一行开始的位置暂停,把时间写在这一行前面。保存时使用 .lrc 扩展名和 UTF-8 编码。

这种方法不需要额外工具,也是三种方法里最慢的,因为每一行都要停下来。

方法二:在浏览器工具里跟着歌曲打点

打点工具会播放歌曲,你每按一次键,它就写入一个时间戳。Akari's LRC Maker 是开源工具,在浏览器里运行:把音频文件拖到页面上,用方向键选中一行,按空格键打上时间。lrcgenerator.com 的做法相同,用的是一个 “Next Line / Next Word” 按钮,并提供逐字模式。

开始之前仍然需要有文本形式的歌词,时间准不准也完全取决于你的反应速度。逐行同步把歌播放一遍即可。靠按键做逐字同步,则意味着在原速播放下每个词按一次键。

方法三:让歌词自动对齐到音频

自动工具会分析录音并计算时间戳。Lacuna LRC 生成器有两种用法:

  1. 粘贴你的歌词(纯文本转 LRC)。 如果已经有纯文本歌词,这就是把它转成 LRC 的方法:工具完整保留你的文本和断句,只计算时间。只要手里有歌词,就用这种方式。
  2. 歌词框留空。 工具会先转写人声,再对转写结果做对齐。

两种用法下,工具都会先把人声从伴奏中分离出来再对齐,并给每个词一个独立的起始时间。上传格式支持 MP3、WAV、FLAC、M4A 和 OGG,最大 10 MB,最长 10 分钟。支持十种语言:英语、中文、日语、韩语、西班牙语、葡萄牙语、法语、德语、意大利语和俄语。

Lacuna LRC 生成器的编辑器,上方是波形,下方是带时间的歌词行,第一行显示时间调整控件
结果会在编辑器中打开,编辑器播放歌曲并高亮当前行,导出前可以先用耳朵核对时间。

在编辑器里,可以把一行前后移动 0.1 秒、把它对齐到播放头、把单个词微调 50 毫秒、拆分或合并行,以及改掉听错的词。导出选项有 LRC、逐字 LRC、SRT、VTT 和纯文本。

使用这个工具需要登录,目前每首歌消耗 50 积分。查看、播放和编辑在任何套餐下都可用,下载或复制成品文件属于付费套餐。当前的具体规则以页面显示为准。

自动对齐有多准

选定对齐方案时,我们用 8 种语言的 10 首歌做了测试,把它给出的时间戳与每首歌附带的参考时间作比较。其中九首可以评估时间精度;一首快节奏英文说唱的参考时间只覆盖了歌曲的一部分。

36–69 ms
词起始时间误差中位数
4 首带词级参考时间的歌曲
3–17%
的词偏差超过 200 毫秒
同样的 4 首歌曲
2.35%
的歌词被漏掉或听错
10 首歌曲,未提供歌词

带词级参考时间的四首歌分别是英语、葡萄牙语、法语和德语。转写这项数字统计的是书面歌词中被漏掉或听错的词,按词计算,中文、日语和韩语按字计算。十首歌中有四首的转写没有出现这类错误。多出来的词不计入:录音里重复了副歌,还加入了书面歌词中没有的即兴演唱。

这些数字有其局限。所有测试歌曲都是 AI 生成的,参考时间本身也由机器生成,每种语言只有一到两首歌。我们还没有在商业发行的真人演唱录音上做过同样的测试。

误差最大的是一首有很多长音的慢速日语抒情歌:行起始时间误差中位数为 210 毫秒,按行而非按词测量。一个词跨越多个音符时,对齐容易漂移,这些行值得在编辑器里重点检查。200 毫秒的误差在逐行显示时不易察觉,在逐字高亮时则很容易看出来。

标准 LRC 与增强版 LRC(逐字)的区别

增强版 LRC 是在标准 LRC 的基础上,在每个词前面再加一个写在尖括号里的时间标签,播放器可以据此逐字高亮歌词:

[00:12.00]<00:12.00>Paper <00:12.41>boats <00:12.90>on <00:13.05>a <00:13.20>morning <00:13.78>tide <00:14.60>

这个变体同样没有正式规范,公开的示例在空格等细节上并不一致。上面这一行是 Lacuna 导出时的写法。

播放器对它的支持比标准 LRC 窄。kid3 手册在谈到嵌入 MP3 标签的同步歌词时指出,“大多数播放器只支持到行或句子的粒度”,LRC 文件的情况也是如此。在我们查过的播放器中,Symfonium 有卡拉 OK 模式,Rockbox 会解析逐字标签,而 foobar2000 的 OpenLyrics 里,逐字显示仍是一项尚未实现的功能请求。如果不确定你的播放器怎样处理逐字标签,就把标准文件也导出一份。

用在哪里,决定了导出什么格式:

你想要导出
在音乐播放器或媒体服务器上逐行显示歌词标准 LRC
在支持的播放器上逐字高亮增强版(逐字)LRC
在视频剪辑软件或 YouTube 上用作字幕SRT
给网页视频或音频播放器用的字幕VTT

LRC 文件怎么打开:在音乐播放器里显示歌词

LRC 文件是纯文本,任何文本编辑器都能打开它来查看或编辑。要让歌词随音乐滚动,需要用支持 LRC 的播放器播放这首歌。在几乎所有这类播放器里,.lrc 文件都必须与音频放在同一个文件夹,并且除扩展名外文件名相同:Paper Boats.mp3 对应 Paper Boats.lrc。

播放器读取同名 .lrc 文件说明
Plex是不支持嵌入标签的歌词
Jellyfin是也接受 .elrc 和 .txt
Navidrome是也读取内嵌歌词
MusicBee、AIMP是MusicBee 默认把歌词存在音频文件内,歌词设为外部文件时使用同名 .lrc;AIMP 需要能显示歌词的皮肤
foobar2000需要安装组件并修改设置OpenLyrics 默认在 foobar2000 的配置文件夹里查找 Artist - Title.lrc;把它的本地文件位置设为 “Same directory as the track”,并把文件名格式设为音轨的文件名
Kodi需要安装插件CU LRC Lyrics
Poweramp、Musicolet、Symfonium是三者也都读取内嵌歌词
Retro Music规则不同要求把 song - artist.lrc 放在它自己的歌词文件夹里
索尼 Walkman、FiiO、Rockbox是索尼要求 UTF-8 编码且文件不超过 512 KB;Rockbox 要求 UTF-8 文件以 .lrc8 命名,或者让它的 Encoding 设置与文件一致
VLC 3.x否.lrc 不在它加载的字幕类型之内
Apple Music否文档记载的唯一途径是在 Custom Lyrics 里输入或粘贴文本
Spotify否同步歌词通过 Musixmatch 提供

流媒体平台不接受听众提交的 LRC。Apple 从发行商那里接收的时间同步歌词是 TTML 文件,一种基于 XML 的带时间文本格式;Spotify 的同步歌词由 Musixmatch 提供,经过认证的音乐人可以在那里同步自己的歌曲。

怎么把 LRC 歌词加到 MP3 里(内嵌歌词)

把 LRC 歌词加到 MP3 有两种做法。简单的一种就是上面说的独立文件:同一个文件夹,同一个文件名。另一种是把歌词嵌入 MP3 的标签,可以避免文件改名后歌词丢失,但各家的支持并不统一。

MP3 文件用 ID3 标签存储元数据,ID3 定义了两个歌词字段,称为帧:USLT 存放不带时间的纯文本,SYLT 存放带时间戳的文本。FLAC 文件按惯例把 LRC 文本放在 LYRICS 标签里。Mp3tag 把它的 UNSYNCEDLYRICS 字段写入 USLT,不支持 SYLT;它的作者说过这是有意为之。

因此,把 LRC 文本粘贴进歌词标签,只在会把标签文本按 LRC 解析的播放器里有效。Poweramp 对任何歌词标签都这样处理,Symfonium 读取 LYRICS 标签,foobar2000 则通过 OpenLyrics 这类歌词组件实现。Plex 完全不读取内嵌歌词。如果要写入真正的 SYLT 帧,kid3 可以直接导入 LRC 文件。如果目标是在多种设备上都能用,在音频旁边放一个独立的 .lrc 文件更稳妥。

LRC 歌词不显示、不同步或乱码怎么办

歌词不显示。 逐个字符核对文件名,包括扩展名:文本编辑器可能把文件存成 song.lrc.txt 而不显示出来。然后对照上面的表格,看播放器是否需要插件或另一个文件夹。

每一行都提前或滞后同样的时间。 这份文件很可能是对着另一个版本的录音打的时间。offset 标签就是为这种情况准备的。在维基百科的定义以及 FFmpeg 和 OpenLyrics 的解析器里,正值会让歌词更早显示。并非每个播放器都有文档说明遵循这一约定,所以在编辑器里直接平移时间戳本身更可靠。

带重音符号或非拉丁字符显示为乱码。 把文件重新保存为 UTF-8。Rockbox 是表格里提到的例外。

尖括号标签被当作文字显示出来。 播放器不识别增强版 LRC。改用标准格式导出。

只有某一段漂移,其余部分正常。 长音或密集段落经过自动对齐后常出现这种情况。靠耳朵修正这几行即可,不必把整首歌重新跑一遍。

如果你有文本形式的歌词,可以把它和音频一起交给 Lacuna LRC 生成器,导出前对着歌曲核对结果。如果要用在视频而不是播放器里,同一份时间轴可以直接带到歌词视频制作工具里。