tonyhsie 发表于 2020-2-10 11:19:25


換個話題

其實 2.x 版的 Noto Sans/思源黑體,把 Noto Sans CJK TC Bold 視為 Noto Sans CJK TC 的附屬,而非兩套各自獨立的字型

這個作法其實就是 Noto Serif / 思源宋體 從以前到現在的標準作法


如果 FontLoaderSub 在調用 2.x 版的 Noto Sans CJK TC Bold 上有問題

那在調用 Noto Serif CJK TC Bold 時,不會有問題嗎?

yzwduck 发表于 2020-2-10 13:29:51

tonyhsie 发表于 2020-2-10 11:19
換個話題

其實 2.x 版的 Noto Sans/思源黑體,把 Noto Sans CJK TC Bold 視為 Noto Sans CJK TC 的附屬, ...

Noto Serif CJK TC Bold 对于字体工具而言,它能做的事情只有加载 NotoSerifCJK-Bold.ttc,剩下的事情交给操作系统与字幕渲染器。
如果字幕作者指定的字体名称就是 Noto Serif CJK TC Bold,那么:

[*]简单使用 Windows 字体匹配机制的软件(如 XySubFilter)会无法找到字体;
[*]部分自行实现字体匹配的软件(如 mpv)能会找到字体。

即使知道这个问题的存在,在不修改字幕、不改动字幕渲染器(当然也不能修改字体本身)的前提下,光靠中间的那个字体加载工具,能力极为有限,无法解决这个问题。

tonyhsie 发表于 2020-2-11 04:32:43

本帖最后由 tonyhsie 于 2020-2-11 04:38 编辑

yzwduck 发表于 2020-2-10 13:29
Noto Serif CJK TC Bold 对于字体工具而言,它能做的事情只有加载 NotoSerifCJK-Bold.ttc,剩下的事情交 ...
一個正常使用到 "Noto Serif CJK TC Bold" 字型的字幕檔案

它一定不是直接用 "Noto Serif CJK TC Bold" 這個字型名稱

而是使用 "Noto Serif CJK TC" 然後再指定粗體,不管是在 style 定義行將 Bold 欄位定義成 -1,或是使用 {\b1} 來指定粗體,兩者都可以

1. Style: CN,Noto Serif CJK TC,68,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,1,2,15,15,15,1
2. {\fnNoto Serif CJK TC\b1}

在這兩種情況下,該字幕所指定的,其實不是字面上的 "Noto Serif CJK TC" 這個非粗體字型,而是 "Noto Serif CJK TC Bold" 這個粗體字型


而這兩種情況,難道 FontLoaderSub 都是掛載到非粗體的 "Noto Serif CJK TC" 字型嗎?

這樣的話,好像就已經是不正確的結果了


換句話說,回到 Noto Sans CJK 的 case

不管是 1.x 版或是 2.x 版,兩種字型的匹配規則,都是現有字型的匹配規則,並沒有新增什麼例外規則


如果 FontLoaderSub 在處理 2.x 的匹配規則上有問題,那表示,跟 Noto Sans CJK 2.x 版一樣匹配規則的思源宋體、微軟雅黑等字型

肯定也存在著匹配錯誤的問題?

yzwduck 发表于 2020-2-11 09:06:42

本帖最后由 yzwduck 于 2020-2-11 09:10 编辑

tonyhsie 发表于 2020-2-11 04:32
一個正常使用到 "Noto Serif CJK TC Bold" 字型的字幕檔案

它一定不是直接用 "Noto Serif CJK TC Bold"...
我的字体匹配算法里,考虑到了类似 Noto Serif CJK TC 这种字体的情况;但是现在复查时发现它有一个的 bug,导致它无法正常工作。
不仅仅是 Noto Serif 系列的中文字体,大多数英文字体会把粗体、斜体、粗斜体的变种封装成单独的文件,我在设计算法时考虑到了这种情况,匹配字体名称与文件时,会先找到该系列字体中的一个文件,然后找到字体名称里包含相同前缀、文件格式相同、版本相同的字体,一并加载。
如果字体库里的 Noto Serif 系列字体只有 Noto Serif*.ttc 这 7 个文件,然后用 FontLoaderSub 加载一个包含 "Noto Serif CJK TC" 的字幕,它会把 7 个文件全部加载进来。
刚才调试时,发现一个 bug 导致它只加载了 2 个字体变种,现在已经将其修复了。

