当您ffmpeg -i
使用视频文件作为输入参数运行时,ffmpeg 会返回一些流类型的详细信息,如编解码器、比特率和分辨率。其他数据“tbr”、“tbn”和“tbc”是什么意思?从下面的示例中,您可以看到它们差别很大。
Stream #0.0(und): Video: h264, yuv420p, 1280x720, 25 tbr, 25 tbn, 50 tbc
Stream #0.0(eng): Video: h264, yuv420p, 640x480, 22050 tbr, 22050 tbn, 44100 tbc
Stream #0.1: Video: wmv3, yuv420p, 1280x720, 4000 kb/s, 29.97 tbr, 1k tbn, 1k tbc
第二个问题:为什么不总是显示比特率?
答案1
您看到的是 FFmpeg 和编码器/解码器中使用的时间戳基数的倒数。我无法更好地解释它,因此只是引用 FFmpeg 邮件列表:
总氮我认为是来自容器的 AVStream 中的时间基准。它用于所有 AVStream 时间戳。
待定是 AVCodecContext 中用于特定流的编解码器的时间基准。它用于所有 AVCodecContext 和相关时间戳。
待定是从视频流中猜测出来的,是用户在寻找视频帧速率时想要看到的值,但有时由于场速率与帧速率的关系,它是预期值的两倍。
最后,你想待定作为人们通常所指的“帧速率”的值。
比特率并不总是显示,因为视频流可能包含可变比特率内容——在这种情况下,您无法真正估计比特率。对于恒定比特率流,通常会显示比特率。在某些情况下,使用可变比特率,FFmpeg 显示平均值——至少对于 h.264 视频,这有时有效。
Video: h264, yuv420p, 640x480, 22050 tbr, 22050 tbn, 44100 tbc
显然,它更像是音频流。