词典

探测分数是什么意思?

探测分数是一个从 0 到 100 的数字。它表示 FFmpeg 对文件封装格式判断的可信度。

probe-score

探测分数表示 FFmpeg 对文件封装格式的可信度。FFmpeg 是一个读取和转换音视频文件的多媒体框架,它的程序 ffprobe 会给出这个分数。

分数是 0 到 100 的整数,分数越高,匹配越强。这个分数只描述封装格式,例如 MKV 或 MP4。分数不衡量声音或画面的质量。

数值的来源

探测分数不会存储在你的文件中。FFmpeg 每次打开文件时都会重新计算这个数值。

FFmpeg 为很多格式都内置了一个小探测器。每个探测器读取文件的开头,查找属于自己格式的特征,并返回一个分数。得分最高的格式会被选中。

FFmpeg 一开始读取 2048 字节的数据。如果没有任何格式得分高于 25,FFmpeg 会将读取量加倍并再次尝试。

默认上限是 1,048,576 字节,大约 1 MB。在最后一次尝试时,只要分数大于 0 就算通过。

如果输入报告了与某种格式匹配的 MIME 类型,该格式会额外获得 30 分,最高不超过 100。如果有两种格式并列最高分,FFmpeg 会拒绝它们两者。如果在最后一次尝试后没有任何格式剩下,FFmpeg 会停止并报错 Invalid data found when processing input。

文件扩展名如何影响评分

较高的探测分数并不能证明文件扩展名是正确的。例如,Matroska 探测器在文件头中发现已知的文档类型时会返回 100 分,而不管文件名是什么。

当某种格式有探测器时,匹配的扩展名通常只会把 0 分提升到 1 分。没有探测器的格式则依赖扩展名,匹配的扩展名会让该格式得到 50 分。要检查可疑的扩展名,可以把扩展名与 ffprobe 在分数旁边报告的格式名称进行比较。

该数值的格式

使用 -show_format 选项时,ffprobe 会在格式部分用一行输出来显示分数:probe_score=100。ffprobe 的 XML 报告中也会包含相同的数值,属性名为 probe_score。

典型值

以下示例来自 FFmpeg 9.0 的源代码。其他版本可能会给出不同的分数,例如在 FFmpeg 8.1 中,MP3 示例的分数是 51。

  • 100:包含名为 ftyp 或 moov 段的 MP4 或 MOV 文件
  • 100:具有已知文档类型的 Matroska 或 WebM 文件
  • 100:具有有效流信息的 FLAC 文件
  • 99:具有标准 RIFF 头的 WAV 文件
  • 52:在开头至少有 7 个音频帧的 MP3 文件
  • 51:以 ADTS 形式存储、在开头至少有 3 个音频帧的 AAC 文件
  • 50:没有探测器、只通过扩展名匹配到的格式的文件
  • 0:使用 -f 选项强制指定格式、因此 FFmpeg 跳过检测的文件

这对你的文件有何影响

探测分数为 25 或更低是一个预警信号,但不能证明一定有问题。此时 FFmpeg 会打印一条包含 misdetection possible 的消息,表示 FFmpeg 可能选错了格式。

分数接近 50 对 MP3 和 AAC 文件来说是正常的,因为它们的探测器返回的分数不会高于 52。所以 51 或 52 分并不意味着你的 MP3 文件有问题。

对于探测分数为 25 或更低的情况,FFmpeg 开发文档建议使用更多数据重试。-formatprobesize 选项用于设置格式探测的字节上限。-probesize 和 -analyzeduration 选项的作用不同:它们限制的是 FFmpeg 为查找流细节而读取的数据量。