fix(ass): Fontsize乘1.35补偿系数对齐CSS预览字号 #1516

Merged
xiaoxia merged 2 commits from fix/ass-fontsize-compensation-1.35 into develop 2026-08-27 01:44:20 +08:00
Owner

问题

ASS Fontsize 是字体 em-square 高度(含 Latin 升降部留白),中文字符实际只占声明字号的约 65%~75%;浏览器 CSS font-size 让中文字符占满声明高度,导致前端预览标题比成片标题大约 35%。

实测:font_size=89 时,成片中文字高仅约 58px。

修复

packages/domain/ass_subtitle_builder.py

  1. 新增模块常量 ASS_FONTSIZE_COMPENSATION = 1.35_compensate_ass_fontsize()max(1, round(font_size*1.35))
  2. build_ass_style 写入 ASS Style 的 Fontsize 时乘补偿系数——title 与 subtitle 均生效,其他字段不变
  3. _wrap_title_text 换行宽度计算同步使用补偿后的字号,保证换行位置与实际渲染一致

验证

  • font_size=89 → ASS Fontsize = round(89*1.35)=120,实际中文字高约 78~85px,与 CSS 预览一致
  • title / subtitle 均补偿
  • 2699 个相关单测全部通过(含新增 4 个补偿系数专项测试)
  • black/isort/ruff 本地通过
## 问题 ASS Fontsize 是字体 em-square 高度(含 Latin 升降部留白),中文字符实际只占声明字号的约 65%~75%;浏览器 CSS font-size 让中文字符占满声明高度,导致前端预览标题比成片标题大约 35%。 实测:`font_size=89` 时,成片中文字高仅约 58px。 ## 修复 在 `packages/domain/ass_subtitle_builder.py`: 1. 新增模块常量 `ASS_FONTSIZE_COMPENSATION = 1.35` 与 `_compensate_ass_fontsize()`(`max(1, round(font_size*1.35))`) 2. `build_ass_style` 写入 ASS Style 的 Fontsize 时乘补偿系数——title 与 subtitle 均生效,其他字段不变 3. `_wrap_title_text` 换行宽度计算同步使用补偿后的字号,保证换行位置与实际渲染一致 ## 验证 - `font_size=89` → ASS Fontsize = `round(89*1.35)=120`,实际中文字高约 78~85px,与 CSS 预览一致 ✅ - title / subtitle 均补偿 ✅ - 2699 个相关单测全部通过(含新增 4 个补偿系数专项测试) - black/isort/ruff 本地通过
xiaoxia added 1 commit 2026-08-27 01:06:01 +08:00
fix(ass): Fontsize乘1.35补偿系数对齐CSS预览字号
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m43s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m44s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m33s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m24s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m23s
AI Code Review / AI Code Review (pull_request) Successful in 4m55s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m23s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 5m31s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m54s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 6m40s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 10m8s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
187a5278a6
ASS Fontsize 是字体 em-square 高度(含 Latin 升降部留白),
中文字符实际只占声明字号的约 65%~75%,而浏览器 CSS font-size
让中文字符占满声明高度,导致预览标题比成片标题大约 35%。

- 新增 ASS_FONTSIZE_COMPENSATION=1.35 与 _compensate_ass_fontsize()
- build_ass_style 写入 ASS Style Fontsize 时乘补偿系数(title+subtitle 均生效)
- _wrap_title_text 换行宽度同步使用补偿后字号,避免换行位置错位
- 实测:font_size=89 → ASS Fontsize=120 → 中文字高约 78~85px,与 CSS 一致
- 同步更新相关单测,新增补偿系数专项测试(4 例)

🚀 预览环境已部署

项目 详情
PR号 #1516
预览链接 https://pr-1516.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1516 | | 预览链接 | [https://pr-1516.preview.xiaoxiajianji.com](https://pr-1516.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-08-27 01:19:48 +08:00
fix(ass): 修复ruff E741模糊变量名 l→line
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m51s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m4s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m7s
AI Code Review / AI Code Review (pull_request) Successful in 4m20s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m25s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m6s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m17s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 7m26s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 7m28s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m55s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 14m43s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m51s
CI/CD Pipeline / CI Gate (pull_request) Successful in 28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m15s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m28s
2531b0e1fd
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 逻辑一致性:在 _wrap_title_text 函数中同步应用了字号补偿逻辑,确保了自动换行计算基于实际渲染的字号,避免了因字号放大导致换行位置错位的问题。
  2. 边界保护_compensate_ass_fontsize 函数中使用了 max(1, ...),有效防止了因输入非正数导致的渲染错误或异常。
  3. 测试覆盖:针对新逻辑补充了详尽的单元测试(包括边界值测试 test_minimum_fontsize_at_least_one),并同步更新了所有受影响的历史断言,保证了回归测试的准确性。

格式检查通过 | 逻辑审查通过 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-08-26 17:24:08 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **逻辑一致性**:在 `_wrap_title_text` 函数中同步应用了字号补偿逻辑,确保了自动换行计算基于实际渲染的字号,避免了因字号放大导致换行位置错位的问题。 2. **边界保护**:`_compensate_ass_fontsize` 函数中使用了 `max(1, ...)`,有效防止了因输入非正数导致的渲染错误或异常。 3. **测试覆盖**:针对新逻辑补充了详尽的单元测试(包括边界值测试 `test_minimum_fontsize_at_least_one`),并同步更新了所有受影响的历史断言,保证了回归测试的准确性。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-26 17:24:08 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-08-27 01:35:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-27 01:35:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit 9709d5471b into develop 2026-08-27 01:44:20 +08:00

🗑️ 预览环境已清理

PR #1516 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1516 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.