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
118 lines
3.2 KiB
Markdown
118 lines
3.2 KiB
Markdown
# 长视频分段分析功能 - 开发记录
|
|
|
|
**日期**: 2026-02-06
|
|
**任务**: 解决 obsidian-kb 技能中长视频上下文溢出问题
|
|
**方案**: 方案C - 动态混合策略(<30min直接分析,30-60min分2段,60min+分多段)
|
|
|
|
---
|
|
|
|
## 已完成工作
|
|
|
|
### ✅ Checkpoint 1: 基础结构
|
|
- [x] 创建 `src/content_chunker.py` - 字幕分段工具类
|
|
- [x] 更新 `config.yaml` - 添加 chunking 配置节点
|
|
- [x] 配置支持:30分钟/60分钟阈值,15分钟分段,6000字符限制
|
|
|
|
### ✅ Checkpoint 2: 核心逻辑
|
|
- [x] 修改 `src/multi_ai_client.py`
|
|
- [x] 添加 `_analyze_in_chunks()` - 分段分析主方法
|
|
- [x] 添加 `_analyze_chunk()` - 单段摘要生成
|
|
- [x] 添加 `_merge_summaries()` - 合并摘要生成最终结果
|
|
|
|
### ✅ Checkpoint 3: 测试
|
|
- [x] 创建 `tests/test_chunking.py` - 单元测试框架
|
|
- [x] 创建 `tests/fixtures/sample_long_video.srt` - 测试数据
|
|
- [x] 创建 `test_long_video.py` - 手动测试脚本
|
|
- [x] 所有测试通过
|
|
|
|
---
|
|
|
|
## 功能说明
|
|
|
|
### 分段策略
|
|
|
|
| 视频时长 | 处理策略 | API调用次数 |
|
|
|---------|---------|------------|
|
|
| < 10分钟 | 直接分析 | 1次 |
|
|
| 10-30分钟 | 截断至8000字符分析 | 1次 |
|
|
| 30-60分钟 | 分2段分析 | 3次 |
|
|
| 60分钟+ | 每15分钟一段 | N+1次 |
|
|
|
|
### 使用方法
|
|
|
|
```python
|
|
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" 错误。
|