cyilin / Emby字体解决办法

Created Sun, 13 Jul 2025 20:32:08 +0800 Modified Sun, 14 Dec 2025 23:57:19 +0800

前言

最近时间充裕,没事就补番或者二刷老番,这自然是要用我花了大心思弄得emby

这不用不知道,一用吓一跳阿。在部分番剧中,较为生僻的简体中文会出现 “口口口” 的现象。比如这样:

虽然出现的机率很小,也几乎不怎么影响观感,但就像猫儿挠木板一样在刺挠着我的神经,让我久久不得入睡。为了晚上的睡眠质量, 我决定速速解决这个问题。

解决方案

折腾过上古卷轴mod和翻译的我很明确知道这是字体缺失造成的,于是经过我谷歌和ai的一顿搜索,我轻松就获得了解决方案——字体子集化

字体子集化:简单来说,它会从完整的字体文件中只提取出你的项目实际用到的字符,然后生成一个新的、更小的字体文件。

也就是说只要对所有出现了口口口的字幕进行一次子集化就没什么事情了。

然而,我的字幕数量繁多,且不知道那些字幕是需要子集化的。如果所有字幕都进行一次,那得通宵了。而且子集化所需的前置工具准备也略微繁琐,详情请看初之音的字体解决方案博客

这时我灵光一闪——有没有能在视频播放时候实时进行子集化的emby插件呢!?

有的兄弟,包有的!

在我第二次搜索中,发现了一个满足我需求的工具——fontInAss(github真是宝库啊,这是第几次在上面发现可解燃眉之急的项目了)

fontInAss

fontInAss是实时将字体子集化后嵌入ass的小工具,用于在未安装对应字体的系统上正确显示字幕。

其提供了手动安装和docker快速部署两种方案。虽然不是可以直接内嵌在emby中的插件,但是我恰好有nas,这点差别也不用多在意。

我是个懒狗,docker部署自然就成了最佳选择。其部署方式也非常简单,作者也给出了部署的命令:

docker run -d --name=fontinass --restart=unless-stopped \
  -p 8012:8012 \
  -e EMBY_SERVER_URL=http://[ip]:[port] \
  -v /etc/fontinassData:/data \
  -v /path/to/your/fonts:/fonts \
  riderlty/fontinass:latest

当然也可以使用我自己写得compose模板:

services:
  fontinass:
    image: riderlty/fontinass:latest
    container_name: fontinass
    restart: always
    ports:
      - "8012:8012" # 后续访问emby/jellyfin的实际地址
    environment:
      - EMBY_SERVER_URL=http://[ip]:[port] # emby/jellyfin服务器地址
    volumes:
      - /fontInAss/data:/data
      - /fontInAss/fonts:/fonts # 完整字体文件位置,子集化所需的原始字体都会从这个地方抽取

EMBY_SERVER_URL:自己的emby/jellyfin服务器地址,最好用http链接。

我们把一些搜罗到的原始、完整字体仍在映射/fonts的路径即可。我个人是推荐vcb的超级字体整合包

这样就大功告成,后续访问映射了该docker的8012的端口就ok了,fontInAss会自动实时处理子集化,口口口问题也成功被解决。

结尾

虽然问题不大,但是迅速解决还是很有成就感的。这次也是在github上找到具体的解决办法,而且听闻前段时间github有了10亿个仓库,再次不得不感慨github的哆啦a梦属性。

不多说,继续看番,摇曳露营真好看啊。