优化字幕观看体验

本文最后更新于 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:

  1. Emby 网页端不支持的原因是网页不支持直接播放 MKV 流,Emby 会转码为 HLS 再播放。所以实际上浏览器没有接收到字体文件。
  2. 表格中不可用的部分只是无法加载字体,特效还是可以正常渲染的。

明确思路

到这一步,我们就厘清了处理的思路:

用 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 上全选重命名即可。

体积对比

处理后文件体积的增长微乎其微。


优化字幕观看体验
https://seailor.com/posts/a0b93f0f/
作者
Seailor
发布于
2024年12月18日
许可协议