特效字幕的字体选择: 硬性条件、同行分歧与反常规用法
Note
字体这事看起来最像审美, 其实里面有不少是硬条件: 缺字会乱码, 跨平台尺寸不一致会让屏幕字错位. 这些跟审美无关.
0x00 能判对错的三条要求
Anime 字幕论坛帖 5310 (楼主 Seekladoom, 2020-01-07) 给了三个场景:
横排: OPED 中日歌词和正文字幕不易缺字. 简体字幕不易缺字一般用方正的真 GBK; 繁体字幕不易缺字至少需要按 HKSCS 2008 标准做出来的字体, 最新的是 HKSCS 2016.
分行屏幕字: 基线不过高, 行距合适, 且有专门做假名字形满足中日混排需求, 确保视觉统一.
竖排: 特定集数 (第 1 集或关键剧情集数的片尾滚动 STAFF) 的 OP 或 ED、剧场版 ED 以及竖排屏幕字, 要保证字号和横排统一.
缺字会显示成乱码, 假名字形不足会让中日混排看着参差, 竖排字号不统一会一眼看出不齐. 它们与"好不好看"无关, 是能不能用的问题.
三条要求各对应一种缺失的能力: 缺字对应字符覆盖不足, 分行屏幕字对应假名字形不足, 竖排对应竖排字形或度量缺失.
这三条其实是同一件事的三个触发点, 都在问字体有没有某项能力. 按"这份字幕会用到哪些能力"列清单逐项查就行, 至少五项, 每项的查法分别是: 字符覆盖 (含生僻字与繁体) 看有无乱码; 假名字形质量看中日混排时的假名; 竖排支持看有无竖排样式; 度量精度看旋转类特效是否偏心; 字体体积看文件大小. 其中"度量精度"这一项来自技术交流群里「有些字体会出现偏心旋转」那条.
0x01 同一件事上的四种主张
那帖的回复区分歧很大, 而且不是口味之争.
主帖的核心主张是满足那三条要求的字体才称得上"耐用", 并据此筛出一份合格清单 (是筛出来的, 不是并列推荐): 方正细圆_GBK、方正准圆_GBK、方正粗圆_GBK、方正正黑 GBK 系列、方正雅宋 GBK 系列、方正悠宋 GBK 系列、华康圆体 W3-A / W5-A / W7-A、華康中黑體(P)-UN、華康楷書體W5(P)-UN、華康細明體(P)-UN、源樣黑體、源石黑體、源樣明體、源流明體、源雲明體、源泉圓體.
pyyii1987 的回应是「方正准圆就够了, 要啥自行车」. 楼主反驳说「方正准圆_GBK 在涉及到屏幕字的中日混排时的假名很难看, 远不及思源黑体和思源宋体的中日混排效果. 腾祥的腾祥嘉丽大圆 GB18030 专门做了假名, 横排字幕的中日混排效果比方正准圆_GBK 好多了」. 他后来还补了一句: 方正准圆_GBK 的假名后来改用了 Mplus 的假名, 但质量仍比不上专业日文字体.
H.D.Kun 提出另一条路:「圆体的话汉仪正圆也行吧, 中宫宽大阅读起来也舒适」. 楼主回应说汉仪正圆的 S 版本 (GB18030) 在 Win8 上做的 ASS 外挂字幕, 到 Win7 上用 PotPlayer 加载会变大几圈, 导致屏幕字错位. 官方字库站未上架的正是这个 S 版本, 当时它仅在字由平台出售.
心刀斩心鬼则问「泛 cjk 字体还不够吗」.
四条回复都在讨论假名字形与跨语种一致性, 没有一条讨论汉字本身.
0x02 实测: 13 份成品用了 31 种字体
把本地 13 份成品的 ^Style: 行全部读出来统计, 共出现 31 种字体. 取数口径是读 ^Style: 行的第二列字体名.
写这个统计时踩了个坑: 这些文件带 UTF-8 BOM, 用 utf-8 解码时 startswith("Style:") 会全部失败, 必须用 utf-8-sig. 用错编码时的结果是全库只统计到 2 种字体 (Noto Sans CJK 的 JP 与 SC), 其余 29 种全部漏掉.
import os
from collections import Counter
c = Counter()
for root, dirs, fs in os.walk("."):
for f in fs:
if not f.endswith(".ass") or ".bak" in f:
continue
# 必须用 utf-8-sig: 文件带 BOM, 用 utf-8 会让 startswith("Style:") 全部失败
s = open(os.path.join(root, f), encoding="utf-8-sig", errors="replace").read()
for line in s.split("\n"):
if line.startswith("Style:"):
parts = line[6:].split(",")
if len(parts) > 1:
c[parts[1].strip()] += 1 # 第二列才是字体名
for k, v in c.most_common(40):
print(k, v)
出现次数前列的字体, 日文商用 (Fontworks 系) 有 FOT-PopJoy Std B (36 个样式)、FOT-ニューロダン Pro M (12)、FOT-TsukuGo Pro B (12).
中文字体有方正少儿_GBK (6)、方正中粗雅宋_GBK (6)、方正兰亭准黑_GBK (4)、方正行楷_GBK (4).
开源泛 CJK 有 Noto Sans CJK JP (20)、Sarasa Gothic J Semibold (16)、更纱黑体 SC Semibold (13)、Noto Sans CJK SC (4)、Noto Sans CJK TC Light (3).
但总次数不能直接看. Arial 出现了 13 次, 听起来很多, 实际上它大多出现在 Default 与 *-furigana 这类兜底样式里, 不是这份作品的常用字体. 统计字体使用时要同时看它出现在哪些样式名上.
0x03 13 份成品全都做了中日配对
把每份文件的样式按语种归类 (名字含 furigana / jp / staff 的算日文侧, 含 cn / sc / tc 的算中文侧), 结果是: 没有任何一份用同一种字体扛两个语种.
配对的做法有三类.
天使の3P 的三份 (INNOCENT BLUE / 大切がきこえる / 羽ばたきのバースデイ) 都是日文用 FOT-PopJoy Std B、中文用方正少儿_GBK, 两族各管一边.
同族跨语种: 同一个字体家族的日文版配中文版. 无职转生《オンリー》日文用 Sarasa Gothic J Semibold, 中文用更纱黑体 SC Semibold.
同族不同子集: 同一个泛 CJK 字体的不同语种子集. 缘之空 OP 与 ED、东方都用 Noto Sans CJK JP 配 Noto Sans CJK SC.
命运石之门《ファティマ》属混合式: 日文侧用 FOT-MatisseV Pro B / FOT-TsukuGo Pro B / FOT-TsukuMin Pro E, 中文侧用方正韵动中黑_GBK.
0x04 主要矛盾是中日混排
上面两节指向同一件事: 中日混排的视觉统一才是字体选择的主要矛盾.
证据有两处. 一是帖子里四条回复全在讨论假名与跨语种一致性, 没人讨论汉字; 二是 13 份成品全部采用"分语种配字体"来回避这个矛盾.
针对这个矛盾有两种解法: 各用一套各自擅长的字体 (也就是上面说的配对), 或者在只能挑一套时选假名字形好的那套. 由此得到一条判据: 判断一套字体能不能单挑两个语种, 关键指标是假名字形质量; 在这件事上, 大部分泛 CJK 字体的汉字覆盖够用, 所以它不构成瓶颈. 验证方法是把同一句中日混排歌词分别用泛 CJK 字体和"中文黑体加日文黑体"渲染, 比较假名部分.
注意这条限定只针对"能否单挑"这一问; 字形覆盖本身依然是硬红线, 见 0x06.
另外实测到一组字号关系: 在这两个样本里, 注音正好是主字的一半. 无职转生主字 48、注音 24; 天使の3P 主字 36、注音 18. 同一文件里中文主字比日文主字小, 无职转生是日文 48、中文 42. 样本只有这两处, 还不能当通则用.
这个 0.5 倍是在"日文主字加日文假名注音"的组合下测出来的. 如果主字是中文而注音是日文, 能不能直接沿用, 没有验证过.
0x05 商用还是开源, 取决于要不要分发字体
帖子里推荐的合格字体里, 方正与华康系列都是商用字体, 其中"方正的真 GBK"被当作简体不易缺字的标准解法.
另一份材料 (Seekladoom 转述欧美字幕组 unanimated 的排版经验) 提到中文和日文字体的体积庞大问题, 以及字体子集化的解决方法. 也就是"选什么字体"在工程上受字体文件体积约束.
不外嵌字体时商用字体能用, 代价是观众没装字体、观感不一致; 要内嵌或子集化, 得先解决商用授权, 这时候开源泛 CJK 字体才是无风险选项.
佐证是本地 13 份成品里有 5 份用了开源泛 CJK 字体 (Noto Sans CJK 系列、Sarasa Gothic 与更纱黑体).
0x06 几条容易出错的实操细节
字形覆盖是硬红线. _Aegisub脚本_注音样式化.txt 第 464 行: 「换个字体, 有些字形幼圆没有」. 在注音、假名、生僻字的场景下, 覆盖率优先于气质.
有些字体会偏心: 常用自定义函数AutoTags及其变种的介绍.txt 第 534 行说 an5 给出的中心位置并不严格等于文字中心. 旋转与缩放类入场特效用之前先确认.
少出错排在气质前面. 技术交流群里有一条给新手的建议是 simhei, 理由是系统自带、编码兼容 (对字幕_压制_auto4使用的一些基础总结.txt 第 389 行); 同一份文件第 555 行还有一句「好的字幕就应该有好的字体, 改了一下字体, 感觉可爱多了」. 前者是底线, 后者是上限.
0x07 反常规用法: 目前只有原则, 没有实例
前面几节讲的都是"字体要跟用途相称". 但导图里有个分支专门讲反着来, 三条: 反差萌; 字体不和 STAFF 匹配、不按中日匹配的做法; 反其道而行之, 故意选让人不喜欢的字体和特效.
我想给第三条找个实例, 在 Seekladoom 仓库里找到一个看着对口的压缩包叫《Aegisub 特效字幕模板 - 文字乱码.rar》. 解压之后里面只有一个 179 字节的 txt, 内容讲的是怎么改 kara-templater.lua 加一行 utf8 = utf8.
那是技术说明, 不是风格实例. 导图那个分支也以「其他有待扩充」结尾, 也就是它自己也没写满.
所以这一节只能记下这个空缺: 反常规用法目前只有原则, 没有可核对的实现. 要不要用, 得自己拿主意, 没有现成的例子可参照.
硬条件之外还有一半是偏好, 上面这些判据一条也管不着.
本文没有引用站内其它文档。

