您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ffmpeg时间基种类及转换

phymat.nico 发布时间:2020-08-05 09:18:36 ,浏览量:1

  1. 时间基相关结构
  2. 时间基种类
  3. 时间基转换函数
  4. ffmpeg中时间基特殊使用
一、ffmpeg中时间基相关数据结构:
 
  1. typedef struct AVRational{

  2.  
  3. int num; ///< numerator

  4.  
  5. int den; ///< denominator

  6.  
  7. } AVRational;

二、时间基有如下几种:

不同时间基单位:

1、InputStream: 时间基 1:1000000(单位:us)

2、AVStream:时间基 1:90000(单位:s)- 根据mpeg的协议,压缩后或解压前的数据,pts和dts是90kHz时钟的采样值

3、AVCodecContext:时间基 1:framerate (单位:s)

不同结构使用的时间基种类:

1、AVPacket:使用AVStream时间基

2、AVFrame:pts使用AVCodecContext时间基;pkt_pts、pkt_dts使用AVStream时间基

3、InputStream:使用InputStream时间基

四、时间基转换函数

1、

  int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;

  其中:a为待转换时间;bq为待转换时间依赖的时间基;cq为目标时间基。

  上述公式等同于:

a * bq / cq

2、

void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

  其中:pkt为编码后数据包;src为原始时间基;dst为目标时间基

五、时间基扩展

AVFrame->pts和AVPacket->pts、AVPacket->dts的值,在解码/编码后,会经历短暂的time_base不匹配的情况:

1、解码后,decoded_frame->pts的值使用AVStream->time_base为单位,后在AVFilter里面转换成以AVCodecContext->time_base为单位。

2、编码后,pkt.pts、pkt.dts使用AVCodecContext->time_base为单位,后通过调用"av_packet_rescale_ts"转换为AVStream->time_base为单位。

https://blog.csdn.net/DONGHONGBAI/article/details/82775588

关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0458s