1. 时间基(Time Base)概念
时间基,即Time Base,是用于衡量时间的单位,在多媒体编程中被广泛使用。对于FFmpeg,它主要用于描述帧率、持续时间和时间戳等概念。简单地说,时间基是一种将数值时间戳转化为真实时间(秒)的方式。
2.Timebase的选择
timebase时间基是时间的单位。很多时候我们说时间戳,既包含时间戳的数值,也隐含了时间的单位timebase,没有timebase的PTS是不完整的。一些媒体处理框架预设了固定的时间单位,另一些媒体处理框架要求用户指定时间单位,并且不同环节用不同时间单位,时间单位和时间戳的数值字段分离,搞不清PTS/DTS和哪里的timebase对应,由此衍生的复杂性,是很多同学搞不清timebase的原因。但归根结底,timebase仅仅是时间的单位。
timebase可以用分数形式表达:num/den seconds
。毫秒、微秒用分数形式表示的timebase是1/1000 seconds
、1/1000000 seconds
。pts * timebase
是以秒为单位的时间。除了毫秒微秒,视频里经常用的timebase是1/90000
。90000是常用视频帧率的整数倍,例如:
-
90000 / 24 = 3750
-
90000 / 30 = 3000
-
90000 / (30 * 1000 / 1001) = 3003
注意帧率30 * 1000 / 1001,常说的29.