使用 fontinass 自动为 emby 字幕补全字体并配置反向代理

1、实时将字体子集化后嵌入ass的小工具,用于在未安装对应字体的系统上正确显示字幕
2、批量字幕字体子集化嵌入后保存于本地。

项目地址:Github

graph LR
    %% 定义节点形状和样式
    A(客户端)
    B{nginx}
    C[后端服务器]
    D[fontinass服务器]

    %% 节点连接关系与标签
    A <-->|http请求| B
    B -->|其他API请求| C
    B -->|字幕文件请求| D
    D -->|原始字幕文件| C
    D -->|子集化后的字幕文件| B

    %% 定义样式颜色
    style A fill:#f2d7d9,stroke:#f2d7d9,color:black,rx:15,ry:15
    style B fill:#ebd19e,stroke:#ebd19e,color:black
    style C fill:#d2e6f9,stroke:#d2e6f9,color:black,stroke-width:0px
    style D fill:#d2e6f9,stroke:#d2e6f9,color:black,stroke-width:0px

由于 latest tag 自带一个nginx进行反向代理,不适合已经部署了反向代理的玩家再去套娃,所以作者还提供了 noproxy tag,供用户自行设置反向代理。

1
2
3
4
5
6
7
docker run -d --name=fontinass --restart=unless-stopped \
-p 8011:8011 \
-p 8012:8012 \
-e EMBY_SERVER_URL=http://[ip]:[port] \
-v /yourDir/fontinass/data:/data \
-v /yourDir/fontinass/fonts:/fonts \
riderlty/fontinass:noproxy

根据项目 readme 描述

有需求的用户可参考手动部署,映射8011端口并配置字幕接口的nginx反向代理
location ~* /videos/(.*)/Subtitles/(.*)/(Stream.ass|Stream.ssa|Stream.srt|Stream.)$

这里以 NginxProxyManager 为例,在 emby 的反向代理设置中添加如下设置

1
2
3
4
5
6
7
8
9
10
11
12
# custom locations
location ~* /videos/(.*)/Subtitles/(.*)/(Stream.ass|Stream.ssa|Stream.srt|Stream.)$ {


include proxy-headers.conf;
proxy_set_header Accept-Encoding "";


proxy_pass http://upstream_5_location_0$request_uri;


}

在 web UI 中是这样的

NPMplus中的设置

注意 X-Frame-Options 要设置为 upstream

随便播放一个视频,然后在 ip:8011 查看日志验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
🤖 17:30:28.968 .INFO    字幕URL: http://******/emby/Videos/182379/mediasource_182379/Subtitles/2/0/Stream.ass?api_key=******
🤖 17:30:29.036 .INFO 尝试下载字体 [CDN:超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:29.039 .INFO 尝试下载字体 [CDN:超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:29.878 .INFO 从CDN加载字体 9.30MB 841.98ms [('黑体', 700, True) <== CDN:超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:29.913 .INFO 子集化 38 个字符 15.11ms [黑体]
🤖 17:30:29.931 .INFO 网络字体已保存 [/fonts/download/超级字体整合包 XZ/超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:29.946 .INFO 从CDN加载字体 9.30MB 906.22ms [('黑体', 700, False) <== CDN:超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:29.953 .INFO 子集化 1072 个字符 7.11ms [黑体]
🤖 17:30:29.954 .INFO ass分析 31.43ms
🤖 17:30:29.954 .INFO 子集化嵌入 929.18ms
🤖 17:30:29.955 .INFO 字幕处理完成: 0.12MB ==> 0.47MB
🤖 17:30:29.955 .INFO ----------------------------------------------------------------
🌏 17:30:29.955 .INFO ****** - "GET /emby/Videos/182379/mediasource_182379/Subtitles/2/0/Stream.ass?api_key=****** HTTP/1.1" 200
🤖 17:30:29.985 .INFO 网络字体已保存 [/fonts/download/超级字体整合包 XZ/超级字体整合包 XZ/完整包/其他/简繁/黑体.ttf]
🤖 17:30:34.992 .INFO 分析了 1 个字体,耗时 4.31ms