本文修改自 解决 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 客户端无效。