在 ffmpeg 中什么是视频时间刻度、时间基准或时间戳?

网上似乎没有任何关于这些是什么的解释。人们经常谈论他们。我只想知道它们是什么,为什么它们如此重要。使用-video _ track _ timescale,如何确定它的数字?是随机的吗?应该是0吗?

40031 次浏览

现代容器使用时间戳而不是帧率来控制视频(和音频)帧表示的时间分量。因此,它们不是将视频记录为25fps,这意味着每帧应该相隔0.04秒绘制,而是为每帧存储一个时间戳,例如。

 Frame      pts_time
0          0.00
1          0.04
2          0.08
3          0.12
...

为了精确地分辨这些时间值,我们使用了一个时间基准,也就是一个时间单位,可以说代表了一个时钟的一个刻度。所以,1/75的时基表示1/75秒。然后,P表示 Time是的tamps 按照这个时间基来命名。时间刻度仅仅是时间基准的倒数。FFmpeg 在流的读出中将时间刻度显示为 tbn值。

Timebase = 1/75; Timescale = 75
Frame        pts           pts_time
0          0          0 x 1/75 = 0.00
1          3          3 x 1/75 = 0.04
2          6          6 x 1/75 = 0.08
3          9          9 x 1/75 = 0.12
...

这种调节时间的方法允许可变帧率的视频。