找回密码
 立即注册

【工具分享】基于浏览器的ASS字幕字体嵌入子集化工具

回帖奖励 4200 活跃度 回复本帖可获得 100 活跃度奖励! 每人限 1 次(中奖概率 80%)
  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 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加群一起交流和分享想法哦(在工具右上角点开的讨论区可见入口),也祝你晚安。
    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 700 天

    [LV.9]以坛为家II

    3

    主题

    27

    回帖

    16

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    57199
    皆神孝介 发表于 2026-6-14 21:43:51 | 显示全部楼层

    回帖奖励 +100 活跃度

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

    尝试用了一下
    686793573.png
    这个按钮按下去,肿么没反应?

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

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 2026-6-15 01:04:26 | 显示全部楼层
    皆神孝介 发表于 2026-6-14 21:43
    尝试用了一下

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

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

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

    此外,如果还是遇到问题,请提供使用的浏览器、具体版本、字幕、字体用于排查。
    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 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楼)提前支持。
    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

    该用户从未签到

    17

    主题

    120

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    12133
    QH7B 发表于 2026-6-17 15:14:50 | 显示全部楼层

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

    [VCB-Studio] Ore No Imoto II [02][Hi10p_1080p][x264_flac]_optimized.jpg
    我之前单独编译了一版正在使用的子集化工具就是因为这个原因,但是特殊参数会导致部分字体子集化失败,如方正悠宋系列,所以一直没有找到一个通用的解决方法,希望楼主能研究一下这个问题。
    这个是图片中的字幕和字体文件: sub.zip (9.64 MB, 下载次数: 29)

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 2026-6-18 05:15:07 | 显示全部楼层
    本帖最后由 蒙太奇字幕组 于 2026-6-18 06:23 编辑
    QH7B 发表于 2026-6-17 15:14
    楼主你好!
    本人在制作媒体库的过程中需要对大量字体进行子集化,发现个别特殊字体使用正常的子集化参数, ...

    你好,感谢反馈。

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



    -----

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

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


    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

    该用户从未签到

    17

    主题

    120

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    12133
    QH7B 发表于 2026-6-18 08:54:44 | 显示全部楼层

    回帖奖励 +100 活跃度

    本帖最后由 QH7B 于 2026-6-18 08:56 编辑
    蒙太奇字幕组 发表于 2026-6-18 05:15
    你好,感谢反馈。

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



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



    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 2026-6-19 04:08:02 | 显示全部楼层
    本帖最后由 蒙太奇字幕组 于 2026-6-19 04:20 编辑
    QH7B 发表于 2026-6-18 08:54
    感谢回复!
    没错,就是hinting的问题,去掉 HB_SUBSET_FLAGS_NO_HINTING 参数保留hinting就好了。
    但是 ...

    Screenshot.png

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

    主要改进如下:

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

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

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

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

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

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

















    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 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 子集化后截图,预览和实际一致。
    Screenshot.png

    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2026-3-16 19:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    98

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    78176
    蒙太奇字幕组  楼主| 发表于 2026-6-21 20:03:23 | 显示全部楼层
    本帖最后由 蒙太奇字幕组 于 2026-6-21 21:00 编辑

    近期更新一览:

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

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

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

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

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


    本账号目前由蒙太奇字幕组小p管理和使用。其他成员使用时会标注发言人身份。部分发言可能包含发言人的个人观点,并不一定代表字幕组官方立场。


    蒙太奇字幕组 · MontageSubs
    “用爱发电 ❤️ Powered by Love”
    回复

    使用道具 举报

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

    本版积分规则

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