手机拍的视频放久了声音不同步,怎样先核对 VFR 与 CFR

2026-10-23

先检查逐帧时间戳,再把同一文件的前、中、后三处口型与声音分别对照。r_frame_rate 和 avg_frame_rate 不同只能提示继续检查,不能单凭两个字段判定 VFR,更不能直接认定它就是音画漂移根因。

判断前提与适用边界

可变帧率允许相邻视频帧的呈现间隔变化;固定帧率转换则会按目标时间网格选帧、重复或丢弃帧。手机可能在低照度下改变采样节奏,但录音时钟、剪辑偏移、解码丢帧也会造成类似症状。把素材时间轴与输出硬件问题分开,才能避免把已经正确的音轨越改越偏。

本轮只完成本地生成、元数据与计算夹具验证,没有接入目标播放器、GPU输出链或现场音响。媒体生成固定为FFmpeg 8.0.1,表格及图案由Python 3.12.4生成;原始输入在附件中,不含第三方版权影片。

按同一条件执行

  1. 对原件只读运行 ffprobe,保存所有流的 time_base、start_time、duration、帧率及音频采样率,记录文件 SHA-256。不要先覆盖原片。

  2. 导出视频 best_effort_timestamp_time,至少比较连续帧间隔以及首中尾三段;缺失时间戳单列,不能用零替代。

  3. 在有口型或拍手的同一事件处记视频 PTS 与音频事件时刻,分别记录固定偏移和随时间增加的偏移。没有可识别事件时,填写“无法判断”。

  4. 只有目标播放器确实需要 CFR 时才另存候选片;例如 fps=30 会改采样网格。原件与候选片保持同一音轨,在目标机器重复口型检查。

ffprobe -v error -show_streams -show_format -of json input.mp4
ffprobe -v error -select_streams v:0 -show_entries frame=best_effort_timestamp_time -of json input.mp4

原始输入与判断示例

下面是合成示例,非现场实测。现场表中的空白表示未采集,不能当作零、正常或通过。

合成视频PTS秒相邻间隔秒可下结论
0.000,0.033,0.0830.033,0.050间隔不同,需查完整序列
首中尾偏移均0.120不随时间增加更像固定偏移,未定位原因

附件中的时间序列是人为构造,计算得到两种帧间隔;它只验证记录和差分算法。真正的验收结果应同时附元数据原文、事件时间点和目标机回放记录。候选片口型改善才说明这次转换有帮助,并不证明所有手机文件都该转码。

下载夹具并形成交付记录

下载专项输入与预期JSON和空白记录CSV。JSON保留原始输入、预期、记录字段及未测范围;CSV用于逐轮填写,原始日志、截图或仪表文件用稳定文件名关联。本主题还提供actual-vfr-intervals.json、vfr-testsrc-execution.json、vfr-testsrc-ffprobe.json、vfr-testsrc.mp4。

本表保留 frame_index, pts_seconds, audio_event_seconds, video_event_seconds 等字段;先按上表核对合成输入,再将目标环境数据另存一份。未采集的字段留空,失败记录与原始文件一并保留,避免下一轮无法复现。

误判与失败路径

不要用修改后缀实现 CFR;不要用播放器显示的“30帧”代替逐帧证据;不要把音频重采样和视频帧率同时改变后只归功于其中一项。若完整解码报错,先保留报错位置再做时间轴试验。

基础背景见展厅视频编码与封装怎么选(H.264 / H.265 / HAP),相关流程汇总在多媒体播放专题。需要在SoftPlayer上执行这项测试时,按受测版本文档填写配置与支持情况。

一级来源与核验范围

FFmpeg ffprobe:Main options、JSON writer,核对日期2026-10-23。本文协议与合成样例为独立设计;来源中的机制说明不代表附件已完成现场验收。

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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