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

Ple*_*elp 33 video ffmpeg codec

网上似乎没有任何解释.人们谈论他们很多.我只是想知道它们是什么以及为什么它们具有重要意义.使用-video_track_timescale,我该如何确定它的数字?是随机的吗?应该是0吗?

Gya*_*yan 70

现代容器使用时间戳来管理视频(和音频)帧的呈现时间部分,而不是帧速率.因此,不是将视频记录为25 fps,因此暗示每​​帧应该相隔0.04秒绘制,它们为每个帧存储时间戳,例如

 Frame      pts_time
   0          0.00
   1          0.04
   2          0.08
   3          0.12
   ...
Run Code Online (Sandbox Code Playgroud)

为了精确地分辨这些时间值,使用时基,即表示时钟的一个刻度的时间单位.所以,时基1/75代表1/75秒.的P resentation Ť IME 小号捣棒然后在这个时基而言计价.时间刻度只是时基的倒数.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
   ...
Run Code Online (Sandbox Code Playgroud)

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

  • 通常使用90,000作为计算公共基数的原因是它是一个可被24,25和30整除的数字(在每种情况下结果都是整数 - 没有余数,小数或分数因此,数学同样适用于处理24帧/秒,25帧/秒和30帧/秒. (12认同)
  • @ Ed999 90000 是 24、25 和 30 的整数倍是正确的,但这不是原因。600 足以达到这个目的,Quicktime 编写者通常使用该值作为时间刻度。 (5认同)
  • 27 兆赫 / 300 = 90000 赫兹。 (4认同)
  • "*为了符号方便,出现 PCR、PTS 或 DTS 的方程导致时间值精确到 (300 × 2^33/system_clock_frequency) 秒的整数倍。这是由于 PCR 计时的编码信息为系统时钟频率的 1/300 的 33 位加上余数的 9 位,编码为系统时钟频率的 33 位除以 PTS 和 DTS 的 300。*” (3认同)
  • 时基可以是至少尊重FPS的任何数字,即25 fps时基应至少为1/25。如果为1/15,则根据多路复用器,ffmpeg将丢弃帧或将输出帧速率更改为15。帧速率可以是小数,因此是有理数。时基是合理的,因为它们代表了不到一秒的时间。 (2认同)
  • 对于使用此时基的 MPEG-TS,H.222 标准规定:“*系统时钟频率的值以 Hz 为单位进行测量,并应满足以下约束:27 000 000 – 810 ≤ system_clock_Frequency ≤ 27 000 000 + 810*”及以后,。 (2认同)
  • 刚刚跨过这个,想添加一个链接,指向从数学角度在 15 分钟内回答的相关问题:/sf/ask/3298196891/ -点帧描述完整数字?rq=1 (2认同)