'use strict'; /** * 动态缩略图的档位配置。 * * 每项是 [细节分辨率, 帧率, 编码质量]: * - 细节分辨率决定画面保留多少细节(输出画布始终 400×400,小分辨率会被放大填满); * - 帧率决定每秒采样多少帧,只改采样密度不改时间轴,每档的帧延迟会自动重算; * - 编码质量是 0–1 的 WebP 质量,APNG 是无损编码会忽略这一项。 * 数组顺序就是生成顺序,也是画廊里的展示顺序。 * * 想调整压缩策略,直接改下面的数字即可;增删档位也支持,每档自带质量。 */ const ANIMATED_PRIORITIES = { // 分辨率优先:先把帧率压到底,再降分辨率。 resolution: [ [400, 18, 1.0], [400, 15, 0.8], [400, 12, 0.6], [400, 9, 0.4], [400, 6, 0.2], [200, 18, 1.0], [200, 15, 0.8], [200, 12, 0.6], [200, 9, 0.4], [200, 6, 0.2], ], // 帧率优先:先把分辨率压到底,再降帧率。 framerate: [ [400, 18, 1.0], [400, 18, 0.5], [350, 15, 1.0], [350, 15, 0.5], [300, 9, 1.0], [300, 9, 0.5], [250, 6, 1.0], [250, 6, 0.5], [200, 9, 1.0], [200, 6, 0.5], ], // 交替进行:分辨率和帧率交替下降。 balanced: [ [400, 15, 0.8], [400, 12, 0.6], [400, 9, 0.4], [400, 6, 0.2], [200, 15, 0.8], [200, 12, 0.6], [200, 9, 0.4], [200, 6, 0.2], [100, 3, 0.5], [100, 3, 0.1], ], }; const DEFAULT_PRIORITY = 'resolution'; function animatedProfiles(priority) { const plan = ANIMATED_PRIORITIES[priority] || ANIMATED_PRIORITIES[DEFAULT_PRIORITY]; return plan.map(([size, fps, quality]) => ({ size, fps, quality })); } module.exports = { ANIMATED_PRIORITIES, DEFAULT_PRIORITY, animatedProfiles };