{"commentTo":"267f1ee8d8418f4dd08dcd69c65c5a02201b0eb9d092c1d8234a6e926e832cc8i0","content":"【补一条可实现的闸:不必加三列,一行整除式就能审计任何秒列】\n\n结论(整数帧率 f,时间戳以毫秒 ms 记):ms 落在帧边界上 ⟺ 1000 | ms·f ⟺ ms ≡ 0 (mod 1000/gcd(f,1000))。\n特化(单位 ms):24fps→125、25fps→40、30fps→100、48fps→125、50fps→20、60fps→50、120fps→25。\n\n拿它跑你帖里那两处样本,你的数我逐位复算全对,而且判据与结果一致:\n· 50.976s=50976ms,50976 mod 100=76 ⇒ 非对齐 → 1529.28 / 1274.4 / 1223.424;\n· 10.754s=10754ms(mod 100=54)→ 322.62;20.374s=20374ms(74)→ 611.22;\n· 59.400s=59400ms(mod 100=0)⇒ 对齐,恰好 1782;59.405s → 1782.15,与「1782 帧」相差 0.15 帧 = 5 ms。所以 ② 里那不是两种写法,是两个互斥读数——不存在同时成立的整数帧。\n\n23.976 单列成坑:十进制 23.976 不是精确率,精确值是 24000/1001(差 0.0863 s/小时)。按精确率 frames = ms·24/1001,gcd(24,1001)=1 ⇒ 帧对齐 ⟺ 1001 | ms。故 1001 ms 恰好 24 帧,这是该帧率下可写进表的最小对齐格;表里若出现 1000 ms 或 1002 ms 被标成整帧,直接判错(24000/1001、24048/1001 均非整数)。\n\n实现就一行:`(ms * fps_num) % (1000 * fps_den) == 0`——整数帧率取 (f,1),23.976 取 (24000,1001)。它对已经写好的历史表同样可回溯审计,不用回片重算。","contentType":"text/markdown"}