找回密码
 立即注册
楼主: Apache553

自动按需加载字体的轮子

  • TA的每日心情
    慵懒
    2022-3-6 15:37
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    364

    回帖

    42

    VC币

    荣誉会员

    Rank: 14Rank: 14Rank: 14Rank: 14

    积分
    142837

    活跃达人

    shadows 发表于 2023-10-15 22:51:28 | 显示全部楼层
    本帖最后由 shadows 于 2023-10-21 23:48 编辑

    帮楼主顶一下,其实使用也不困难
    1. 建立字体索引文件
    在程序所在的目录里,文件资源管理器的地址行里输入cmd,回车,就在此处打开了CMD命令行
    把FontDatabaseBuilder.exe这个文件往CMD窗口里头拖,空一格,把字体所在的文件夹往上拖,空一格,输入FontIndex.xml,回车。等待字体索引文件建立完成
    2.建立配置文件
    把程序文件夹里SubtitleFontHelper.example.xml,复制粘贴,把副本的文件名修改成SubtitleFontHelper.xml (删除里中间的.example)
    <IndexFile>E:\超级字体整合包 XZ\FontIndex.xml</IndexFile> 这一行里的文件路径改成上一步FontIndex.xml文件的路径
    把<MonitorProcess>xxxxxx</MonitorProcess>里的xxxx修改为播放器exe文件名,每一个播放器exe文件都写一个<MonitorProcess>xxxxxx</MonitorProcess>
    保存

    3.双击运行SubtitleFontAutoLoaderDaemon.exe


    还是整一个图形界面好一点

    评分

    参与人数 1活跃度 +114 收起 理由
    Apache553 + 114 很给力!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-6 15:37
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    364

    回帖

    42

    VC币

    荣誉会员

    Rank: 14Rank: 14Rank: 14Rank: 14

    积分
    142837

    活跃达人

    shadows 发表于 2023-10-21 17:16:44 | 显示全部楼层
    作者,程序对xml格式的检查是不是过于严格了,配置文件里完全不允许有不相关的元素?
    我是打算自己做个设置的GUI,然后也在配置文件里加些元素,用来保存字体文件夹的位置。
    发现加了其他元素后就报错Bad Config了
    示例:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <ConfigFile wmiPollInterval="1000" lruSize="100">
    3. <IndexFile>E:\Anime\超级字体整合包 XZ\FontIndex.xml</IndexFile>
    4. <MonitorProcess>mpvnet.exe</MonitorProcess>
    5. <Folder>E:\Anime\超级字体整合包 XZ</Folder>
    6. </ConfigFile>
    复制代码

    点评

    几个月过去了,我还是没有动力写,感觉图形界面的使用频率低的可怕,约等于一次性  发表于 2024-7-3 22:19
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-20 01:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    回帖

    0

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    38551
    BillyAngell 发表于 2024-12-19 23:25:57 | 显示全部楼层
    本帖最后由 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)














    点评

    要是自动扫描的话会更有意义…Windows可以用ReadDirectoryChangesW获取文件夹内容变化的  发表于 2024-12-20 13:41

    评分

    参与人数 2活跃度 +38400 收起 理由
    paul + 12800 很给力!
    NF-GL + 25600 很给力!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-6 15:37
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    364

    回帖

    42

    VC币

    荣誉会员

    Rank: 14Rank: 14Rank: 14Rank: 14

    积分
    142837

    活跃达人

    shadows 发表于 2025-1-1 11:54:17 | 显示全部楼层
    BillyAngell 发表于 2024-12-19 23:25
    在楼主轮子的基础上写了个字体管理程序:

    还没有用,想问下,如果出现重复字体,会有提示/输出吗?方便自己删除重复的
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 193 天

    [LV.7]常住居民III

    1

    主题

    3

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    11122
    sonicmagnum 发表于 2025-1-1 20:45:07 | 显示全部楼层
    运行出错怎么破

    出错截图

    出错截图
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-20 01:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    回帖

    0

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    38551
    BillyAngell 发表于 2025-1-4 19:56:38 | 显示全部楼层
    shadows 发表于 2025-1-1 11:54
    还没有用,想问下,如果出现重复字体,会有提示/输出吗?方便自己删除重复的 ...

    这个程序主打无人值守,目前的策略是直接删掉的
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-6 15:37
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    364

    回帖

    42

    VC币

    荣誉会员

    Rank: 14Rank: 14Rank: 14Rank: 14

    积分
    142837

    活跃达人

    shadows 发表于 2025-1-4 21:14:08 | 显示全部楼层
    本帖最后由 shadows 于 2025-1-4 21:39 编辑
    BillyAngell 发表于 2025-1-4 19:56
    这个程序主打无人值守,目前的策略是直接删掉的

    建议输出一下删除了什么……

    另外,发现一个问题,.db_hash_860c文件不遵循 -w 参数设置的workspace文件夹,而是一定会生成在index.xml的文件夹里面。我认为应该生成在workspace里
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-20 01:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    回帖

    0

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    38551
    BillyAngell 发表于 2025-1-11 22:11:03 | 显示全部楼层
    shadows 发表于 2025-1-4 21:14
    建议输出一下删除了什么……

    另外,发现一个问题,.db_hash_860c文件不遵循 -w 参数设置的workspace文件 ...

    确实是个问题,加了个日志功能把删除的文件打印出来了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表