词典

什么是 NB Streams?

NB Streams 是媒体文件中的流数量。一个流是内容的一个独立部分,例如画面、声音或字幕。

nb-streams

NB Streams 是媒体文件中流的数量。NB 是 number(数量)的缩写,所以数值为 2 时表示文件包含 2 个流。字段 NB Frames 对单个流中的帧数也使用相同的缩写形式。

媒体文件是一个容器,用来存储一个或多个流以及元数据。在这个字段中,流不是在线视频或直播。一个流是内容的一部分,例如画面或声音。

什么算作一个流

这个字段来自 FFmpeg,它是一个用于读取和写入媒体文件的软件项目。FFmpeg 定义了 5 种流类型,而 NB Streams 会把它们全部计算在内:

  • video:动态画面,以及封面等静态图片
  • audio:声音,例如第二语言音轨或解说音轨
  • subtitle:给观众看的文字,例如某一种语言的字幕
  • data:不是画面、声音或字幕的其他信息
  • attachment:容器中的完整文件,例如字幕用到的字体文件

NB Streams 本身不会标明类型。要查看每个流的类型,请查看它的 Codec Type。

数值的呈现方式

这个值是一个不带单位的整数。FFmpeg 项目的文件读取器 ffprobe 会输出类似 nb_streams=3 的一行。这个数字取决于文件中包含的内容:

  • 1:只有 1 个流,例如不带图片的 FLAC 歌曲
  • 2:一个视频,包含一条画面流和一条声音流;或者一首带有一张附加图片的歌曲
  • 3 或更多:一个具有额外声音流、字幕流或附加文件的视频

每个流还有一个索引号,从 0 开始。所以一个包含 3 个流的文件,其流索引为 0、1 和 2。

文件格式可以限制流的数量和类型。比如,FFmpeg 写入 FLAC 文件时会精确写入 1 条音频流,并且可以附加图片。相对地,MKV 规范中展示的示例文件包含 7 条音频流,它把这些叫作轨道(tracks)。

哪些文件携带它

你会在 FFmpeg 能打开的音频和视频文件中看到 NB Streams,例如 MP4、MOV、AVI、MKV、MP3、FLAC 和 WAV。ffprobe 读取器也能打开图像文件。FFmpeg 通常把一张图片当作一条视频流来处理,因此 ffprobe 会输出 1。

对于某些照片,ffprobe 会输出多于 1 条流。一张 HEIC 照片可以把画面存储为分块组成的网格。FFmpeg 可以把每个分块都列为一个流,所以由 2×2 分块组成的网格至少会被计为 4 条流。

FFmpeg 没有用于 PDF、DOCX 等文档格式的读取器。所以文档通常不会报告这个字段。

数值的来源

文件本身并不包含名为 NB Streams 的字段。FFmpeg 打开文件,找到每一条流,并把它加入列表。NB Streams 就是这个列表中条目的数量。

它的重要性

NB Streams 可以让你快速检查文件包含的内容。一个值为 1 的视频文件通常缺少画面或声音中的一项。

一个高于预期的值可能表示有额外的语言音轨、字幕、图片或附加文件。播放器通常只会选择其中的一部分流进行播放,所以你在播放时可能不会注意到其他流。

在你转换文件时,这个值也可能发生变化。如果不加额外选项,ffmpeg 程序会为每种类型选择 1 条流,并跳过数据流和附件流。所以值变小可能意味着某条流已经不存在。