添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

AVStream 表示 AVFormatContext 中一条具体的流结构,比如:音频流、视频流和字幕流等。AVStream->time_base也是分数结构 AVRational ,只不过不再是固定值,而是依赖于具体流 AVStream AVPacket AVFrame 中的时间戳多是基于对应的流时间基准例如: AVStream 中的帧开始时间戳和流时长:

/**
 * This is the fundamental unit of time (in seconds) in terms
 * of which frame timestamps are represented.
 * 表示一秒对应多长时间
 */

AVRational time_base;

/**
 * Decoding: pts of the first frame of the stream in presentation order, in stream time base.
 */

int64_t start_time;

/**
 * Decoding: duration of the stream, in stream time base.
 */

int64_t duration;

要计算出流时长信息(秒),如下所示:

//计算出AVStream多少秒
duration(秒) = AVStream->duration * av_q2d(AVStream->time_base);

比如:某视频流的 time_base 是1/90000,即:90000表示1秒。那么2700000实际表示30秒再看一下 AVFrame 中的时间戳:

/**
 * frame timestamp estimated using various heuristics, in stream time base
 */

int64_t best_effort_timestamp;

/**
 * Presentation timestamp in time_base units (time when frame should be shown to user).
 */

int64_t pts;

一般情况下,两者都可以表示PTS时间戳,且都是基于流时间基准

// 用秒表示PTS
timestamp(秒) = av_frame_get_best_effort_timestamp(AVFrame) * av_q2d(AVStream->time_base);

不同时间基准之间的转换

为了在不同时间基准间进行转换,FFmpeg提供了 av_rescale_q 函数进行转换

/**
 * Rescale a 64-bit integer by 2 rational numbers.
 * The operation is mathematically equivalent to `a * bq / cq`.
 * a表示原始值,bq表示原来的时间基准;cq表示要转换到的时间基准
 */

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

例如:把流时间戳转换到内部时间戳:

// 把某个视频帧的pts转换成内部时间基准
av_rescale_q(AVFrame->pts, AVStream->time_base, AV_TIME_BASE_Q)

ffmpeg中进行seek时(av_seek_frame),时间戳必须基于流时间基准,比如:seek到第5秒

// 首先计算出基于视频流时间基准的时间戳
int64_t timestamp_in_stream_time_base = av_rescale_q(5* AV_TIME_BASE, AV_TIME_BASE_Q, video_stream_->time_base);

// 然后seek
av_seek_frame(av_format_context, video_stream_index, timestamp_in_stream_time_base, AVSEEK_FLAG_BACKWARD);

原文链接:

https://www.zybuluo.com/ltlovezh/note/1498037

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至[email protected] 举报,一经查实,本站将立刻删除。

(0)
  • 多智能体RL实现多轮连续交互,IteR-MRL使图像分割算法达到医用标准
  • 如何避免对话式 AI 偏见
  • MultiChoice 和 NBCUniversal 投资 1.77 亿美元改造 Showmax
  • EMG 和 Gravity Media 宣布合并
  • 基于混合Transformer-CNN结构的学习图像压缩
  • 相芯虚拟人“小V”亮相首届未来数商大会,为数字经济注入元宇宙力量
  • Salesforce 推出 Einstein 1 现场服务版
  • Unified Office 通过 AI 驱动的 Whisper Coaching 扩展了情绪分析产品
  • WebRTC编译到Android(WebRTC源码编译)
  • Dialpad 推出针对销售和客户服务的定制 Ai Playbook
  •