From 74fffbfccb44a1edf2f6e2eeab1b1f38ff289258 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 26 Aug 2026 18:06:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Noto=20Sans=20CJK?= =?UTF-8?q?=20SC=20Bold=20=E5=AD=97=E4=BD=93=E6=B7=B7=E5=85=A5=20Mono=20?= =?UTF-8?q?=E7=AD=89=E5=AE=BD=E5=8F=98=E4=BD=93=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: fonts-noto-cjk apt 包安装的 .ttc 文件同时包含 Sans 和 Sans Mono 变体, 导致 fc-list 中 Bold 样式匹配到等宽字体(Noto Sans Mono CJK SC Bold), 视频标题加粗渲染时使用等宽字体,与前端预览的非等宽字体不一致。 修复: 1. 删除有问题的 NotoSansCJK-Regular.ttc 和 NotoSansCJK-Bold.ttc 2. 从 Google Fonts 下载单独的 Noto Sans SC Variable Font(不含 Mono) 3. 刷新字体缓存,确保 fontconfig 使用正确的字体 影响范围:api-base.Dockerfile 和 worker-base.Dockerfile 验收标准: - fc-list 中 Noto Sans CJK SC 的 Bold 变体不再是等宽字体 - 视频标题加粗渲染与前端预览一致 --- infra/docker/api-base.Dockerfile | 13 ++++++++++++- infra/docker/worker-base.Dockerfile | 15 +++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/infra/docker/api-base.Dockerfile b/infra/docker/api-base.Dockerfile index 72117a8f1..38ca1abdb 100644 --- a/infra/docker/api-base.Dockerfile +++ b/infra/docker/api-base.Dockerfile @@ -12,6 +12,8 @@ RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debia sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true # 预装系统依赖(gcc 编译 psycopg/pg 扩展,libpq-dev 编译期,libpq5 运行期,ffmpeg 封面取帧) +# 字体修复:fonts-noto-cjk 包的 .ttc 文件混入了 Mono 变体,导致 Bold 匹配到等宽字体 +# 解决方案:删除有问题的 .ttc,从 Google Fonts 下载单独的 Noto Sans SC(不含 Mono) RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ @@ -19,7 +21,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ fonts-noto-cjk \ fontconfig \ - && rm -rf /var/lib/apt/lists/* + curl \ + && rm -rf /var/lib/apt/lists/* \ + # 删除有问题的 .ttc 文件(包含 Mono 变体) + && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc \ + && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc \ + # 下载单独的 Noto Sans SC(Variable Font,包含所有字重,不含 Mono) + && curl -fsSL -o /usr/share/fonts/opentype/noto/NotoSansSC-VF.ttf \ + "https://github.com/google/fonts/raw/main/ofl/notosanssc/NotoSansSC%5Bwght%5D.ttf" \ + # 刷新字体缓存 + && fc-cache -fv # 创建虚拟环境 RUN python -m venv /opt/venv diff --git a/infra/docker/worker-base.Dockerfile b/infra/docker/worker-base.Dockerfile index 660104809..a1958b88c 100644 --- a/infra/docker/worker-base.Dockerfile +++ b/infra/docker/worker-base.Dockerfile @@ -12,6 +12,8 @@ RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debia sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true # 预装系统依赖(编译工具 + 运行时 + CJK 字体用于 ASS 字幕渲染) +# 字体修复:fonts-noto-cjk 包的 .ttc 文件混入了 Mono 变体,导致 Bold 匹配到等宽字体 +# 解决方案:删除有问题的 .ttc,从 Google Fonts 下载单独的 Noto Sans SC(不含 Mono) RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ @@ -20,8 +22,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ libglib2.0-0 \ fonts-noto-cjk \ - && fc-cache -fv \ - && rm -rf /var/lib/apt/lists/* + fontconfig \ + curl \ + && rm -rf /var/lib/apt/lists/* \ + # 删除有问题的 .ttc 文件(包含 Mono 变体) + && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc \ + && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc \ + # 下载单独的 Noto Sans SC(Variable Font,包含所有字重,不含 Mono) + && curl -fsSL -o /usr/share/fonts/opentype/noto/NotoSansSC-VF.ttf \ + "https://github.com/google/fonts/raw/main/ofl/notosanssc/NotoSansSC%5Bwght%5D.ttf" \ + # 刷新字体缓存 + && fc-cache -fv # 创建虚拟环境 RUN python -m venv /opt/venv -- 2.54.0