FFmpeg时间基相关函数大杂烩
目录一、核心时间基概念速记二、时间基转换「主函数表」最重要三、AVRational 工具函数表四、FFmpeg 内置时间基常量五、不同场景「怎么选函数」对照表1️. Packet PTS → 毫秒最常用2️. Frame PTS → 秒double3️. 音频 frame → 下一帧 pts防抖动4️. Seek 时间戳必须 round5️. 音视频同步master clock audio clock六、av_rescale_q_rnd 的 rounding 参数详解七、Stream / Codec / Frame 时间基到底用哪个八、完整“黄金模板”九、时间基“血泪坑”速查表十、一句话总结觉得有用就请您帮忙点赞转发收藏吧您的鼓励是我创作的动力多谢看官。由于能力水平有限文中的错误或不严谨的地方在所难免还请批评指正。FFmpeg 在处理视频和音频时经常需要与时间基time base相关联的操作。时间基是视频和音频处理中的一个核心概念它定义了帧之间的时间间隔。FFmpeg 提供了一系列的函数和工具来帮助开发者处理与时间基相关的问题。一、核心时间基概念速记名字类型含义AVRational{int num, den}时间单位1 / den秒time_baseAVRational一单位 pts 等于多少秒​pts / dtsint64_t时间戳单位是 time_baseAV_TIME_BASE1000000ffmpeg 内部时间微秒公式一句话真实时间(s) pts × num / den二、时间基转换「主函数表」最重要函数原型 / 参数用途常见场景av_rescale_q()​(a, src_tb, dst_tb)pts 从 A 时间基 → B 时间基✅99% 用这个​av_rescale_q_rnd()​(a, src, dst, enum AVRounding)同上 四舍五入 / ceil音频 / 精确对齐av_rescale()(a, b, c)a*b/c防止溢出自己算 ratioav_rescale_rnd()(a, b, c, rnd)带 round 的整数 rescale底层封装av_mul_q()(AVRational a, AVRational b)rational 乘法推导 time_baseav_div_q()(a, b)rational 除法fps ↔ durationav_add_q()/av_sub_q()(a,b)rational 加减偏移时间记住一句话FFmpeg 里永远用av_rescale_q()做 pts 转换三、AVRational 工具函数表函数作用示例av_make_q(num, den)构造 AVRationalAVRational tb av_make_q(1, 1000);av_d2q(d, max)double → AVRationaltb av_d2q(1.0/44100, 100000);av_q2d(tb)tb → double 秒sec pkt-pts * av_q2d(tb);av_inv_q(tb)倒数fps → 每帧秒数av_reduce()约分 rational内部用四、FFmpeg 内置时间基常量常量 / API含义AV_TIME_BASE1000000微秒AV_TIME_BASE_Q(AVRational){1, AV_TIME_BASE}av_get_time_base_q()返回AV_TIME_BASE_Q音视频同步常用目标dst_tb AV_TIME_BASE_Q; // 微秒 dst_tb av_make_q(1,1000); // 毫秒五、不同场景「怎么选函数」对照表1️. Packet PTS → 毫秒最常用int64_t ms av_rescale_q(pkt-pts, stream-time_base, av_make_q(1, 1000));用av_rescale_q2️. Frame PTS → 秒doubledouble sec pkt-pts * av_q2d(stream-time_base);用av_q2d只读不写3️. 音频 frame → 下一帧 pts防抖动AVRational tb codec_ctx-pkt_timebase; int64_t next_pts av_rescale_q( frame-nb_samples, av_make_q(1, frame-sample_rate), tb );推导音频时钟4️. Seek 时间戳必须 roundint64_t seek_ts av_rescale_q_rnd( target_ms, av_make_q(1, 1000), stream-time_base, AV_ROUND_DOWN // 或 AV_ROUND_NEAR_INF ); avformat_seek_file(fmt_ctx, audio_idx, INT64_MIN, seek_ts, INT64_MAX, 0);seek 必须用_rnd5️. 音视频同步master clock audio clockdouble vid_clk vid_pkt-pts * av_q2d(vid_tb); double aud_clk aud_pkt-pts * av_q2d(aud_tb); double diff aud_clk - vid_clk;六、av_rescale_q_rnd 的 rounding 参数详解宏行为用途AV_ROUND_ZERO向 0 取整不推荐AV_ROUND_INF远离 0很少用AV_ROUND_DOWN向下✅ seek避免越界AV_ROUND_UP向上buffer sizeAV_ROUND_NEAR_INF四舍五入✅ 显示时间 / 音频对齐AV_ROUND_PASS_MINMAX保留 INT64_MIN/MAX内部用推荐记忆seek → AV_ROUND_DOWN ui ms → AV_ROUND_NEAR_INF七、Stream / Codec / Frame 时间基到底用哪个这是新手地狱直接给结论表对象pts 所在 timebase怎么转AVPacketAVStream::time_baseav_rescale_q(pkt-pts, st-time_base, dst)AVFrame(video)AVCodecContext::pkt_timebase或st-time_base解码后一般继承 streamAVFrame(audio)解码后建议转成1/sample_rate自己算avformat_seek_file()AVStream::time_base​别用 AV_TIME_BASE经典错误avformat_seek_file(fmt_ctx, idx, ..., ms, ..., 0); // ❌ ms 直接塞八、完整“黄金模板”static int64_t pts_ms(AVPacket *pkt, AVStream *st) { return av_rescale_q_rnd( pkt-pts, st-time_base, av_make_q(1, 1000), AV_ROUND_NEAR_INF ); } static int64_t pts_us(AVFrame *frm, AVStream *st) { return av_rescale_q(frm-pts, st-time_base, AV_TIME_BASE_Q); }九、时间基“血泪坑”速查表坑结果pkt pts 当秒用快进 1000 倍seek 用微秒直接塞seek 到天边audio frame 用 video timebase声音飞走rescale 不 rnd帧跳pkt/dts 混用B 帧倒放十、一句话总结FFmpeg 时间基只有三条铁律​1️.pts 永远是int64_t单位是AVRational2️.转换只用av_rescale_q()/av_rescale_q_rnd()3️.seek / 显示 / 同步各选一个主时钟统一 rescale 再比

相关新闻

WeChatMsg终极指南:3大核心功能实现微信聊天数据永久保存与智能分析

WeChatMsg终极指南:3大核心功能实现微信聊天数据永久保存与智能分析

WeChatMsg终极指南:3大核心功能实现微信聊天数据永久保存与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tren…

2026/10/28 6:04:00 阅读更多 →
NestJS 入门(3):Guard 如何挡住未登录请求?

NestJS 入门(3):Guard 如何挡住未登录请求?

上一篇:NestJS 入门(2):依赖注入到底解决了什么问题? 讲完了「对象怎么接到一起」。 接下来更贴近业务的问题是: 有些接口谁都能调,有些接口必须先登录。Nest 把这道门放在哪里? 答案…

2026/10/21 0:51:30 阅读更多 →
5个技巧掌握RVC语音转换:10分钟打造专属AI音色

5个技巧掌握RVC语音转换:10分钟打造专属AI音色

5个技巧掌握RVC语音转换&#xff1a;10分钟打造专属AI音色 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-Web…

2026/10/27 7:27:41 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/10/28 22:10:30 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 16:58:40 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 19:25:09 阅读更多 →