ffmpeg中的时间戳
  1z4DPON8I3dd 2023年11月19日 20 0

参考:https://zhuanlan.zhihu.com/p/468346396 1、基本概念 ffmpeg中提及时间戳时,一定要明确它所对应的时基(time_base)。为精确描述该其数值,使用以下结构体来描述这一有理数概念。

typedef struct AVRational{
    int num; ///< numerator
    int den; ///< denominator
} AVRational;

在ffmpeg中,时间的单位是微妙,那么标准的时基为 (AVRational){1, 1000000},其中ffmpeg定义了两个宏

#define AV_TIME_BASE            1000000
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}

其中Q代表quotient,汉语为 “商”。

对于像H264视频的时基为(AVRational){1, 90000}。

2、同一时间戳在不同时基下的转换 例如, 在时基bq = {1,1000000}有时间戳 a1 = 48000,需要转换到时基 cq ={1,90000}下的时间戳a2,

计算过程应该为 a2 = 48000 *(1/1000000)/ (1/90000} = 4320,使用ffmpeg的对应接口计算函数为 a2 = av_rescale_q(a1, bq, cq); 。其中bq,cq为AVRational类型。

3、时长计算 时长=时间戳*时基 函数 av_q2d 用来 分数(结构体)转小数 如:计算视频时间(s)

int64_t current_time = pkt->pts*av_q2d(ic->streams[is->video_stream]->time_base);//结果为S,其中time_base为结构体(AVRational){1, 90000}

//Duration between 2 frames (us)
//int64_t frame_duration=(double)AV_TIME_BASE/av_q2d(ic->streams[is->video_stream]->r_frame_rate);//quotient to decimal
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
1z4DPON8I3dd