ffmpeg/ffprobe 中的持续比特率和流比特率有什么区别?

What is the difference of duration bitrate and stream bitrate in ffmpeg/ffprobe?

为什么 ffmpeg / ffprobe 为流和整个文件提供不同的比特率值?

当我使用 ffprobe 分析 mp3 文件时,它在第一行和第二行给出了不同的比特率。 有谁知道,有什么区别?

// File 1, there is problem
Duration: 02:05:47.04, start: 0.000000, bitrate: 193 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s

// File 2, no problem
Duration: 02:05:51.05, start: 0.000000, bitrate: 192 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s

(我需要获取有关文件的正确信息,因为我处理这些文件以进行指纹识别)

如果您想要音频流的实际比特率,则需要对其进行解析。

ffmpeg -i file -c copy -map 0:a -f null -

记下最后一行的音频流大小,例如audio:8624kB 及其上方一行的持续时间,例如time=00:03:43.16。将第一个除以第二个得到流的平均比特率。

如果您想要名义比特率,即为编码器设置的目标,那么它就是流的读数。

格式比特率,即 start: 旁边的比特率,是粗略的,只是将文件大小除以持续时间。但这包括所有流和 headers。对于单视频+单音频的文件有用,但对其他文件无效。