3.1 KiB
3.1 KiB
补字幕(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 站过人机验证同一流程,可人工接管);③ 智能体视觉处理页面挑战。
- 下载结果走与上传相同的解析 → 预览 → 写入。
分步
- 手动上传:解析、配对预览、写入、历史与撤销、作品页入口。(v0.3.22 完成)
- 字幕站类型 + SubHD / 字幕库搜索下载(第 ① 层验证码),站点页与添加站点。
- 验证码第 ② ③ 层兜底(浏览器、智能体)。