Scanner 批量检查 SWF 目录与 Exporter 截帧工具
这两个工具在哪里
它们是 Ruffle 仓库里独立的 Rust crate——ruffle_scanner 和 exporter。GitHub Releases 里的预编译包默认不带这两个,你需要自己从源码构建,或者从 nightly 构建的 Assets 里找是否包含。
Scanner:批量解析 SWF,做兼容性摸底
用途
如果你手里有一批(几十到几千个).swf 文件,想提前知道哪些能跑、哪些可能有问题——Scanner 就是为这个场景做的。
它不真正执行 SWF,只做解析层面的工作:读取文件头、解析 tag、校验结构,然后输出一个 CSV(或 JSON)报告,告诉你哪些是正常的、哪些结构有问题、哪些文件损坏。
构建
cargo build --release --package=ruffle_scanner
运行
ruffle_scanner.exe scan C:\flash-archive C:\reports\swf-check.csv
参数:第一个是输入目录(可以递归),第二个是输出 CSV 文件路径。
输出字段
| 列 | 含义 |
|---|---|
| path | SWF 文件路径 |
| result | ok / failed |
| version | SWF 版本号 |
| length | 文件大小(字节) |
| error | 如果 failed,错误信息 |
实际用法
Flashpoint 和 Internet Archive 这种大型存档项目在导入新 SWF 时,会先用 Scanner 扫一遍把损坏文件挑出来。你自己的小收藏(比如几百个)也可以用它做一次体检。
Exporter:把 SWF 某一帧或序列帧截成 PNG
用途
想给一个 SWF 做封面缩略图、想批量给一组游戏截图、想做一个自动生成截图的脚本——Exporter 就是 headless 截图工具。
构建
cargo build --release --package=exporter
注意:Exporter 需要硬件加速(wgpu),所以不能在 headless CI 里跑(除非 CI 机器有 GPU 且配置了合适的渲染后端)。文档里说可以 headless 跑,但需要机器有可用的硬件加速后端。
运行
单帧截一张:
exporter.exe C:\games\old-game.swf
默认会从第一帧开始,存成 old-game.png 放在当前目录。
多帧截序列:
exporter.exe C:\games\old-game.swf C:\screenshots --frames 5
会从第一帧开始截 5 张 PNG,存到 C:\screenshots\old-game-frame-0001.png 这种命名。
更多参数
--frame N:从第 N 帧开始(默认 1)--max-fps N:导出时的帧率上限--scale N:缩放因子(比如 2 输出两倍分辨率)--output-resolution WxH:强制输出分辨率(比如 1920x1080)--backend NAME:渲染后端(wgpu 默认 / cpu 纯软件)
实际用法
站长用它批量给自己网站上的 Flash 游戏生成封面缩略图、做自动定期兼容性测试(跑一批 SWF → 比对截图 → 找出哪些在 nightly 更新后出问题了)。
headless 注意事项
Exporter 默认会弹窗口。加 --headless 参数可以不弹窗口直接跑——但前提是机器有可用的渲染后端(WSL2 里需要有 WSLg,Linux 里需要 X11 或 Wayland,或者用 xvfb-run)。纯无 GPU 的服务器 headless 跑不起来,需要 CPU 后端:
exporter.exe --backend cpu --headless --frames 10 game.swf
CPU 后端慢得多但能跑。