ffprobe里PTS不递增就是坏片吗,怎样识别B帧的解码顺序
ffprobe按包读取时看到PTS回跳,不一定代表视频损坏。带B帧的压缩流可能按解码顺序存储,PTS表示呈现时刻,DTS表示解码时刻;应先分清正在查看压缩包还是解码后的帧,再判断哪一列需要有序。
这组文件怎样比较
本例用固定十帧每秒、两秒长的原创图案编码H.264,并显式启用B帧,形成二十帧真实MP4。它没有音轨,用来排除声音设备与口型因素。编码器、GOP和B帧参数保存在生成记录,不能只用文件名断言重排序一定存在。
按原始结构逐项检查
-
首先运行ffprobe的show_packets,按返回顺序保留PTS、DTS和流索引。不要先按PTS排序再查看DTS,因为那已经改变了解码输入顺序;单独导出原始包序列,才能证明回跳发生在哪些相邻包之间,而非表格软件排序造成。
-
接着比较DTS的相邻值与PTS相邻值。本地样片的DTS严格递增,PTS则存在回落,符合这个受控B帧样本的预期。缺失DTS应单列为未知,不能用零补齐;不同容器、编码和损坏情形仍需按各自资料解释,不套用本例全部断言。
-
最后以show_frames读取解码呈现帧,并完整解码到空输出。将帧的时间序列与包顺序并列,不把一个包直接认定为最终画面。帧计数二十及解码无错误共同说明样片可被本地软件完整读取,但不能说明现场实时输出没有掉帧。
容易误读的地方
反例是对包PTS直接做差,出现负值便宣布VFR或时间轴倒退。VFR讨论的是呈现间隔是否变化,包重排序讨论的是解码依赖,两者证据不同。也不要强行把PTS改成DTS来消除负差,这会改变本应保留的呈现关系。
下载与本地读回
bframes.mp4、generation.json、observed.csv、observed.json。
下载全部附件到同一个独立目录,用 python verify.py 运行本题独立核验脚本。依赖为Python 3.12.4、PATH中的FFmpeg及ffprobe 8.0.1;程序不联网、不连接设备,读取本题文件并在终端输出检查结果。本地实际执行回执保存实际命令、退出码和完整输出。
核验回执输出全部包PTS、DTS、解码帧时点及严格解码退出码。样片首包DTS为负也是B帧重排序常见现象之一,本题没有据此修复文件;若生产素材真的报错,应保留解码器原始错误及对应包位置,继续定位依赖或传输问题。
命令已在原创短片上实际执行并读回文件。官方文档为滚动版本,本文所列选项已用本地8.0.1确认;未测试目标硬解、网络起播或现场实时性能。
把结果带回交付
交付表应写明时间序列来自packet还是frame,并附time_base与原始顺序。只截一列“时间戳不连续”没有足够语境;当接收方认为素材损坏时,先让双方用同一文件摘要和工具命令重现,再决定是否重取源片或制作兼容副本。
相关背景见手机拍的视频放久了声音不同步,怎样先核对 VFR 与 CFR,还可从多媒体播放专题继续查找文件处理方法。需要核对实际工程的接收条件时,可携带本题文件与读回结果进行工程对接咨询。
一级依据
来源核对日期:2026-10-24。引用支持文件机制;原创输入的本地结果不代表客户素材或现场系统已经通过验收。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。