理想的算法是,寻找字体变种时,只匹配字体的 Family name。但是现在的代码里没有保存这种信息,所以当前版本无法简单实现,只能依靠名称的前缀了。

tonyhsie 发表于 2020-2-11 10:03:15

yzwduck 发表于 2020-2-11 09:06
我的字体匹配算法里,考虑到了类似 Noto Serif CJK TC 这种字体的情况;但是现在复查时发现它有一个的 bug ...

我好像有點明白 FontLoaderSub 的邏輯了

並不是字幕用到 A 字型,就只載入 A 字型

而是會把 A 字型的所有不同 SubFamily 都一併載入


的確這也是一種可行的作法沒錯

我之前以為 FontLoaderSub 會精確的辨識、並載入字幕檔所指定的單一種字型,看來是我誤會了

Axcinr 发表于 2020-2-23 18:06:36

我创建了一个文件夹,然后把临时要用的的字体考进去,然后再把程序考进去,然后按你说的把字体拖到程序上打开,但是还是无法加载

yzwduck 发表于 2020-2-24 08:15:31

Axcinr 发表于 2020-2-23 18:06
我创建了一个文件夹,然后把临时要用的的字体考进去,然后再把程序考进去,然后按你说的把字体拖到程序上打 ...

你的操作流程应该没有问题,但我现在还不太明白“无法加载”是什么状况;如果可以的话,希望能提供一些更有意义的信息(比如在工具的界面里,先展开详细信息(如果有的话),然后按 Ctrl+C,最后粘贴在帖子的回复里)。
[*]首先,我猜你遇到的情况是“索引中有 xxx 个字体,xxx 种名称”这一行提示,里面的数字应该不是 0,但是上面一行提示的是“0 个字体加载成功”;
[*]然后,请看一下详细信息是否显示“ok”,如果是的话,你已经系统全局安装了这些字体,不需要再用这个工具来临时加载了。
[*]如果没有详细信息的话,大概是工具没有识别出字幕,请检查一下字幕文件是否已经解压缩,格式是否为 ASS,字幕里是否有指定字体的命令。(如果不知道如何判断的话,可以挑一个字幕文件作为附件上传到贴子里)。

kelvintsang 发表于 2020-5-25 05:04:49

發覺最近重新安裝了windows,並更新到最新版本,使用這程式加載字體會閃退(拉字幕到程式,載入字幕 -> 立即閃退)
是不是有dependency 未安裝令到軟件出錯?
ps: winver 1909(18363.836)

yzwduck 发表于 2020-5-25 07:40:23

kelvintsang 发表于 2020-5-25 05:04
發覺最近重新安裝了windows,並更新到最新版本,使用這程式加載字體會閃退(拉字幕到程式,載入字幕 -> 立即 ...

这个工具没有 Windows 操作系统本身以外的 dependency,从描述来看,应该是遇到 bug 了。
能否将下列文件附在帖子里,这样我就能调查问题了。

[*]FontLoaderSub.exe
[*]fc-subs.db
[*]导致闪退的字幕

kelvintsang 发表于 2020-5-25 15:22:39

本帖最后由 kelvintsang 于 2020-5-25 15:25 编辑

yzwduck 发表于 2020-5-25 07:40
这个工具没有 Windows 操作系统本身以外的 dependency,从描述来看,应该是遇到 bug 了。
能否将下列文件 ...
從結論來看是所有字幕都會閃退不是某一個字幕造成的
我也試了不同字體
在加載的時候會閃退,不論字幕或字體是甚麼

我上傳了這些檔案,麻煩看看能不能debug




页: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17
查看完整版本: FontLoaderSub: 加载ass/ssa字幕所需字体的小工具 (r7-20200525)