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

What is video timescale, timebase, or timestamp in ffmpeg?

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

现代容器使用时间戳而不是帧速率来控制视频(和音频)帧呈现的时间分量。因此,他们不是将视频录制为 25 fps,从而暗示每一帧应该相隔 0.04 秒,而是为每一帧存储一个时间戳,例如

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

为了精确解析这些时间值,使用时基,即表示时钟的一个滴答声的时间单位。因此,1/75 的时基表示 1/75 秒。 Presentation TimeStamps 然后根据这个时基来命名。时标只是时基的倒数。 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
   ...

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