词典

什么是卡拉OK?

卡拉OK是指在阅读屏幕上的歌词时,伴随录制好的音乐进行现场演唱。在媒体文件中,Karaoke 是一个标志,用来标记某个流是卡拉OK音频。

karaoke

卡拉OK是一种音乐系统,会播放一首流行歌曲的伴奏录音。表演者现场演唱这首歌,通常跟着视频屏幕上的歌词唱。“卡拉OK”这个词本身也可以指这种表演。

这个日语词由表示“空”的 kara 和“管弦乐队”一词的缩写组合而成。所以 karaoke 的字面意思是“空的管弦乐队”。

在元数据报告中,Karaoke 是一个含义更窄的字段。这个名称来自 FFmpeg 项目的文件读取程序 ffprobe。

FFmpeg 将一个文件的每个部分列为单独的流。每个流都有一组称为 disposition 的标志,比如 Karaoke 和Attached Pic。FFmpeg 文档用几句话定义了这个标志:该流包含卡拉OK音频。

数值的呈现方式

ffprobe 读取程序的 -show_streams 选项会为每个流打印这个标志,即使文件里没有音乐。在该输出中,这个标志有两个取值:

  • 0: 标志为关闭状态
  • 1: 标志为开启状态,因此该流被标记为卡拉OK音频

具体形式取决于报告类型。JSON 报告显示 "karaoke": 0,纯文本报告显示 DISPOSITION:karaoke=0。

哪些文件携带它

FFmpeg 在某些格式中读取和写入这个标志,在另一些格式中则不会,如下示例所示:

  • NUT: 流可以在名为 Disposition 的标签中存储单词 karaoke
  • MKV: Matroska 规范有诸如 default、forced 和 commentary 等标志,但没有 karaoke 标志
  • MP4: FFmpeg 的 MP4 轨道角色列表中没有 karaoke 条目
  • AC-3 和 E-AC-3 音频: 音频数据有一个“服务类型”,其中一个取值表示卡拉OK

当音频有两个或更多声道时,FFmpeg 会把卡拉OK服务类型转换成该标志,即使是在 MKV 或 MP4 文件中也是如此。对于其他音频格式,MKV 或 MP4 文件中的流通常会报告 0,即便这首歌是卡拉OK版本。

有些卡拉OK歌曲使用自己的文件类型。美国国会图书馆列出了卡拉OK MIDI 文件的扩展名 kar。

歌曲歌词存储的位置

Karaoke 标志本身不包含文字,只包含数字 0 或 1。FFmpeg 另有一个 Lyrics 标志,用于标记含有歌词的流。歌词文本本身在每种格式中存放的位置不同:

  • MP3: ID3v2 帧 USLT 存放不带时间轴的歌词,帧 SYLT 为每个音节或文本单元存储时间戳
  • MKV: 当没有时间信息,或作为字幕轨道的副本时,使用 LYRICS 标签存放歌词文本

数值的来源

FFmpeg 在创建每个流时,或在之后检查该流时设置这些标志。对于 NUT 文件,FFmpeg 从 Disposition 标签中读取标志。对于 AC-3 音频,FFmpeg 从音频数据中读取服务类型。

使用 FFmpeg 选项 -disposition,你可以自己设置这个标志。默认情况下,FFmpeg 会把标志从输入流复制到输出流。

只有封装格式本身保存的标志,只有在新格式也能存储它时,才会写入新文件。MKV 的 FFmpeg 写入器没有处理这个标志的代码。

它的重要性

一个文件可以包含多个音频流,这个标志可以将其中某个流标记为卡拉OK音频。在 FFmpeg 命令中,流选择器 disp:karaoke 会选出带有该标志的流。

这个标志只是一个标签,所以不能证明你听到的内容。值为 0 并不能证明这首歌没有卡拉OK版本或没有歌词。