蒙太奇字幕组 发表于 2026-6-14 04:57:32

本帖最后由 蒙太奇字幕组 于 2026-6-14 05:07 编辑

HanTaNiA 发表于 2026-6-14 02:54
是的,我在第二次回复中特意强调了这是对于我提到的这一种需求:



聊了那么久都忘记自我介绍了,顺便一说,我是小p,这个工具开发者和维护者,也是在这个论坛用字幕组账号发帖的人。

关于你的帖子中,实际上有两处理解和我的设计有些差异,所以我需要逐一解释下。

第一个是关于随机化字体名。你提到的"改成子集化后的标识",我在这里必须澄清,那个"标识"其实就是所谓的"随机化字体名",但这并非子集化所必需的功能。

我的工具最开始时根本不支持随机化,直到2.6+才开始支持的。之所以后来加入这个功能,是因为社区内其他工具这样做,而随机化字体名其实是中文字幕社区在子集化基础上开发的新功能。产生这个需求的原因是,子集化和MKV多集打包这两个东西有点鱼和熊掌不可兼得,多集打包时可能会引起一些播放器因缓存问题导致丢字符,所以随机化就是为了解决这个问题。

但我的工具默认设计是不随机化的。你在字幕里写着"思源黑体",那么字幕内的字体引用完全不会改,保留原始字体名称,只是字幕里额外多了内嵌字体部分,且内嵌的字体仍然叫"思源黑体"。这是我一开始的设计哲学。

后来在2.6才意识到随机化的作用,随即加入了随机化功能,并且更进一步,采用字体内映射表新规范。这样的好处是,即便字幕内头部的映射表丢失也没有关系,只要你有字幕和随机化的字体,他们就能自动匹配。这样既能实现双向转换,也不需要依赖写在字幕文本里的映射信息。如果感兴趣可以看看这里:https://github.com/MontageSubs/a ... F%E8%A7%84%E8%8C%83

第二个误解是关于"完整嵌入字体"选项。这里我必须澄清,完整嵌入并不是用来嵌入已经子集化的字体的,整个工具默认行为就是子集化、无随机的子集化。"完整嵌入字体"选项的真实含义是,比如你的字幕引用了思源黑体,实际使用1500个字符,但思源黑体内部其实有5到6万个字符。完整嵌入就是把整个思源黑体都嵌入进去,完全不进行子集化。


这样做的好处是什么呢?

第一,欧美字幕社区对子集化需求几乎没有,日韩也很少,子集化只是中文字幕社区在中文字符很多的场景下开发的功能。对于欧美和日韩来说,完整嵌入才是他们所需的,毕竟一个英文字体才几MB,字母字符也就几十个。

第二,对于中文字幕社区也有优势。子集化有个诟病,就是你无法修改字幕。比如说你的字幕使用了10个字符,于是你嵌入了对应的字体,但后来你想改进翻译,字符变成了15个不同的字符,此刻如果你继续复用之前嵌入的子集化字体必然会缺字,所以必须重新子集化。而如果嵌入完整字体就不存在缺字的可能性,也无需重新处理。

实际上你使用的场景完全无需勾选"完整嵌入字体",因为你上传的已经是子集化字体了,勾选和不勾选的效果是一样的。不过如果你后面修改了字幕导致新增了之前字体里不存在的字符,那么你继续上传那个已经随机化的FACAS561字体是无法确保缺字被解决的,因为那个子集里根本不包含你新增的字符。所以此刻就需要上传原始的完整字体"Aa方萌"。在2.7.2版本,你两个字体都可以上传,无论是随机化后的还是原始的完整字体。如果有缺字,日志里会显示缺少几个字符。

我还想额外提示一下,在2.7.2中,如果你上传随机化字体和随机化字幕之后,没有勾选UI里的"随机化字体名称"选项,工具会生成还原的"原始字幕加内嵌字体"。这就是我前面说的最初设计哲学。如果你需要保留内部的随机化,只需要勾选那个选项即可。

但说实话,如果你没有遇到播放器缓存导致上下集缺字的问题,我个人是不建议这样做的。这也是UI那个很显眼的警告信息存在的原因。基本上随机化是为了修补其他人(播放器)错误的缓解措施,不应该被视为字幕内嵌字体的标准做法,因为它根本不是标准。

另外我们在不同的时区,所以活动时间会不同。

也欢迎你可以通过Telegram或者IRC加群一起交流和分享想法哦(在工具右上角点开的讨论区可见入口),也祝你晚安。

皆神孝介 发表于 2026-6-14 21:43:51

本帖最后由 皆神孝介 于 2026-6-14 22:05 编辑

尝试用了一下

这个按钮按下去,肿么没反应?

追加:
换个了任务,好像又能下载了

蒙太奇字幕组 发表于 2026-6-15 01:04:26

皆神孝介 发表于 2026-6-14 21:43
尝试用了一下

这个按钮按下去,肿么没反应?


