ASS 字幕字体子集化:从原理到实践
终于收藏整理的BD破500了,本次放出一个自己用的项目



什么是 ASS 字幕?
ASS(Advanced SubStation Alpha)是一种功能强大的字幕格式。与常见的 SRT 字幕相比,ASS 字幕支持:
- 自定义字体——可以为不同的文本指定不同字体
- 特效与动画——淡入淡出、卡拉 OK 效果、位移动画
- 精确定位——字幕可以放在画面的任意位置
- 丰富样式——边框、阴影、颜色渐变等
这些能力让 ASS 字幕成为了番剧字幕组的首选格式,尤其是制作精良的内嵌特效字幕。
但 ASS 的表现力依赖一个前提:播放端必须有字幕引用的字体。
字体问题的由来
问题很简单:你的电脑上可能装了方正FW筑紫A丸ゴシック、思源宋体、华文行楷,但你的电视、手机、平板上大概率没有。
缺少字体时,播放器会使用默认字体来替代。于是原本精心排版的字幕变成了这样:
- 标题用的艺术字体 → 变成宋体
- 日文假名的特殊字体 → 变成方块豆腐
- 精心调整的字距和行距 → 全部错乱
这就引出了两种常见情况:
情况一:字幕裸奔,完全没有字体
很多时候,你从网上下载的字幕就是一个光秃秃的 ASS 文件,里面引用了一堆花里胡哨的字体名,但字体本身?没有。不在 MKV 里,也不在压缩包里,字幕组默认你自己去找。
于是你打开视频,字幕全是宋体,特效字变成了方块豆腐,歌词字幕挤成一坨——这就是”字幕裸奔”的下场。想看正常效果?你得自己满世界找字体,手动安装到系统里,而且换一台设备就要重来一遍。
| 原效果 | 子集化嵌入字体后 |
|---|---|
![]() | ![]() |
情况二:字体全塞进去,体积爆炸
负责任的字幕组会把字体打包进 MKV 容器。MKV 支持附件(Attachment),可以把 TTF/OTF 字体文件嵌入视频文件中。这样无论在哪台设备播放,字体都在。
但问题来了——一个 CJK(中日韩)字体动辄 20-70MB,一部番剧字幕引用 5-6 个字体是常态。于是一个 200MB 的视频,嵌入字体后轻松变成 400MB。
两难困境
不带字体,效果崩坏;带完整字体,体积翻倍。字体子集化就是解决这个两难问题的方案。
什么是字体子集化?
**字体子集化(Font Subsetting)**的核心思想非常简单:
字幕里只用了 200 个汉字,为什么要嵌入包含 30000+ 字形的完整字体?
子集化就是从完整字体中只提取字幕实际用到的字形,重新打包为一个精简的字体文件。
一个实际的例子:
| 完整字体 | 子集化后 | |
|---|---|---|
| 思源黑体 | 16.4 MB | ~200 KB |
| 方正FW筑紫A丸ゴシック | 8.7 MB | ~150 KB |
| 总计 6 个字体 | 70 MB | ~2 MB |
没错,70MB 的字体可以压缩到 2MB,而视觉效果完全不变——因为字幕需要的每一个字形都完整保留了。
子集化的好处
节约存储空间
这是最直观的好处。一季 12 集番剧,每集节省 200MB 字体,整季就能节省 2.4GB 空间。
加快网络传输
无论是 NAS 串流到电视,还是在线播放,更小的文件意味着更快的缓冲和更少的卡顿。30Mbps 带宽下,200MB 字体需要约 53 秒才能加载完,而 2MB 只需要不到 1 秒。
跨设备兼容
子集化后的字体可以嵌入到 ASS 文件本身(通过 UUEncode 编码的 [Fonts] 段),或者嵌入 MKV 容器。无论在什么设备上播放——电视、手机、平板、电脑——都能正确显示字幕样式,无需手动安装字体。
简化分发
一个包含嵌入字体的 ASS 文件,就是一个完全自包含的字幕文件。分享给别人时,不需要额外附带字体包。
现有工具
字体子集化并非新概念,社区已有一些优秀的工具:
Assfonts
Assfonts 是一个跨平台的 GUI/CLI 工具,支持 Windows、macOS 和 Linux。它可以从本地字体库中查找字幕引用的字体,进行子集化后嵌入 ASS 或打包进 MKV。
MkvAutoSubset
MkvAutoSubset 等工具也提供了类似的功能,主要面向 MKV 封装场景。
本地工具的痛点
这些工具都很好用,但有一个共同的限制:它们都是本地工具。
- 需要在本地维护一个庞大的字体库(通常几十 GB)
- 换一台电脑就要重新配置
- 服务器上没有 GUI 环境时使用不便
- 字体库更新需要手动管理
FontInAss —— 我的在线子集化方案
受 Assfonts 的启发,我开发了 FontInAss——一个基于 Cloudflare Workers 的全在线字幕字体子集化服务。
之前我写过一篇 使用 Docker Compose 部署 fontInAss 字幕字体处理服务,介绍了如何自托管 FontInAss 并与 Emby/Jellyfin 集成,实现播放时自动处理字幕字体。今天这篇文章则从原理层面展开,聊聊字体子集化本身,以及 FontInAss 在线版的设计。
为什么做这个?
我的需求很简单:我不想在每台电脑上都维护一个几十 GB 的字体库,我希望有一个在线服务,上传 ASS 文件就能得到子集化后的结果。
核心特点
- 全在线:基于 Cloudflare Workers,无需安装任何软件
- 海量字体库:105GB 字体库(VCB-Studio + Lam 字体集),存储在 Cloudflare R2 对象存储
- 批量处理:一次最多上传 20 个文件
- 多格式支持:支持 ASS / SSA / SRT 格式,SRT 自动转换为 ASS
- 智能字体匹配:根据 weight、italic 等属性评分匹配最合适的字体
- 缓存加速:KV 缓存(7 天 TTL),相同请求秒返回结果
- 中英文双语:界面支持中文和英文切换
使用方式
- 访问 font.anibt.net
- 将 ASS / SSA / SRT 文件拖拽到上传区域(或点击选择文件)
- 等待处理完成
- 下载子集化后的文件
如果遇到字体库中缺少的字体,可以通过网站上的留言功能或 Telegram 联系提交字体需求。


结语
字体子集化是一个看似小众但实际影响很大的优化手段。它能让你的番剧体积减半,让串流播放更流畅,让字幕在任何设备上都完美呈现。
如果你是字幕组成员、动画收藏爱好者、或者 NAS 用户,不妨试试 FontInAss。有任何问题或建议,欢迎反馈。

