ffmpeg 的视频输出流细节是什么意思?

Nil*_*zor 10 linux ffmpeg

当您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

次要问题:为什么不总是显示比特率?

slh*_*hck 6

您看到的是 FFmpeg 和编码器/解码器中使用的时间戳基的倒数。我无法更好地解释它,因此只引用 FFmpeg 邮件列表

我认为 tbn 是来自容器的AVStream中的时基。它用于所有 AVStream 时间戳。

tbc是 AVCodecContext 中用于特定流的编解码器的时基。它用于所有 AVCodecContext 和相关时间戳。

tbr是从视频流中猜测出来的,是用户在寻找视频帧速率时希望看到的值,但有时由于场速率与帧速率的关系,它是人们期望的两倍。

最后,您希望将tbr作为值,人们通常将其称为“帧率”。

比特率并不总是显示,因为视频流可能包含可变比特率内容 - 在这种情况下,您无法真正估计比特率。对于恒定比特率的流,通常会显示比特率。在某些情况下,使用可变比特率并且 FFmpeg 显示平均值——至少对于 h.264 视频,这有时是有效的。

Video: h264, yuv420p, 640x480, 22050 tbr, 22050 tbn, 44100 tbc 显然,似乎更像是音频流。