TA的每日心情 | 开心 2024-12-20 01:02 |
---|
签到天数: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 38551
|
本帖最后由 BillyAngell 于 2025-1-11 22:09 编辑
在楼主轮子的基础上写了个字体管理程序:
本程序设计基于以下前提:
1. 绝大部分字幕所需字体在 XZ 完整包里存在,但仍然有少量字体不存在,这些字体可能随字幕组作品或 BD 合集资源中发布
2. 我并不知道随字幕组作品发布的字体中哪些已经在本地字体库中,而哪些不在其中。
如果这些字体照单全收,大概率会有重复的字体(字体文件命名很可能无法用于推断是否重复,且重复的字体可能不少)被留下,久而久之占用不少空间;
要么手动检查、删除重复字体(FontDatabaseBuilder.exe 似乎并不会删掉重复的字体);正常情况下每次手动检查和去重还需要对完整包重扫描,费时费(算)力;
既然完整包基本不会变化,那么是否可以记录完整包的扫描结果和 XML 数据库,只是把每次添加的字体重新建库,合并到之前已建好的 XML 数据库中?
3. 这些工作能否自动完成?
该字体管理程序将基于以上前提设计:
1. 把字体库分为 Base(基本)库和 Diff(差分)库。Base 库可以存放不常变化的字体,例如 XZ 的完整包就可以作为 Base 库;Diff 库存放收资源的时候附带的字体,这些字体一般都是 Base 库里没有的
2. 运行程序,提供 Base 库、Diff 库的路径,程序首次将对 Base 库和 Diff 库创建 XML 数据库以及其中所有字体文件的 Blake2b 校验和,分别作为 Base 库和 Diff 库的配置文件
3. 后续程序将以两个库的配置文件为基础,检查 Diff 库是否存在字体新增、删除的情况,同时重新生成 Diff 库的配置文件,而最终的字体 XML 数据库文件为 Base 库和 Diff 库的并集
4. 初始可以将 XZ 的精简包作为 Diff 库,后续可将收资源的时候附带的字体丢进 Diff 库中,定期运行管理程序即可。
5. 为提高性能,Diff 库中收集的字体可定期添加至 Base 库中,此时需要删除 Base 库配置文件以重建
优势:
1. 减少存储空间占用:每次向 Diff 库添加字体时,程序会自动对 Diff 库中的字体去重,去重依据为字体文件前 4K 字节的 Blake2b 校验和
2. 降低扫描规模:每次添加字体时,无需重扫整个 Base 库建立 XML 数据库(XZ 的完整包接近 50GB,扫描极其耗时),在没有人为修改 Base 库的前提下只需扫描 Diff 库即可
3. 方便字体库自动化维护:日常扫描规模仅限制为 Diff 库,规模小;且若 Diff 库未变化,则 XML 数据库不会重建,进一步降低开销。
设置好后,日常使用时仅需将收集到的字体丢到 Diff 库中即可。事先设置较高频率定时任务以监控字体库变化情况,免去手动重扫描操作
使用方式:
1. 建立字体库目录:
fonts
├── diff
└── base
包含 diff 与 base
2. 指定 diff 与 base 的绝对路径
3. 指定程序 workspace(工作目录)的绝对路径
可将 fonts 根目录作为工作目录
4. 指定 XML 数据库生成程序 FontDatabaseBuilder.exe 的绝对路径
5. 指定 XML 数据库生成的路径
6. 将上述路径作为参数传入程序,运行管理程序(参考 -h 的输出)
7. 5 中指定的 XML 数据库生成的路径事先填入 SubtitleFontHelper.xml
8. 适时执行 SubtitleFontAutoLoaderDaemon.exe 的重新加载操作
9. 使用 taskschd.msc 设置定时执行
10. 定时执行时,使用 VB 脚本隐藏命令提示符:
Set Shell = CreateObject("WScript.Shell")
Shell.Run "[运行指令放在这里]", 0, False
保存为 *.vbs 文件
11. 为提高性能,建议控制 diff 库的字体数量,定期(可以很长)将积累的字体加入 Base 库
后续改进:
1. 作为服务常驻并自动扫描 Diff 库
2. 当 Diff 库字体数量达到一定程度时,自动移至 Base 库
3. 每次检测到数据库变化时,自动重启 Daemon
4. 如果作者能有空把这些功能合进去就更好了(
mytask-build-v1.4.3-428-g0b179e6-2025-01-11-22-06-35-windows-amd64.tar.gz
(2.79 MB, 下载次数: 39)
|
评分
-
查看全部评分
|