注意:Jellyfin 在 10.7 以后的版本中修复了 ASS 字幕显示的问题。因此你只需要升级到最新版的 Jellyfin 即可。

如果你仍然看到了中文字符被显示成方块,注意在客户端前往设置(不是控制台)的字幕设置中,将“烧录字幕”选项设置成“所有复杂格式字幕(……)”,然后就可以了。

不过如果 ASS 字幕试图使用系统中不存在的字体,你仍然需要手动安装。在 Docker 环境下,字幕文件需要放置到容器中的 /usr/share/fonts 目录中。

本文修改自 解决 Jellyfin 10.6.x 中文字幕方块问题

ASS 字幕显示问题是由于缺少字体导致的。因此需要我们修改 Jellyfin 的前端文件,让 Jellyfin 向客户端提供中文字体。字体可以选择官方扩展字体: NotoCJK

PS: 字体中常见的 CJK 后缀表示 Chinese-Japanese-Korean,即表示支持中文、日文和韩文字体。

然后我们进入 Jellyfin Docker 的命令行。Jellyfin Docker 命令行内部我们可以使用 apt 命令来安装 vim, wget 等工具方便我们处理文件(Unraid 上没有自带 vim,而其自带的 nano 的一些快捷键和网页冲突,如 nano 的搜索快捷键是 ctrl + W,和关闭网页是重合的)。

1
2
apt update
apt install -y vim wget zip

然后进入 /jellyfin/jellyfin-web/plugins/htmlVideoPlayer/ 目录,编辑该目录下的 plugin.js 文件

1
2
3
# 编辑前保存一个副本
cp plugin.js plugin.js.bak
vim plugin.js

全局搜索找到下面的代码段完成替换

1
2
- apiClient=connectionManager.getApiClient(item)
+ attachmentsFonts=attachments.map(function(i){return i.DeliveryUrl})
1
2
- fonts:attachments.map(function(i){return apiClient.getUrl(i.DeliveryUrl)})
+ fonts:attachmentsFonts.concat(appRouter.baseUrl()+"/libraries/NotoSerifCJKsc-Medium.woff2")

然后下载字体到 /jellyfin/jellyfin-web/libraries/ 目录下

1
2
3
4
cd /jellyfin/jellyfin-web/libraries/
wget https://github.com/jellyfin/jellyfin-web/files/4434292/noto.zip
unzip -q noto.zip
mv noto/*.woff2 ./

接下来前往网页端清除浏览器缓存即可。

实际操作中,进入 Chrome Console 禁用缓存仍然无效,需要同时清理网站的 Cookie。

以上方法只对网页端有效,对于 iOS 客户端无效。