欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

ffmpeg时间基种类及转换

发布时间:2025/3/21 编程问答 90 豆豆
生活随笔 收集整理的这篇文章主要介绍了 ffmpeg时间基种类及转换 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • 时间基相关结构
  • 时间基种类
  • 时间基转换函数
  • ffmpeg中时间基特殊使用
  • 一、ffmpeg中时间基相关数据结构:

  • typedef struct AVRational{

  •  
  • int num; ///< numerator

  •  
  • int den; ///< denominator

  •  
  • } 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

    总结

    以上是生活随笔为你收集整理的ffmpeg时间基种类及转换的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。