词典

什么是歌词?

歌词字段会将一首歌的歌词作为文本存储在音频或视频文件内部,在某些格式中还会带有语言代码。在 ffprobe 中,Lyrics 也可以是一个 0 或 1 的标志。

lyrics

歌词是歌曲中的文字。在元数据中,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 标签还可能与字幕轨道内容重复。规范建议你通常应同时编辑这两处。