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

FontLoaderSub: 加载ass/ssa字幕所需字体的小工具 (r7-20200525)

  • TA的每日心情
    无聊
    昨天 07:49
  • 签到天数: 1274 天

    [LV.10]以坛为家III

    11

    主题

    137

    回帖

    46

    VC币

    至尊会员

    Rank: 16Rank: 16Rank: 16Rank: 16

    积分
    222988
    vbr9d 发表于 2019-5-8 14:05:58 | 显示全部楼层
    本帖最后由 vbr9d 于 2019-5-8 21:52 编辑

    不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问有什么解决办法吗?我已经尝试过手动删除C:\Windows\System32\FNTCACHE.DAT和C:\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache下的所有文件,重启过,开关过windows font cache service,依然是检查就秒说无法找到字体,安装新字体以后也没用
    -------------------------
    https://github.com/Aegisub/Aegisub/issues/92
    抱歉,好像不是这软件导致,发现貌似是win10 更新后导致?不知道怎么解决...不太想把win10回滚,不知道有没有其他检查字体缺字的软件...?

    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    90

    回帖

    0

    VC币

    荣誉会员

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

    积分
    108030
    yzwduck  楼主| 发表于 2019-5-8 21:55:14 | 显示全部楼层
    vbr9d 发表于 2019-5-8 14:05
    不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...

    这个锅需要让 aegisub/Windows 来背。
    正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 会保存字体名称与其文件路径,aegisub 它们只读取了这个列表。
    但是最近(两、三个月?) Windows 的字体配置有些变化,允许普通用户把字体安装到用户目录下,这些信息保存在 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts,所以那些软件已经少考虑了这部分情况。

    而更复杂的是,如果使用 FontLoader(Sub)/其他字体管理工具“临时加载字体”,我不知道现在 Windows 把这部分信息保存在哪里,但测试发现,只有 GDI 接口,以及开了字体缓存情况下的 DirectWrite 接口,才能访问到这部分信息。
    FontLoaderSub 使用 GDI 接口来判断系统是否存在字体、临时加载字体,所以字体的加载与枚举是吻合的,可以通过重复加载同一套字幕字体,看它们的输出结果来判断。

    解决方法:让 aegisub 等软件使用更合理的 API 来枚举系统中的字体。
    @tonyhsie 大佬怎么看这个问题?
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969739

    卓越贡献

    tonyhsie 发表于 2019-5-9 01:17:19 | 显示全部楼层
    vbr9d 发表于 2019-5-8 14:05
    不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...

    解決方式很簡單



    C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts



    裡面的所有字型檔案拷貝出來,然後刪除掉這些字型


    然後重新安裝,安裝時記得選擇 "為所有使用者安裝",而不是 "安裝"




    這樣一切字型程式都會和以前一樣正常運作

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969739

    卓越贡献

    tonyhsie 发表于 2019-5-9 01:27:28 | 显示全部楼层
    yzwduck 发表于 2019-5-8 21:55
    这个锅需要让 aegisub/Windows 来背。
    正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...

    Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡稱這種字型為 user font)

    這種安裝方式是以前沒有的,所以大部分舊的字型相關程式 (如 Aegisub) / API 並不支援


    新的字型安裝方式,便是在字型檔案上按滑鼠右鍵,選 "安裝"

    舊的字型安裝方式,現在改叫 "為所有使用者安裝" (需系統管理者權限)

    如圖




    在 ListAssFonts 的討論串裡也有討論過相關問題兩次,分別是

    http://bbs.acgrip.com/forum.php?mod=viewthread&tid=1894&page=17#pid41025

    http://bbs.acgrip.com/forum.php?mod=redirect&goto=findpost&ptid=1894&pid=43190&fromuid=8179


    目前 ListAssFonts 可以辨識出系統安裝的 user font 字型  (這是因為 .NET API 支援 user font 的關係,非程式本身的特殊支援)

    但無法拷貝  (這功能就需要改程式了,對 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts] 這裡的 user font 作特別處理)


    我個人是建議一般用戶 "別使用這種新的字型安裝方式" 以免造成自己的不便與麻煩  (像 Aegisub 裡,跟字型檔案相關的功能,遇到 user font 都會失效)


    至於現有的字型程式該不該去支援 user font,我想這就看開發者個人的想法了

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    90

    回帖

    0

    VC币

    荣誉会员

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

    积分
    108030
    yzwduck  楼主| 发表于 2019-5-9 06:19:55 | 显示全部楼层
    tonyhsie 发表于 2019-5-9 01:27
    Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡 ...

    作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
    如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
    可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。

    注:通过 AddFontResource 临时加载的字体,貌似目前只有开了字体缓存的 DirectWrite 才能获取到它的路径信息。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 07:49
  • 签到天数: 1274 天

    [LV.10]以坛为家III

    11

    主题

    137

    回帖

    46

    VC币

    至尊会员

    Rank: 16Rank: 16Rank: 16Rank: 16

    积分
    222988
    vbr9d 发表于 2019-5-9 10:42:00 | 显示全部楼层
    yzwduck 发表于 2019-5-8 21:55
    这个锅需要让 aegisub/Windows 来背。
    正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...

    感谢解释~理解原因了
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 07:49
  • 签到天数: 1274 天

    [LV.10]以坛为家III

    11

    主题

    137

    回帖

    46

    VC币

    至尊会员

    Rank: 16Rank: 16Rank: 16Rank: 16

    积分
    222988
    vbr9d 发表于 2019-5-9 10:43:38 | 显示全部楼层
    tonyhsie 发表于 2019-5-9 01:17
    解決方式很簡單


    感谢解决方法!!现在弄好了
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969739

    卓越贡献

    tonyhsie 发表于 2019-5-10 01:53:26 | 显示全部楼层
    yzwduck 发表于 2019-5-9 06:19
    作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是 ...
    作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
    您這個想法,原則上我是完全同意的


    不過針對 user font 這個個案來說,個人是覺得,這個設計,並不是很完善的一套字型機制
    很容易造成用戶在 Win10 1809 之後安裝的 user font,無法使用舊字型軟體來處理的問題

    (而且直接把 user font 這種新機制作到舊選項裡面,舊的字型安裝機制反而變成新選項,對 MS 這種作法我也覺得不太妥當)
    (因為用戶自己可能也無法知道問題出在哪:明明自己安裝字型的方式跟以前一模一樣,怎麼突然 Aegisub 就出問題了?)


    所以我個人會比較傾向暫時保持觀望態度,同時建議用戶 "非必要的話,還是別使用 user font 為上策"

    如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
    可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。


    如果您的意思是,"某字幕使用了已安裝的 user font,但想判斷此字體是否有缺字幕用到的字"

    那目前 Aegisub & ListAssFonts 都沒有這樣的功能,ListAssFonts 目前也不打算增加這方面的特性


    不過 Aegisub 是開源軟件,或許您可以考慮直接修改它的源碼,來實現這個功能,不用從頭打造一個新的工具

    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    90

    回帖

    0

    VC币

    荣誉会员

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

    积分
    108030
    yzwduck  楼主| 发表于 2019-5-10 06:28:47 | 显示全部楼层
    tonyhsie 发表于 2019-5-10 01:53
    您這個想法,原則上我是完全同意的

    如果只是考虑 user font 的话,直接改 aegisub 貌似不难,但如果要把字体引擎换成 directwrite,来更彻底解决这问题的话,貌似工作量不小。
    最近三次元比较忙,只能暂时把这事鸽着。
    回复

    使用道具 举报

    头像被屏蔽
  • TA的每日心情
    开心
    2020-10-25 14:52
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    9

    主题

    269

    回帖

    141

    VC币

    禁止发言

    积分
    123866
    Rikkano 发表于 2019-5-10 20:49:40 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复

    使用道具 举报

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

    本版积分规则

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