两段视频PTS数字差很多,怎样按time_base换成同一时间单位
PTS整数不能跨文件直接比较,必须乘以对应流的time_base换成时间。一个文件的PTS为300,另一个为27000,可能都表示零点三秒;分母大只是刻度更细,不表示播放变快或画面帧率更高。
这组文件怎样比较
附件把同一原创十帧每秒图案分别写为track timescale一千和九万的MP4。两份文件使用相同编码内容与时长,只有容器刻度不同;实际读回time_base后再计算,不把命令参数当作最终写入值。
按原始结构逐项检查
-
先从show_streams取每条流自己的time_base,保留分子分母原文。音频和视频的刻度可以不同,不能拿视频时间基解释音轨PTS。表格至少保留文件、流索引、原始整数和有理数单位四项,缺一项就难以独立复算。
-
使用整数分数计算PTS乘time_base,本题Python采用Fraction避免先转浮点累积舍入。显示小数只用于阅读,比较时保留约分后的精确值;把所有时间先截为两位小数,可能把不同边界压成同一数字,从而掩盖差异。
-
逐包比较两份文件的换算结果,确认相同序号包的秒数列表一致,再完整解码。这里保留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。引用支持文件机制;原创输入的本地结果不代表客户素材或现场系统已经通过验收。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。