7e0acef4f9
- Add complete skill set including feishu, github, ci-gen, etc. - Add workspace documentation (AGENTS.md, SOUL.md, etc.) - Add memory system and project context
3.2 KiB
3.2 KiB
长视频分段分析功能 - 开发记录
日期: 2026-02-06 任务: 解决 obsidian-kb 技能中长视频上下文溢出问题 方案: 方案C - 动态混合策略(<30min直接分析,30-60min分2段,60min+分多段)
已完成工作
✅ Checkpoint 1: 基础结构
- 创建
src/content_chunker.py- 字幕分段工具类 - 更新
config.yaml- 添加 chunking 配置节点 - 配置支持:30分钟/60分钟阈值,15分钟分段,6000字符限制
✅ Checkpoint 2: 核心逻辑
- 修改
src/multi_ai_client.py - 添加
_analyze_in_chunks()- 分段分析主方法 - 添加
_analyze_chunk()- 单段摘要生成 - 添加
_merge_summaries()- 合并摘要生成最终结果
✅ Checkpoint 3: 测试
- 创建
tests/test_chunking.py- 单元测试框架 - 创建
tests/fixtures/sample_long_video.srt- 测试数据 - 创建
test_long_video.py- 手动测试脚本 - 所有测试通过
功能说明
分段策略
| 视频时长 | 处理策略 | API调用次数 |
|---|---|---|
| < 10分钟 | 直接分析 | 1次 |
| 10-30分钟 | 截断至8000字符分析 | 1次 |
| 30-60分钟 | 分2段分析 | 3次 |
| 60分钟+ | 每15分钟一段 | N+1次 |
使用方法
from src.content_chunker import ContentChunker, get_chunking_strategy
# 获取分段策略
strategy = get_chunking_strategy(duration_seconds=3600) # 60分钟视频
print(strategy['num_chunks']) # 输出: 4
# 分段字幕
chunker = ContentChunker(chunk_duration_seconds=900)
chunks = chunker.chunk_by_duration(srt_text)
文件变更
skills/obsidian-kb/
├── src/
│ ├── content_chunker.py [新增] 字幕分段工具
│ └── multi_ai_client.py [修改] 添加分段分析逻辑
├── config.yaml [修改] 添加 chunking 配置
├── tests/
│ ├── test_chunking.py [新增] 单元测试
│ └── fixtures/
│ └── sample_long_video.srt [新增] 测试数据
└── test_long_video.py [新增] 手动测试脚本
测试结果
============================================================
测试分段策略
============================================================
5分钟视频 (300秒):
策略: direct
分段: 1段
30分钟视频 (1800秒):
策略: chunk_2
分段: 2段
60分钟视频 (3600秒):
策略: chunk_4
分段: 4段
2小时视频 (7200秒):
策略: chunk_8
分段: 8段
============================================================
测试SRT解析和分段
============================================================
✅ 读取字幕文件: 6339 字符
📊 分段结果: 总分段数: 3
第1段: 00:00:00.000 - 00:15:30.000, 1331字符
第2段: 00:15:30.000 - 00:31:00.000, 1214字符
第3段: 00:31:00.000 - 00:43:00.000, 877字符
============================================================
测试完成!
============================================================
状态
🟢 已完成 - 功能已实现并测试通过
现在30分钟以上的长视频会自动分段处理,不会再出现 "Context overflow: prompt too large for the model" 错误。