感谢反馈,从截图来看,可能是你选择了完整嵌入字体,字体和字幕太多,打包需要时间。

如果希望子集化则无需选中“完整嵌入字体”,否则体积会增大很多的。

此外,如果还是遇到问题,请提供使用的浏览器、具体版本、字幕、字体用于排查。

蒙太奇字幕组 发表于 2026-6-17 02:34:19

本帖最后由 蒙太奇字幕组 于 2026-6-17 02:36 编辑

2.7.3版本发布。

该版本是2.8版本的前置发布,包含已在2.8-beta中实现且已稳定的功能。由于具有独立性且2.8还需要时间,因此提前单独发布。

更新内容:

    1. 修复字体多名映射问题

之前存在同一字体的不同名称被识别为不同字体的问题。例如"思源黑体"和"Source Han Sans"会生成两个子集化文件。2.6.19版本修复了此问题(讨论见23楼),但引入了新的限制:在随机化字体模式下,因为随机化映射表采用一对一关系,如果一个字体有多个名字但映射表只有一个,转换后会导致失真且不可无损还原为原始的多个名字。

2.7.3找到了一个解决方案。Source Han Sans和思源黑体各自独立映射为随机名字,但仍指向同一字体。字体在不同语言版本下分别保存为随机名字,生成两份映射表,从而支持完整的无损还原。

    2. 新增字幕与字体分离选项

下载字幕时,在下载按钮旁增加了"字体分离"选项。启用后字体不会嵌入ASS文件,而是独立打包提供。此功能为2.8版本即将推出的MKV制作流程(详见32楼)提前支持。

QH7B 发表于 2026-6-17 15:14:50


楼主你好!
本人在制作媒体库的过程中需要对大量字体进行子集化,发现个别特殊字体使用正常的子集化参数,子集化前后显示效果偏差会比较大,例如:


我之前单独编译了一版正在使用的子集化工具就是因为这个原因,但是特殊参数会导致部分字体子集化失败,如方正悠宋系列,所以一直没有找到一个通用的解决方法,希望楼主能研究一下这个问题。
这个是图片中的字幕和字体文件:

蒙太奇字幕组 发表于 2026-6-18 05:15:07

本帖最后由 蒙太奇字幕组 于 2026-6-18 06:23 编辑

QH7B 发表于 2026-6-17 15:14
楼主你好!
本人在制作媒体库的过程中需要对大量字体进行子集化,发现个别特殊字体使用正常的子集化参数, ...
你好,感谢反馈。

不过我读了你的内容,看图,还有用附件测试了,也没理解到底遇到了什么问题?看起来一切正常啊?字体被正确嵌入到字幕中了,并且子集化了。 已读取 3 个字体文件,正在识别...
3 个文件的识别详情(点击展开)
✓ 字体识别完成,共 3 个已匹配。
开始转换...
正在处理「FA 丸ゴシックM」(常规,147 字符)...
「FA 丸ゴシックM」(常规): 2834 KB → 58 KB(缩减 98%)
正在处理「方正准圆_GBK」(常规,184 字符)...
「方正准圆_GBK」(常规): 9678 KB → 84 KB(缩减 99%)
正在处理「方正康体_GBK」(常规,29 字符)...
「方正康体_GBK」(常规): 6125 KB → 21 KB(缩减 100%)
重写字幕文件...
完成。40 KB → 262 KB(222.2 KB)还得麻烦你详细解释下具体遇到了什么问题。


-----

哦,子集化前后的"FA 丸ゴシックM"字体一对比,差距确实很明显,有些笔画变形了。可能是hinting的问题,可以考虑在未来版本兼容一下。

暂时缓解措施是在 UI 里选择“完整嵌入字体”这会保留所有字体数据,但是预览不会,预览不支持 hinting 计算像素。


QH7B 发表于 2026-6-18 08:54:44

本帖最后由 QH7B 于 2026-6-18 08:56 编辑

蒙太奇字幕组 发表于 2026-6-18 05:15
你好,感谢反馈。

不过我读了你的内容,看图,还有用附件测试了,也没理解到底遇到了什么问题?看起来 ...


感谢回复!
没错,就是hinting的问题,去掉 HB_SUBSET_FLAGS_NO_HINTING 参数保留hinting就好了。
但是这样做好像会导致有些字体子集化失败,例如梦源字体,目前只能针对这些字体单独加上这个flag。
不知道有没有其他方法让所有字体都能在保留hinting的同时顺利子集化,在两个版本的参数之间来回切换有点麻烦。



蒙太奇字幕组 发表于 2026-6-19 04:08:02

本帖最后由 蒙太奇字幕组 于 2026-6-19 04:20 编辑

QH7B 发表于 2026-6-18 08:54
感谢回复!
没错,就是hinting的问题,去掉 HB_SUBSET_FLAGS_NO_HINTING 参数保留hinting就好了。
但是 ...


我刚刚发布了 2.7.4 版本进行了初步修复。

主要改进如下:

