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 生成器有两种用法:
- 粘贴你的歌词(纯文本转 LRC)。 如果已经有纯文本歌词,这就是把它转成 LRC 的方法:工具完整保留你的文本和断句,只计算时间。只要手里有歌词,就用这种方式。
- 歌词框留空。 工具会先转写人声,再对转写结果做对齐。
两种用法下,工具都会先把人声从伴奏中分离出来再对齐,并给每个词一个独立的起始时间。上传格式支持 MP3、WAV、FLAC、M4A 和 OGG,最大 10 MB,最长 10 分钟。支持十种语言:英语、中文、日语、韩语、西班牙语、葡萄牙语、法语、德语、意大利语和俄语。

在编辑器里,可以把一行前后移动 0.1 秒、把它对齐到播放头、把单个词微调 50 毫秒、拆分或合并行,以及改掉听错的词。导出选项有 LRC、逐字 LRC、SRT、VTT 和纯文本。
使用这个工具需要登录,目前每首歌消耗 50 积分。查看、播放和编辑在任何套餐下都可用,下载或复制成品文件属于付费套餐。当前的具体规则以页面显示为准。
自动对齐有多准
选定对齐方案时,我们用 8 种语言的 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 生成器,导出前对着歌曲核对结果。如果要用在视频而不是播放器里,同一份时间轴可以直接带到歌词视频制作工具里。