obs-ffmepg
+ -

av_rescale_q和av_q2d计算出的时间单位区别

2025-01-03 0 0

在FFmpeg库中,av_rescale_q和av_q2d都是用于处理时间或频率相关的计算,但它们的作用和输出结果的时间单位是不同的。以下是对这两个函数的简要解释以及它们之间的时间单位区别:

av_q2d(AVRational r):

  • 该函数将一个AVRational类型的有理数转换为一个双精度浮点数(double)。AVRational类型通常用来表示两个整数的比例关系(分子/分母),例如视频帧率、音频采样率等。
  • 当它被用来表示时间时,比如帧率(frames per second),那么它的返回值就是一个每秒多少个单位的意思。例如,如果一个视频是以25 fps的速度播放,则av_q2d的结果将是25.0,意味着每秒钟有25帧图像。
  • 时间单位: av_q2d的结果通常是“每秒的数量”,即当其应用于时间间隔时,输出的是以秒作为基本单位的倒数形式(如fps)。
videopts = m_ListVideo.front()->pts * av_q2d(m_fmt_ctx->streams[m_VideoStreamIndex]->time_base);

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

  • 这个函数是用来做比例转换的,它可以将一个基于某个比率的数值转换成另一个比率下的相应值。具体来说,它会将输入值a从比率bq转换到比率cq下,并返回转换后的值。
  • 在多媒体处理中,这可以用来把时间戳从一种时间基准转换到另一种时间基准。例如,从90kHz时间戳转换为1000Hz时间戳(即从PTS转到毫秒级时间戳)。
  • 时间单位: av_rescale_q的直接输出值取决于第三个参数cq所代表的目标时间基底。如果目标时间基底是1/1000(也就是1秒=1000单位),那么输出将会是以毫秒为单位;如果是其他的时间基底,则输出值就对应于那个特定的时间单位。
duration = av_rescale_q(duration, d->stream->time_base,    (AVRational){1, 1000000000});

总结

  • av_q2d:将AVRational转换为double,通常用于表示每秒的数量,如帧率,因此输出结果的时间单位可以视为“每秒”。
  • av_rescale_q:进行不同时间基底之间的转换,输出的时间单位由目标时间基底决定,可能是毫秒、微秒或其他任意定义的时间单位。

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!