为什么容器和编解码器有不同的时基?

时间:2012-11-28 13:26:50

标签: video ffmpeg pts

我用ffmpeg来获取视频信息。输出是

  Duration: 00:05:57.00, start: 0.000000, bitrate: 611 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 808x610, 609 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc

时基用于某种方式(这也是我的另一个问题)计算何时解码并显示框架,对吧?那么使用它的时基,容器(12800)还是编解码器(50)?

另一个问题是为什么tbn = 12800而不是90000?

1 个答案:

答案 0 :(得分:6)

两者都是正确的,两者都不同

tbn是编码器创建流的功能。所以对于一个10 fps的流,它可以是90000,这意味着每秒90000个滴答,每帧给你9000个滴答。它也可以简单地为10,这意味着每帧1个滴答(对于相同的10 fps流)。   90000常用于流媒体级别(想到ts流),但编码器不受此限制。这个(tbn)是解码器将使用的东西,而不是使用容器数据的应用程序系统。

如果您有容器,则应使用容器时基和时间戳,因为它在容器中的所有流中进行了规范化。您将在编解码器解码器中使用tbn之类的参数。