AVCodecContext中time_base确定

构建AVCodecContext时,一般通过以下几个步骤
1、avcodec_alloc_context3
2、avcodec_parameters_to_context
3、avcodec_open2
前面两步的调用,只是做一些初始化的操作,最后一步avcodec_open2才能够对AVCodecContext中time_base进行数值的确定。

在创建AVCodecContext之前,往往需要通过AVFormat进行文件打开及流信息查找操作。在流信息查找avformat_find_stream_info之后,在AVStream流中能够给予
    audio:sample_rate(在codecparameter中)
    video:avg_frame_rate(在AVCodecContext中)
而AVCodecContext中的time_base往往是基于以上两个数据的倒数

AVStream中time_base一般是1/1000(1ms)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AV_TIME_BASE是FFmpeg定义的一个宏,它表示时间单位的基准。具体地说,它表示每秒钟的时间单位数。在FFmpeg,时间单位被表示为有理数,即分子和分母的形式。AV_TIME_BASE的值为1000000,表示每秒钟有1000000个时间单位。 提到了不同的time_base。在FFmpeg,每个AVStream(音视频流)都有一个time_base字段,用于表示该流的时间单位。AVStream的time_baseAVCodecContexttime_base字段有关。AVStream的time_baseAVCodecContexttime_base精度更高,即分子的值更小。例如,AVStream的time_base为1/90000,而AVCodecContexttime_base为1/30(假设frame_rate为30)。在相同的pts和dts情况下,以AVStream的time_base为单位的数值会比以AVCodecContexttime_base为单位的数值大。 因此,AV_TIME_BASE是一个重要的宏,用于在FFmpeg进行时间单位的换算和处理。了解AV_TIME_BASE的含义和使用方式对于阅读和理解FFmpeg的代码非常重要。 来源:ffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。 来源:InputStream(AV_TIME_BASE) 到 AVPacket(AVStream->time_base) 来源:AVStream->time_baseAVCodecContext->time_base 精度要高(数值要小),比如AVStream->time_base为1/90000,而AVCodecContext->time_base为1/30(假设frame_rate为30);同样的pts和dts,以AVStream->time_base为单位,数值要比以AVCodecContext->time_base为单位要大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值