Files
UHD_Media_Tool/docs/plan/subtitles.md
T
rootandClaude Opus 5.5 7aa5182f3d feat: 功能清单进智能体提示,补字幕按功能模块约定改为样板
- 外围功能模块(补字幕、原站视图、桌面模式、网页搜索、MCP、定时任务)声明 manifest,与 FEATURES 一一对应;
  系统提示「能力地图」末尾列出外围功能(没有开关,能力只列本次可用的)
- 补字幕:订阅 organization.finished(认出值得补字幕的整理,自动补字幕还没做,不建任务),
  写入字幕后在同一事务发 subtitle.written;原有行为不变

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 19:27:14 +08:00

47 lines
5.4 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 翻译联动、入库后自动补字幕不做。自动补字幕以后接进我们自己的工作流(整理完成、订阅缺字幕、智能体调用),复用本模块的能力,不照插件的事件队列做。
功能模块样板(ADR-006,2026-10-06):本模块已声明 manifest、订阅 `organization.finished`(认出值得补字幕的整理,自动补字幕还没做,只记调试日志)、写入后发 `subtitle.written`;前端经插槽挂在作品页操作区与整理记录行菜单。做自动补字幕时把订阅路由换成真实任务即可。
## 拆分
| 层面 | 放在哪 |
| --- | --- |
| 字幕站的登记、代理、限流、健康、浏览器会话 | 复用站点体系:新站点类型「字幕站」(`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 采样模板,在沙箱里);② 没过就由智能体视觉在浏览器里接管;③ 智能体也没过就转人工。
- 何时接管:字幕库请求遇到云锁验证码页,沙箱识别提交 3 次仍是验证码页(或识别不出字符),且自动化总开关开着。SubHD 现在的下载页前端已没有验证码这一步(2026-10-03 抓页确认),只保留旧 SVG 识别,不接管。
- 怎么接管:用该字幕站的匿名浏览器会话打开同一地址;页面已不是验证码页(例如人刚在原站视图里过过)就直接算过;否则派视觉子流程(系统发起,截图读码、输入、点「点击继续访问网站」,≤ 6 步、1 次,预算取智能体设置),按页面上「网站访问认证页面」字样消失核实。
- 结果:过了 → 读回浏览器里该站的 Cookie 并进字幕库请求的 Cookie 罐,重开原页面,搜索 / 下载照常继续,用户无感;没过 → 会话转等待处理,待处理事项「字幕库需要你在原站视图里过一次验证码」(附子流程每步截图),本次搜索报错并提示去原站视图;人过完交还后再搜,接管时发现页面已放行,直接带回 Cookie。
- 原站视图手动下载(与 PT 站「下载当前资源」同一思路):字幕站的原站视图工具栏是「下载当前字幕」。人在原站视图里打开一条字幕详情页(SubHD `/a/<sid>`、字幕库 `/detail/<id>.html`)→ 点按钮 → 选作品 → 补字幕对话框自动带着浏览器里的 Cookie 下载这一条、解压、按季集配对到视频,可逐个改写到哪个视频后写入,历史记来源。
- 下载结果走与上传相同的解析 → 预览 → 写入。
## 分步
1. 手动上传:解析、配对预览、写入、历史与撤销、作品页入口。(v0.3.22 完成)
2. 字幕站类型 + SubHD / 字幕库搜索下载(第 ① 层验证码),站点页与添加站点;rar / 7z。(v0.3.24 完成;解压、页面解析、验证码都在沙箱里,见 ADR-005)
3. 验证码智能体视觉接管 + 原站视图「下载当前字幕」。(v0.3.25 完成)
实测记录(2026-10-03):字幕库搜索、验证码、下载、解压、配对全链路通;SubHD 搜索通,下载流程与单独实测一致,但当晚测试请求较多后 SubHD 对本机限流(直连与代理都超时),需要隔天复测。
复测(2026-10-03 晚):SubHD 按豆瓣 ID 搜索、prepare-download、下载全通,连续下载 7 个未触发验证码。