两段视频PTS数字差很多,怎样按time_base换成同一时间单位

2026-10-24

PTS整数不能跨文件直接比较,必须乘以对应流的time_base换成时间。一个文件的PTS为300,另一个为27000,可能都表示零点三秒;分母大只是刻度更细,不表示播放变快或画面帧率更高。

这组文件怎样比较

附件把同一原创十帧每秒图案分别写为track timescale一千和九万的MP4。两份文件使用相同编码内容与时长,只有容器刻度不同;实际读回time_base后再计算,不把命令参数当作最终写入值。

按原始结构逐项检查

  1. 先从show_streams取每条流自己的time_base,保留分子分母原文。音频和视频的刻度可以不同,不能拿视频时间基解释音轨PTS。表格至少保留文件、流索引、原始整数和有理数单位四项,缺一项就难以独立复算。

  2. 使用整数分数计算PTS乘time_base,本题Python采用Fraction避免先转浮点累积舍入。显示小数只用于阅读,比较时保留约分后的精确值;把所有时间先截为两位小数,可能把不同边界压成同一数字,从而掩盖差异。

  3. 逐包比较两份文件的换算结果,确认相同序号包的秒数列表一致,再完整解码。这里保留B帧导致的包PTS次序,因此不会要求列表按数值递增;本题只验证刻度换算,不把时间基变更误当作重新排列呈现帧。

容易误读的地方

反例是见到time_base为1/90000就写成九万帧每秒。时间基是表示时刻的单位,帧率是画面采样节奏,它们可以有整数或非整数关系。另一个错误是把容器整体时长的小数单位与流内duration整数放在同一列相加。

下载与本地读回

generation.json、observed.csv、observed.json、scale1000.mp4、scale90000.mp4。

下载全部附件到同一个独立目录,用 python verify.py 运行本题独立核验脚本。依赖为Python 3.12.4、PATH中的FFmpeg及ffprobe 8.0.1;程序不联网、不连接设备,读取本题文件并在终端输出检查结果。本地实际执行回执保存实际命令、退出码和完整输出。

执行结果展示两种不同base、两组不同整数PTS以及完全一致的精确秒数,两个文件均通过本地完整解码。它没有比较目标显示刷新率,没有做帧率转换,也不证明任意重封装都保持所有时间值;每次输出仍应读回。

命令已在原创短片上实际执行并读回文件。官方文档为滚动版本,本文所列选项已用本地8.0.1确认;未测试目标硬解、网络起播或现场实时性能。

把结果带回交付

在剪辑系统间移交时,保存时间基和有单位的切点,不只写一个PTS数字。若目标系统需要新的刻度,明确取整规则并检查每个关键边界,尤其留意不能被新刻度整除的时点;转换后的误差应写成具体时间,而非笼统说精度降低。

相关背景见手机拍的视频放久了声音不同步,怎样先核对 VFR 与 CFR,还可从多媒体播放专题继续查找文件处理方法。需要核对实际工程的接收条件时,可携带本题文件与读回结果进行工程对接咨询。

一级依据

来源核对日期:2026-10-24。引用支持文件机制;原创输入的本地结果不代表客户素材或现场系统已经通过验收。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。