1. UI 预览时检测到 hinting 可以正确计算像素进行渲染,目前 UI 预览已经修复,生成子集字体还没有完善,生成效果如图所示,我还需要进一步研究你的字体。

2. 字幕和字体分离按钮从下载按钮旁边挪到了上方。

3. 还有一些其他小改进。

如果急需使用该功能还是推荐“完整嵌入字体”选项,该选项目前嵌入效果如下方所示(UI 已支持 hinting):


由于本工具使用的子集化技术和其他工具都不同,但是欢迎你提供可能产生错误输出的字体和字幕,这样我可以测试。目前已经发现“方正准圆_GBK”进行子集化计算时可能会导致计算错误或者性能问题,我认为你说的“梦源字体”可能有更严重问题,欢迎提供案例以便测试。

计划在 2.8 版本之前修复并实现该功能。

















蒙太奇字幕组 发表于 2026-6-19 20:38:39

本帖最后由 蒙太奇字幕组 于 2026-6-21 21:04 编辑

QH7B 发表于 2026-6-18 08:54
感谢回复!
没错,就是hinting的问题,去掉 HB_SUBSET_FLAGS_NO_HINTING 参数保留hinting就好了。
但是 ...
2.7.6 版本已发布。

2.7.5 及 2.7.6 版本实现了对字体 Hinting 数据的完整支持。同时,此前计划的连体字(Ligature)功能也已一并上线。 (更新:2.7.9 版本因为兼容性要求取消了对大部分语言连字支持,但是对依赖连字的语言则不子集化,完整保留连字信息。)

本工具不同于传统的修剪模式,而是通过直接提取源字体的字符及相关数据,搬运到新创建的 TTF 字体中(部分转换会有损,但是提高兼容性),从而实现了对 TTF / OTF / TTC / OTC / WOFF / WOFF2 等多种字体格式的原生支持。

目前测试主要集中在 TTF/TTC 格式,若在使用其他字体格式时发现 Hinting 数据解析异常,欢迎反馈。

2.7.4-2.7.6 版本更新内容如下:

          1. UI 支持 Hinting、Ligature 等相关配置。

          2. 优化表拷贝机制:通过遍历原始字体的 numTables,完整保留输入字体中的所有表(包括 GSUB, GPOS, fpgm, prep, cvt, gasp 等),确保 Hinting 与 Ligature 数据得以保留。

欢迎测试并反馈。如遇到曾导致出错的字体,也欢迎提供案例或附件进行排查。

再次感谢 @QH7B 对这个工具的支持,已经帮助优化和贡献了多个版本!

----

此外,其实现在加入各种新表后子集化字体增大了不少,但是兼容性更好,原先 FA 丸ゴシックM_0.ttf 大小是 57KB,现在是 107KB,该文件仅有 147 字符。

但是为了兼容性考虑,还是默认全部启用好。

下面是最新版 2.7.6 子集化后截图,预览和实际一致。


蒙太奇字幕组 发表于 2026-6-21 20:03:23

本帖最后由 蒙太奇字幕组 于 2026-6-21 21:00 编辑

近期更新一览:

2.7.7:
修复了再次对一个字幕进行子集化时旧的字段可能未正确清理的错误。

2.7.8:
修复了 2.7.5 版本试图引入 hinting 支持,导致字体的checksum计算错误,Windows下报告字体是无效字体问题,字体损坏问题。

2.7.9:
修复了 2.7.5 版本中引入的字体损坏问题。此前的实现为了在子集化后保留连字效果,将原始字体的 GSUB/GPOS 表原样整体复制进子集化后的字体。由于这些表内部引用的是原始(未子集化)字体的字形索引,子集化完成后这些索引全部失效,导致字体在 Windows 下被判定为损坏文件(提示"不是有效的字体文件"),尽管在部分其他渲染环境中看似可以正常使用。

现已按以下方式修复。对于中日韩、拉丁语等不严格依赖上下文整形即可正常阅读的语言,子集化流程保持不变,但不再将 GSUB/GPOS(连字与上下文定位)表复制进子集化后的字体。这在个别情况下可能造成排版精细度的轻微损失(例如拉丁文 "fi" 连字,或日文竖排专用字形变体),但不影响可读性。

对于必须依赖上下文整形才能正确显示的语言,这些语言将被明确排除在子集化范围之外,改为完整嵌入原始字体,从而完整保留原始的 GSUB/GPOS 表与字形索引。目前涵盖的语言包括:阿拉伯语、叙利亚语、它纳语(迪维希语)、恩科语、曼达语、天城文(印地语等)、孟加拉语、古尔穆奇文(旁遮普语)、古吉拉特语、奥里亚语(奥里亚文)、泰米尔语、泰卢固语、卡纳达语、马拉雅拉姆语、僧伽罗语、泰语、老挝语、藏语、缅甸语、高棉语(柬埔寨语)、蒙古语。


页: 1 2 3 4 [5] 6
查看完整版本: 【工具分享】基于浏览器的ASS字幕字体嵌入子集化工具