Files
UHD_Media_Tool/docs/plan/subtitles.md
T

37 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 补字幕(2026-10-03 定)
参考 MoviePilot 插件「海拉鲁字幕大师」(ifsherlock/MoviePilot-Plugins `plugins.v3/subtitlemanualupload` 1.2.6)。本项目只取**手动上传**和**在线搜索**;调轴、AI 翻译联动、入库后自动补字幕不做。自动补字幕以后接进我们自己的工作流(整理完成、订阅缺字幕、智能体调用),复用本模块的能力,不照插件的事件队列做。
## 拆分
| 层面 | 放在哪 |
| --- | --- |
| 字幕站的登记、代理、限流、健康、浏览器会话 | 复用站点体系:新站点类型「字幕站」(`site.kind = subtitle`),站点页单列一组,添加站点时选「字幕站」 |
| 解析、配对、写入、历史、在线搜索与下载 | 新模块 `subtitles`(server)+ `packages/domain/src/subtitles`(纯函数)+ `packages/adapters/src/subtitles`(SubHD / 字幕库) |
| 入口 | 作品页「补字幕」:上传 / 在线搜索 → 预览配对 → 写入;同页看历史、撤销 |
## 写入规则(用户确认)
- 写在视频同目录,`视频主干名 + 语言后缀 + 扩展名`;语言后缀沿用整理规则 `sidecarLanguageSuffix`(`.chi.zh-cn` / `.zh-tw` / `.eng` / `.ja` / `.ko`)。
- 同名字幕已存在:先备份到数据目录(不在媒体库里留 `.bak`),再临时文件 + 改名原子写入。
- 写入后登记为字幕资产(`media_asset.kind = subtitle`,位置 `sidecar_of_location_id` 指向视频),记一条历史;撤销 = 删掉写入的文件,有备份就还原。
- 只写进作品在媒体库里的视频所在目录(媒体库根目录已启用);字幕和压缩包内容走 JSON(base64),服务端不留临时文件。
## 解析与配对(对照插件 `matching/subtitle_language.py`、`upload/upload_session.py`)
- 支持 `.srt .ass .ssa .vtt .sub .sbv` 和 `.zip`(rar / 7z 先不做,插件也要依赖容器里的 unar)。
- 语言:先看文件名标签(chs / cht / 简体 / 繁體 / eng / 双语 …),再看内容(CJK、假名、谚文、繁体常用字比例);中英双语按简中处理(与整理规则一致)。
- 季集:用文件名解析(复用资源名解析器);电影只有一个目标。对不上的留空让人选;同一集多个字幕按语言区分,同语言重复的提示。
## 在线(SubHD、字幕库)
- 搜索词:作品中文名、原名、年份,剧集带季号;结果按标题与季集匹配度排序,对不上的不列。
- 验证码三层兜底:① 代码识别(SubHD SVG 路径长度表、字幕库 BMP 采样模板,插件里各 80 行左右);② 浏览器服务打开页面(与 PT 站过人机验证同一流程,可人工接管);③ 智能体视觉处理页面挑战。
- 下载结果走与上传相同的解析 → 预览 → 写入。
## 分步
1. 手动上传:解析、配对预览、写入、历史与撤销、作品页入口。(v0.3.22 完成)
2. 字幕站类型 + SubHD / 字幕库搜索下载(第 ① 层验证码),站点页与添加站点。
3. 验证码第 ② ③ 层兜底(浏览器、智能体)。