歌词是歌曲中的文字。在元数据中,Lyrics 字段会把这些文字作为文本保存在音频或视频文件内部。来自 ffprobe 的报告中也可以显示一个 Lyrics 标志位。
ID3v2 标准把这个文本字段描述为歌曲的歌词,或其他声乐内容的文字转写。文本与声音分开存储,所以你只能用能读取该字段的软件来查看它。
哪些文件携带它
每种文件格式都用自己的字段名来存储歌词。常见格式中使用的名称如下:
- MP3:ID3v2 帧
USLT表示普通文本,SYLT表示带时间轴的文本。 - WAV 和 AIFF:如果文件包含 ID3 标签,则使用相同的 ID3v2 帧。
- FLAC 和 OGG:使用 Vorbis 注释。MusicBrainz Picard 把它命名为
LYRICS,但没有规范固定这个名称。 - M4A 和 MP4:使用元数据项
©lyr。 - MKV:使用 Matroska 标签
LYRICS。 - WMA 和 WMV:使用属性
WM/Lyrics和WM/Lyrics_Synchronised。
纯文本歌词和同步歌词
普通歌词是一整块没有时间信息的文本。同步歌词会把每段文本与录音中的具体时间点关联起来。这样软件就能按声音进度显示歌词,例如用于卡拉 OK。
在 ID3v2 的 SYLT 帧中,每段文本都有一个时间戳。时间戳从文件开头开始计数,单位为毫秒或 MPEG 帧数。
该数值的格式
普通值就是常规文本,文本中可以包含换行。对于同步文本,ExifTool 会在每条记录前用方括号加上时间戳:以秒计时使用 [MM:SS.ss],以 MPEG 帧计时使用 [FFFF]。
一个文件可以包含多种语言的歌词。在 ID3v2 中,每个 USLT 或 SYLT 帧都有一个遵循 ISO 639-2 的 3 字母语言字段。例如:
eng表示英语deu或ger表示德语- 语言未知时使用
XXX,正如 ID3v2 文本所述
对于没有描述的 ID3v2 USLT 帧,FFmpeg 会把语言代码加在键名后面,例如 lyrics-eng 表示英文文本。对于未知语言,FFmpeg 9.0 显示 lyrics-XXX,其开发版代码则只显示 lyrics。ExifTool 对选定语言也使用同样的模式,例如 Lyrics-eng。
作为流标志的歌词
在 FFmpeg 项目的文件读取器 ffprobe 的报告中,Lyrics 也可以是一个流标志,值为 0 或 1。FFmpeg 用几句话对它进行说明:该流包含歌曲歌词。这个标志本身不存储任何文字。
ffprobe 读取器的 -show_streams 选项会为每个流输出这个标志,位置在 Karaoke 标志旁边。所以在一个没有音乐的文件中,你也可能看到 0。出现 0 并不能证明文件中一定没有歌词文本。
文本来自哪里
Lyrics 文本本身不是从声音中提取出来的,必须由人或程序手动添加。
标签软件可以写入这个字段。MusicBrainz Picard 需要插件或脚本才能添加歌词文本,因为它的数据库本身不包含歌词。
在转换过程中可以把文本带入新文件。FFmpeg 默认会从第一个输入文件复制全局元数据。因此,转换后的文件可以保留源文件中的 Lyrics 文本,即使你从未自己为该文件添加过标签。
这对你的文件有何影响
Lyrics 文本字段可以保存整首歌的完整歌词。你在分享文件时,也会一并分享这段文本,即使播放器从不显示它。
缺少文本字段并不能说明这首歌的任何情况。一首有歌词的歌也可能没有 Lyrics 文本。而文本内容也可能与你实际听到的不同。
一个文件可以包含多个 Lyrics 值,例如普通文本和同步文本,或者两种语言的文本。在 Matroska 文件中,LYRICS 标签还可能与字幕轨道内容重复。规范建议你通常应同时编辑这两处。