APNG的帧时长为什么是分数,怎样处理delay_den为零的规则

2026-10-24

APNG每帧时长由delay_num和delay_den组成分数,单位为秒。分母为零有明确规则:按一百解释,而非非法除零。读取时应保留原始两个整数和解释后的精确分数,不要只抄一个舍入后的毫秒值。

这组文件怎样比较

本题手工写出两份合法APNG,两帧均为原创纯色,一份延时为1/30秒,另一份字段写1/0。所有PNG块计算CRC并由Pillow完整加载。零分母文件是规范允许的有效输入,不属于故意损坏媒体,也没有请求修复它。

按原始结构逐项检查

  1. 先验证PNG签名与块CRC,提取每条fcTL中的两个延时整数。不要先把分母零改写成一百再保存原始报告,否则接收方无法知道文件究竟写了什么;原字段与解释值应分列,既保留事实也方便计算。

  2. 解释规则采用num除以有效分母,字段为零时有效分母取一百。Python用Fraction得到1/30和1/100,避免把三十三点三三三毫秒截断后累积误差;逐帧求和时同样保留分数,最后再按展示需要生成小数。

  3. 再让Pillow逐帧加载,记录其duration毫秒值并对照原始分数。API返回浮点数是表示方式,不改变文件的有理数规则;两种表示可能在小数尾部不同,因此对照时应说明精度,不能用字符串完全相同作为唯一判断条件。

容易误读的地方

反例是把1/0报为坏帧并丢弃,使动画内容与总时长都发生变化。另一个错误是认为零分母等于零时长,直接跳过该帧;规范已经给出替代分母,程序应该明确实现它,再将真正未知或损坏字段另行报告。

下载与本地读回

generation.json、observed.csv、observed.json、thirtieth.apng、zero-denominator.apng。

下载全部附件到同一个独立目录,用 python verify.py 运行本题独立核验脚本。依赖为Python 3.12.4与Pillow 12.0.0;程序不联网、不连接设备,读取本题文件并在终端输出检查结果。本地实际执行回执保存实际命令、退出码和完整输出。

公开核验实际检查两份文件每块CRC、两条fcTL、精确延时和所有解码帧。没有测浏览器对短延时的调度或系统负载下播放速度;文件定义的单轮时长与真实墙钟耗时不是同一测量,不能由本题数字承诺实时精度。

格式规则和本地Pillow实现分别核对。当前Pillow滚动文档已为13.0.0,本例实际运行12.0.0;没有测浏览器调度、目标引擎或现场屏体。

把结果带回交付

交付表保留delay_num、delay_den、有效分母、精确秒数与显示毫秒,便于转换到GIF或视频时选择取整策略。格式转换后再读回输出刻度,尤其别把1/30强制写成三十三毫秒却仍宣称完全等时;误差需要按目标格式实际计算。

相关背景见互动翻书换成高分辨率图片后卡顿,怎样测预加载成本,还可从多媒体播放专题继续查找文件处理方法。需要核对实际工程的接收条件时,可携带本题文件与读回结果进行工程对接咨询。

一级依据

来源核对日期:2026-10-24。引用支持文件机制;原创输入的本地结果不代表客户素材或现场系统已经通过验收。

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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