一张 JPEG 竟能播放视频?
Regressive JPEGs

JPEG 文件其实有个鲜为人知的特性:它支持按扫描顺序加载低频分量,让图片在加载时先显示低分辨率预览。我利用这个机制,通过拼接多个仅包含 DC 分量的扫描帧,成功在单个 JPEG 文件中嵌入了动态视频效果。当网络较慢时,浏览器会逐帧渲染这些扫描,形成类似 GIF 的动画。虽然无法控制播放速度,且受限于解码器对扫描数量的限制,但这种‘退步 JPEG’(Regressive JPEGs)玩法不仅展示了图像格式的底层逻辑,还带来了不少恶搞乐趣,比如用纯 HTML 实现无脚本的动态效果。
既然每个扫描都明确设定了它的频谱范围,那么构建一个让后续扫描覆盖已渲染图像数据的 JPEG 文件是完全可行的。
HN 评论区
69- 有评论者指出 Progressive JPEG 的主要价值在于慢速网络下让用户先看到低分辨率预览,但在现代高速网络环境下,用户几乎无法察觉这种渐进式加载效果。
- 一位开发者反驳称 Progressive JPEG 不仅没有加速解码,反而在启用该模式时会导致显著的解码性能下降,质疑其作为'锦上添花'功能的实际必要性。
- 有观点提出该技术可被用于对抗 AI 审查或绕过内容过滤器,即在第一帧向人类传递信息,而在最终帧向 AI 展示合规图像。
- 评论中有人指出 Motion JPEG (MJPEG) 早已原生支持视频流传输,无需通过这种依赖网络延迟的 JPEG 渐进式加载技巧来实现动画效果。
- 有从业者提到可以通过修改 Web 服务器逻辑,人为控制分块发送的间隔时间,从而在客户端实现类似视频播放的定时帧更新,而非完全依赖网络状况。