介绍
GitHub 仓库:https://github.com/ihainan/Steam-Screenshots-Organizer
基于 之前一个大佬的工作,编写了一个小工具用于批量整理 Steam 的未压缩截图副本。
脚本的运行效果:
整理前:
整理后:
使用
下载 screenshot-org.bat 和 screenshot-org.ps1 放到 Steam 截图副本目录下。
当需要整理截图的时候运行 screenshot-org.bat 文件,运行结束之后截图就会被移动到对应游戏名字的目录下面,如果有非 Steam 游戏的截图则会被放到 “Uncategorized Screenshots” 目录中。
原理
Steam 的截图副本命名格式类似于:1332010_20240526130334_1.png,其中 1332010 是游戏 ID。
Steam 本身提供了一个 API https://api.steampowered.com/ISteamApps/GetAppList/v2/ 能够获取商店中所有游戏的列表,包含游戏的 ID 和对应的名字。
脚本会将 API 的返回转换为一张表,根据截图名字的游戏 ID 检索得到游戏名,创建目录并将截图移动到该目录下面。
细节
Steam 提供的 API 在大陆地区访问非常慢,所以 我搭建了一个反代。在我自己的测试环境下速度提升非常明显。脚本默认使用了我这个反代:
1 | $apiUrl = "https://steam.ihainan.me/ISteamApps/GetAppList/v2/" # ihainan 反代的官方 API,用于提升在大陆地区的下载速度 |
只有在第一次使用脚本,或者截图对应游戏的 ID 不在本地缓存(app.json 文件)中时(可能是比较新的游戏),脚本才会调用 Steam API 重新获取完整的 App List(大约 80MB),从而提高平日运行的速度。
脚本在创建游戏目录之前会检查和过滤目录名不允许的无效字符。我测试过 Steam 数据库中的所有游戏,对于一些特殊名字的游戏做了处理以保证能够正常创建游戏目录。比如 这个游戏 API 返回的游戏名是 <|>,删除无效字符之后就剩下空串了,我就使用游戏 ID 做为目录名。
脚本还支持比较新的 AVIF HDR 截图文件。后续如果 Steam 还支持新的文件格式,可以修改如下代码行:
1 | $fileExtensions = @("*.png", "*.avif") # 将会被整理的文件类型 |
问题
处理后的游戏名会有重名的可能,目前没有什么好的解决思路。
此外,Steam API 不知道为什么偶尔返回的 app 列表里面是缺失某些游戏的,如果脚本更新本地缓存之后还出现游戏被错误归类的问题,建议删除 app.json 重新运行。
其他
一个 AHK 脚本,每五分钟自动整理截图。
1 | Loop |