logo
0
0
WeChat Login
fix: 修复 ASS 多行文本渲染与字体家族名解析

TINA Sub (Tcax In Node.js Architecture)

一个类似 TCAX特效字幕制作工具,用 TypeScript 从头重写。

项目结构

TCAX/ # 原版 TCAX 参考(git submodule) packages/ ├── core/ # 纯 Node.js 字幕引擎(已完成) ├── web/ # React/Vue 前端 PWA(规划中) └── electron/ # Electron 桌面客户端(可选) tools/ ├── ass-libass-screenshot/ # FFmpeg+libass 截图验证工具(已完成,全局命令: ass-sc) └── ass-screenshot/ # Canvas 渲染截图工具(规划中) test/ # 测试用 TCC/ASS 文件

@tcax/core — 核心引擎

纯 TypeScript 实现,零原生依赖,可在无显示器的服务器上运行。

已完成功能

模块状态说明
ASS 解析/生成✅ 完成完整解析 Script Info / Styles / Events 三段式结构,支持 Format 行动态映射、时间转换、卡拉 OK 标签提取
SYL 音节解析✅ 完成三种 K Mode:syllable(逐字)/ word(原分段)/ advanced(两字一组),含翻译行去重与 Kar 时间矩阵
TCC 配置解析✅ 完成30+ 字段完整支持,round-trip 序列化,含默认配置工厂
特效脚本引擎✅ 完成动态 import() 加载用户 JS/TS 脚本,兼容 TCAX Python 命名约定(tcaxPy_Main/main),内置回退搜索机制
特效注册表✅ 完成6 大类别扫描(in/main/eft/out/ext/all)、元数据提取、运行时注册注销、多语言 i18n 搜索
渲染管线✅ 完成8 步流水线:TCC 解析 → ASS/SYL 构建 → 文本度量 → Init/Main/Fin 生命周期 → 排序输出
字体引擎✅ 完成双引擎架构:OpenTypeFont(fontkit,Node.js + 浏览器)+ CanvasFont(浏览器),支持 OS/2 修正、TTC 合集字库、Kerning 字距调整
TCAX API 层✅ 完成90+ 个 API 函数完全兼容 tcaxPy 命名:pos/move/fsc/frz/color/k/ko/kf/t/pix* 等
像素操作✅ 纯 JS9 个函数:pixPos/pixFromPoints/pixInvertA/pixR2A 等,Uint8Array 实现(暂无 WASM 加速)
CLI 命令行✅ 基本完成tcax render <project.tcc> + --info 模式
类型系统✅ 完善53 个 ValId 映射、i18n 元数据、EffectParamDef 支持 UI 编辑器

内置特效脚本

ID类别效果多语言
in_001入场淡入 Fade Inzh/en/ja
main_001主体验静态显示 Static Displayzh/en/ja
eft_001卡拉OK变色 Color Changezh/en/ja
out_001出场淡出 Fade Outzh/en/ja

技术栈

  • TypeScript — ESM 模块,Node.js >= 18
  • @foliojs-fork/fontkit — 纯 JS OpenType 字体解析(唯一运行时依赖)

快速开始

# 方式一:一键安装(推荐) bash setup.sh # 方式二:手动安装 cd packages/core && npm install && npm run build && npm link cd tools/ass-libass-screenshot && npm install && npm run build && npm link # 渲染字幕项目 tcax render project.tcc -o output.ass -w ./workdir # 查看项目配置信息 tcax render project.tcc --info # 截图验证渲染效果(支持 MM:SS / H:MM:SS.cc / 秒小数 等格式) ass-sc subtitle.ass --time 0:58 -o screenshot.png --fonts-dir ./fonts

部署方式

形态说明
npx 直接运行npx @tcax/cli render project.tcc 无需预安装
npm 全局安装npm i -g @tcax/cli && tcax render ...
pkg 二进制编译为单文件可执行,无需 Node.js 环境
Dockerdocker run tcax render ...

tools/ass-libass-screenshot — 渲染验证工具(全局命令: ass-sc

基于 FFmpeg + libass 的 ASS 字幕截图工具,产生与 mpv/VLC 像素级一致的渲染结果。用于验证 core 生成的 .ass 文件在播放器中的实际效果是否正确。

时间格式支持: MM:SSH:MM:SS.cc、秒小数(58.5)、原始厘秒(整数)

# 全局命令使用(setup.sh 安装后) ass-sc subtitle.ass --time 0:58 -o screenshot.png --fonts-dir ./fonts # 或直接运行 node node tools/ass-libass-screenshot/dist/index.js subtitle.ass -t 00:01:30 -o screenshot.png

开发计划

详见 doc/project-plan.md

核心引擎已基本完成,下一步将开发 Web/PWA 前端编辑器。