feat: VRSub 单体应用(WOV 单机版)初始提交

为视频生成 VR 双眼字幕的单体实现:FastAPI 后端、调度器与全部节点
(提音/转写/翻译/ASS/抽帧/OCR/LLM 过滤)在单进程内运行。

- 节点协议(wov_sdk 数据模型)与分布式版保持一致,预留回退桥梁
- 工作流即数据:DAG 存于 workflows/*.json,模型/链路改动只改数据
- 调度器:拓扑顺序执行、断点续跑(产物重建)、任务暂停/继续
- 抽帧按帧间隔(select 按帧号精确取帧),VLM OCR 与 LLM 过滤使用
  自适应线程池弹性并发,并打印数据处理速度进度日志
- 100% 行覆盖率(pytest --cov-fail-under=100)
This commit is contained in:
2026-08-16 23:58:25 +08:00
commit 4746e0363f
75 changed files with 10969 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
{
"id": "ocr-subtitle",
"name": "字幕OCR提取",
"description": "抽帧并 OCR 提取视频烧录字幕,经 LLM 过滤无意义内容后生成带时间轴的 SRT 基准数据。",
"version": 3,
"definition": {
"name": "字幕OCR提取",
"version": 3,
"nodes": [
{
"id": "extract",
"node_type": "frame-extract",
"params": {
"interval_seconds": 0.5,
"crop": [
0,
0.82,
1,
0.18
]
},
"inputs": {
"video_uri": "input.video_uri"
}
},
{
"id": "ocr",
"node_type": "subtitle-ocr",
"params": {
"prompt": "提取图像中的文字,不要描述图片中的内容"
},
"inputs": {
"frames_manifest": "extract.frames_manifest"
}
},
{
"id": "filter",
"node_type": "llm-filter",
"params": {},
"inputs": {
"srt_uri": "ocr.srt_uri"
}
}
],
"edges": [
{
"from": "extract",
"to": "ocr"
},
{
"from": "ocr",
"to": "filter"
}
],
"entry_inputs": {
"video_uri": "file"
},
"final_outputs": {
"srt": "filter.srt_uri"
}
}
}