浅析LRC歌词文件

您所在的位置:网站首页 歌词作词的格式 浅析LRC歌词文件

浅析LRC歌词文件

2024-06-27 06:39| 来源: 网络整理| 查看: 265

[时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式]

0 引言

几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放器,比如酷狗、酷我、千千静听等,下载mp3时总会附带下载一个同名但以lrc为后缀的文本文件,在早几年你可能还会遇到当时iPod的前身mp3播放器。这个lrc文件的格式就是本文的主题。

lrc是英文lyric(歌词)的缩写,被用做歌词文件的扩展名。以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示。大部分MP3显示歌词的方法使用的是lrc格式的歌词文件,也是当前网络上最流行的一种歌词格式。

本文的主要内容将包括:

LRC文件格式 音乐播放器之歌词播放 ffplay中渲染歌词 1 LRC文件格式

LRC文件是一种基于文本的格式,和外挂的字幕流(subtitle)类似。通常有三种格式:

1.1 简装版

这是最常见的一种LRC格式。该格式通常显示一整行歌词。 LRC中有两类元素:一种是时间标签+歌词,一种是ID标签。 时间标签的格式是[mm:ss.xx],其中mm是分钟数,ss是秒数,xx是10ms数(注意这里都是两位数,超出可能会被认为是格式错误)。 我们在很多歌词文件中看到的格式如下:

[00:25.44]自从你离开我 [00:31.14]我不知道这些心里话还能向谁说 [00:40.12]就像是童话 王国里走来的人 [00:47.80]在我的世界 悄悄的走近又悄悄的走远 [01:02.81]你是黑暗之中唯一的星光

ID标签通常出现在歌词行之前,有些播放器会忽略ID标签,不做任何解析。通常的支持的ID如下:

[al:专辑名] [ar:歌手名] [au:歌词作者-作曲家] [by:此LRC文件的创建者] [offset:+/- 时间补偿值,以毫秒为单位,正值表示加快,负值表示延后] [re:创建此LRC文件的播放器或编辑器] [ti:歌词(歌曲)的标题] [ve:程序的版本]

举个例子

[ti:最美的意外] [ar:林凡] [al:眼泪流回去] [by:tocy] [offset:0] 1.2 扩展简装版

这个版本仅在Walasoft的Walaoke(一个卡啦OK媒体播放器)上可用。此版本可使用以下标签设置歌词的性别:M: 男性, F: 女性, D: 合唱。

例如:

[00:12.00]只要有你 [00:17.20]F: 谁能告诉我,有没有这样的笔 [00:21.10]M: 如果是这样,我可以安慰自己 [00:24.00](...背景音乐...) [00:28.25]D: 生命中只要有你,什么都变了可以 [00:29.02]所有永恒承诺

我们假设男性为蓝色,女性为红色,合唱为粉色。 第一行使用默认色(蓝色),因为没有找到标签。第二行歌词以红色开始,因为找到了F:。 第三行歌词以蓝色开始,因为找到了M:。 第四行歌词以蓝色开始,因为没有找到标签。 第五行歌词以粉色开始,因为找到了D:。 第六行歌词与第五行相同,为粉色,因为没有找到标签。

1.3 增强版

增强LRC格式是LRC简装版格式的扩展,由A2 Media Player所开发。它增加了一个额外的时间标签,格式为:。用于表示一行歌词中不同词显示的时间。

增强LRC格式文件的示例如下:

[mm:ss.xx] line 1 word 1 line 1 word 2 ... line 1 last word [mm:ss.xx] line 2 word 1 line 2 word 2 ... line 2 last word ... [mm:ss.xx] last line word 1 last line word 2 ... last line last word 2 歌词播放简述

在了解LRC文件格式以后,我们可以从格式描述中看出,每一行歌词都有一个时间戳,我们可以通过这个时间戳实现与音频文件的同步播放。 比如下面歌词:

[00:02.05]愿得一人心 [00:08.64]词:胡小健 曲:罗俊霖 [00:11.14]演唱: 李行亮,雨宗林 [00:24.93] [00:27.48]曾在我背包小小夹层里的那个人 [00:32.31]陪伴我漂洋过海经过每一段旅程 [00:37.38]隐形的稻草人 守护我的天真 [00:42.43]曾以为爱情能让未来只为一个人 [00:47.50]关了灯依旧在书桌角落的那个人 [00:52.68]变成我许多年来纪念爱情的标本 [00:57.57]消失的那个人 回不去的青春 [01:02.69]忘不了爱过的人才会对过往认真 [01:09.71]只愿得一人心 白首不分离 [01:14.71]这简单的话语 需要巨大的勇气 [01:19.73]没想过失去你 却是在骗自己 [01:25.34]最后你深深藏在我的歌声里

在对应的mp3文件播放到2.05秒时需要显示愿得一人心,这行歌词将持续到8.64秒,然后显示词:胡小健 曲:罗俊霖,这行歌词将持续到11.14s,然后显示演唱: 李行亮,雨宗林,……,以此类推,直到歌曲播放完成。

上面是基本显示逻辑,每次仅显示一行,当然,你可以选择实现滚屏模式,仅需要在代码上控制下具体显示歌词行数及刷新时间即可。

当然实现文本渲染需要依赖于特定的平台,比如windows下的mfc控件、d3d font、directdraw Text等等。

3 ffplay中渲染歌词

ffplay本身并不支持LRC歌词的直接渲染,需要通过subtitlesfilter来实现。对应的命令行如下:

./ffplay.exe -i -vf subtitles=base/zuimei.lyric -i zuimei.mp3 -x 800 -y 600

更多详细介绍建议参考FFmpeg官方文档-subtitles filter。

4 小结

本文简单整理了LRC歌词的格式,并对音乐播放器歌词显示逻辑做了简要概述。可供后续参考。

5 参考资料 wiki-LRC ffmpeg-doc


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3