优化字幕观看体验
本文最后更新于 2024年12月21日 晚上
虽然步骤略微繁琐,但对观看体验有极大的提升。
一、引子
错误的字幕渲染
常看动漫或者演唱会视频的肯定知道,有些字幕组做的字幕非常炫酷。但是可能会出现一些奇怪的方框或者是黑边,这就是错误的字幕渲染,很影响观看体验。
放几个正确和错误的字体渲染对比(上正下错,左正右错):
用 BT 下载的文件通常会包含一个 Fonts 文件夹,里面包含了字幕会使用到的字体,在 PC 或 MAC 上,播放器通常会自动识别到 Fonts 文件夹并调用其中的字体来渲染字幕。
但在手机或者其他设备上,尤其用一些媒体库软件比如 Emby 的话,字体可能无法被调用,只能忍受默认字体,如果字幕是 .SRT 的话,那简直是灾难。
好在可以把字体封装进视频中,但不是所有的字幕类型都可以进行子集化。下面先介绍三种字幕类型。
二、字幕类型
1.外挂
把字幕放在视频之外,一般是 .SRT .SUP .ASS 后缀,极其少见 .PGS 后缀。
这种字幕通常和视频名称相同,且放在视频的同级目录,在播放视频时,播放器会自动加载,也可以手动指定让播放器加载特定字幕。
2.内封
把字幕封装在视频格式容器内部,看起来只是一个视频文件,实际上内部包含了一个或多个字幕文件。
3.内嵌
字幕被压制到画面内,已经成为画面的一部分。
这种形式通用性最强,但弊端同样明显,在相同的码率下,压制了字幕的视频会比未压制的略模糊,仔细观察字幕边缘的话,还能看到画面劣化的现象。
我们可以直接处理外挂字幕,内封需要用 Aegisub 提取出来后处理,内嵌字幕无法处理。
三、处理思路
封什么字体
1.封原版字体
好在有办法解决这个问题,那就是用 MKVToolNix 把音视频流封装到 MKV 中并以附件形式添加用到的字体文件。不过一个字幕动辄用到十几个字体,中文字体包又比较大,把他们全部封装进去那一个视频的体积要暴涨几十到几百兆,12 集的番剧都这么弄,体积更是大大增加。而且更严峻的问题是,在线播放的话,会拖慢加载速度,重复耗费流量下载字体。所以这种方案并不完美。
2.封子集化处理后的字体
如果把字体文件进行处理,只保留字幕用得到的字形,这个过程就被称为“字体子集化”,生成的字体文件即“子集字体”(Subset-Subtitles)。经过处理后的字体体积通常仅有原字体的百分之一,此时再封装,可以最大限度缩小成品的体积。
封到哪里
1.封入字幕
这种方案可以很方便地分享制作好的字幕。可在用 Emby 安卓客户端时,字体无法加载渲染。奇怪的是苹果的 Emby 正常,infuse 也正常。
2.封入 MKV
分析了最近 Lolihouse 做的 “GIRLS BAND CRY” ,发现他们使用的方式是:
MKV 封装音视频流、字幕,并以附件形式引入各种子集字体。
兼容性对比
字体封入字幕 | MKV 封装 | |
---|---|---|
Emby 网页端 | 不可用 | 不可用 |
Emby 客户端 | 不可用 | 可用 |
Tips:
- Emby 网页端不支持的原因是网页不支持直接播放 MKV 流,Emby 会转码为 HLS 再播放。所以实际上浏览器没有接收到字体文件。
- 表格中不可用的部分只是无法加载字体,特效还是可以正常渲染的。
明确思路
到这一步,我们就厘清了处理的思路:
用 MKV 做容器,封装音视频流和不包含字体的 ASS 字幕,以附件的形式把字体添加到 MKV 容器中。
四、Aegisub
分离字幕并加入特效
分离内封字幕(外挂字幕跳过此步骤)
直接将视频拖入 Aegisub,会发现视频被正确加载了,但字幕栏没东西,此时需要点击“从视频中打开字幕”。
使用“另存为”把字幕导出为 .ASS格式。
Tips:也可以用“字体收集器”查看字幕用到了哪些字体。
双击存好的 ASS 字幕文件即可打开进入下一步。
自定义特效
1.选择要加特效的条目
只想针对某一类字幕(如对话)加入特效的话,可以利用选择“多行功能”。
在选项里可以看到对话都打了带 Sub 的样式标记,那么可以在样式里搜索 Sub 来批量选择。
如果字幕制作时没有添加分类就不能用这个方法了。
2.加入样式
以加入一个模糊特效为例子,使用搜索替换功能处理刚刚选中的字段
^:在正则中代表字段首
{\\blur5}:模糊特效其实是一个 \ ,但一个会和后边的字幕连起来被识别为转义字符。
这里的要点是使用正则表达式,在文本中搜索并限制所选行。
替换好后,特效处理就完成了,这是效果。
五、AssFonts
识别字幕用到的字形,并子集化字体。
推荐设置
Font Combined 把一集当中的多个字幕文件合并处理。
若同时存在简繁两条字幕,打开 combined 只会生成一份子集字体,而非简体一份繁体一份。
Subset Only 仅生成子集字体,不嵌入 .ASS 文件。
⚠️ 正如前述,字体如果嵌入 .ASS,无法被 Emby 的安卓客户端识别,兼容性没有字体作为附件封入 MKV 的方式好。
子集化
多个字幕的话先把他们归集到同一个文件夹,单个字幕的话忽略此步骤
归集好应该是这个样子
Tips:在 Mac 上,列表模式选中所有文件夹,⌘ + → 可以展开所有文件夹。
设置好 AssFonts 的几个路径选项,数据库可以随便点个位置,不建立数据库照样能用。
然后按照图示把字幕拖到 Input,软件会自动输入同目录为 Output,最后输出的子集化字体会打包放到 subsetted_fonts 中,这也是上面步骤要归集文件的原因。
如此处理完所有字幕,进入混流步骤。
六、MKVToolNix
混流
先把要处理的视频文件全选导入工具,并为每一个视频新建一个设置页面。
针对每一个视频的设置页签,向其中拖入字幕文件,这次要选择“作为输入文件添加到当前混流设置”。
按照文件名,对照色标,设置好字幕信息
这里注意,简体中文应该在语言代码填写 zh-Hans,繁体中文则是 zh-Hant。
最后在附件中直接将对应集的字幕拉到附件中,工具会自动添加路径下的所有字体
混流,输出即可。
七、其他事项
重命名文件
输出的文件最后会有个(1),在 Mac 上全选重命名即可。
体积对比
处理后文件体积的增长微乎其微。