ffmpeg中timebase理解

本文介绍了FFmpeg中关键的时间处理概念和技术,包括采样频率、time_base的作用、时间相关结构体及方法等,帮助读者理解FFmpeg如何处理时间戳、持续时间及不同时间单位之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、采样频率

采样为从连续信号转化为离散信号的一个过程,视频采样频率是指每秒采样的次数,用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫做采样间隔。视频采样频率一般为90KHz(90000Hz)。

2、ffmpeg的分层结构

ffmpeg从下到上对数据处理的分层结构为:原始数据层(Raw data)、编解码层(encode/decode)和封装层(mux/demux)。原始数据层的数据格式包括yuv、pcm等。编解码层数据格式包括h264、aac等。封装层的数据格式包括flv、mp4、mp3等。封装层对应ffmpeg中的AVStream。编解码层对应ffmpeg中的AVCodec。原始数据层也通过AVStream进行处理。

3、time_base

time_base相当于时间单位(时间基),和我们常见的时、分、秒、毫秒和微秒等时间单位类似,提供了ffmpeg中时间单位和秒的转换关系。例如,time_base为90000时,表示1秒等于90000个时间单位。ffmpeg中不同层对时间单位的需求不一样,有的根据采样频率来定义time_base,有的根据帧率来定义time_base。因为时间是不变的,变化的只是度量的单位,通过携带time_base可以在不同时间度量单位间对时间进行转换。

4、ffmpeg中时间相关结构体和方法

(1)AV_TIME_BASE

在ffmpeg中定义为:

#define AV_TIME_BASE 1000000

表示ffmpeg中以微秒为处理时间的单位。

(2)AV_TIME_BASE_Q

ffmpeg内部时间基的分数表示,实际上它是AV_TIME_BASE的倒数。从它的定义能很清楚的看到这点:

#define AV_TIME_BASE_Q (AVRational){1,AV_TIME_BASE}

(3)AVRational

typedef struct AVRational{

int num;  //numerator

int den;  //denominator

}AVRational;

(4)av_q2d

static inline double av_q2d(AVRational a){

return a.num / (double)a.den;

}

(5)timestamp

时间戳,可以根据pts来计算视频的显示时间戳

timestamp = pts*av_q2d(st->time_base),timestamp计算结果单位为秒,st为一个AVStream对象指针

pts和dts在ffmpeg中单位为time_base,h264标准下换算为秒的话为1s/90KHZ。有的设备在输出视频时pts和dts的单位为毫秒,在利用ffmpeg解码时需要转换pts和dts的单位,Pts(ffmpeg)=Pts(设备)*90。

(6)duration

视频时间长度,ffmpeg中duration表示的时间长度是以对应的time_base为单位的,换算成秒的方法为:

duration(秒) = st->duration * av_q2d(st->time_base),st为一个AVStream对象指针

(7)int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)

该函数提供了不同时间基间的转换功能,并且可以防止转换过程中溢出等情况的发生。该函数内部计算表示为a * bq / cq,把时间从bq时间基转换到cq时间基。

 

参考:

(1)http://blog.csdn.net/supermanwg/article/details/14521869

(2)http://www.cnblogs.com/yinxiangpei/articles/3892982.html

(3)http://blog.csdn.net/zhuweigangzwg/article/details/64919706

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值