先把当时的情况摆出来。视频页的 duration 字段按运营填的「90 秒」写进结构化数据,实际视频是 1 分 28 秒,富媒体上线一周后被撤回,后台提示时长与内容不符。
原因不止一个,得分开看。时长由人工填写,没有从视频文件读取。也可能是同一批视频换过源文件,页面字段没有跟着更新。
另外,duration 写法不统一,有的写秒数有的写 ISO 时长。
从文件读取真实时长
ffprobe -v error -show_entries format=duration -of csv=p=0 v/1024.mp4
接着按 ISO 8601 写回字段
PT1M28S
批量校对并回写数据库
SELECT id, duration FROM videos WHERE ABS(duration - 88) > 5;
复检页面输出
curl -s https://www.example.com/video/1024 | grep -o '"duration"[^,]*'
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
怎么算真的好了,看的是同一批现象。校对后 800 个视频页只有 12 个时长偏差超过五秒,修正后两周富媒体恢复展示。
提醒一点。时长偏差超过几秒就可能被判定不一致,用 ffprobe 跑一遍比人工核对可靠得多。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
