216 lines
5.3 KiB
Markdown
216 lines
5.3 KiB
Markdown
# 视频导出功能实现总结
|
||
|
||
## 已完成的工作
|
||
|
||
### 1. 创建 `video_cutter.py` 模块
|
||
|
||
**功能**:
|
||
- 解析图片名,提取视频名和时间点
|
||
- 根据视频名找到原始视频文件
|
||
- 使用 ffmpeg 切割视频
|
||
- 支持4种导出模式:around/after/before/total
|
||
|
||
**核心函数**:
|
||
- `parse_image_info(image_name)` - 解析图片名
|
||
- `find_video_file(video_name)` - 查找视频文件
|
||
- `get_video_duration(video_path)` - 获取视频时长
|
||
- `cut_video(video_path, start_time, end_time, output_path)` - 切割视频
|
||
- `export_video_clip(image_name, mode, minutes)` - 导出视频片段
|
||
|
||
### 2. 修改 `chat_bot.py`
|
||
|
||
**添加内容**:
|
||
- 在 `tool_list` 中添加 `export_video` 工具
|
||
- 在 `test_openai` 中添加工具定义(包含参数说明)
|
||
- 在 `sen_mess` 方法中添加处理逻辑
|
||
|
||
**工具定义**:
|
||
```python
|
||
{
|
||
"name": "export_video",
|
||
"description": "当用户确认某张图片并要求导出视频时调用此工具",
|
||
"parameters": {
|
||
"image_name": "图片文件名",
|
||
"mode": "around/after/before/total",
|
||
"minutes": "分钟数(默认5)"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 修改 `weixin_sender.py`
|
||
|
||
**添加内容**:
|
||
- 在 `weix` 类中添加 `send_video` 方法
|
||
- 当前实现:发送文字提示(视频已保存到服务器)
|
||
- 后续可扩展:直接发送视频文件
|
||
|
||
### 4. 创建测试和文档
|
||
|
||
**测试文件**:
|
||
- `test_video_export.py` - 完整测试脚本
|
||
|
||
**文档文件**:
|
||
- `INSTALL_FFMPEG.md` - ffmpeg 安装说明
|
||
- `VIDEO_EXPORT_README.md` - 使用说明文档
|
||
- `VIDEO_EXPORT_SUMMARY.md` - 本文件
|
||
|
||
**更新文件**:
|
||
- `CLAUDE.md` - 添加视频导出功能说明
|
||
|
||
## 用户交互流程
|
||
|
||
### 场景1:前后5分钟
|
||
|
||
```
|
||
用户:找一下猫和老鼠里汤姆追杰瑞的场景
|
||
AI:(发送相似图片)
|
||
|
||
用户:第一张图不错,给我前后5分钟的视频
|
||
AI:✅ 视频已导出!
|
||
📁 文件名:001 Puss Gets the Boot [1940]_03m23s-07m23s.mp4
|
||
📂 保存位置:./export_videos/...
|
||
⏱️ 时间范围:03m23s -> 07m23s
|
||
🎬 时长:04m00s
|
||
```
|
||
|
||
### 场景2:后面5分钟
|
||
|
||
```
|
||
用户:这张图后面的5分钟视频给我
|
||
AI:(调用 export_video,mode="after", minutes=5)
|
||
```
|
||
|
||
### 场景3:整个视频
|
||
|
||
```
|
||
用户:我要整个视频
|
||
AI:(调用 export_video,mode="total")
|
||
```
|
||
|
||
## 文件结构
|
||
|
||
```
|
||
/home/hasee/py/
|
||
├── video_cutter.py # 视频切割导出模块(新增)
|
||
├── chat_bot.py # 聊天机器人(已修改)
|
||
├── weixin_sender.py # 微信发送模块(已修改)
|
||
├── test_video_export.py # 测试脚本(新增)
|
||
├── INSTALL_FFMPEG.md # 安装说明(新增)
|
||
├── VIDEO_EXPORT_README.md # 使用说明(新增)
|
||
├── VIDEO_EXPORT_SUMMARY.md # 本文件(新增)
|
||
├── CLAUDE.md # 项目说明(已更新)
|
||
├── shipin/ # 原始视频目录
|
||
│ ├── 001 Puss Gets the Boot [1940].avi
|
||
│ ├── 001 Puss Gets the Boot [1940]_frames/
|
||
│ └── ...
|
||
└── export_videos/ # 导出视频目录(自动创建)
|
||
```
|
||
|
||
## 依赖要求
|
||
|
||
### Python 依赖
|
||
|
||
已包含在 `requirements.txt` 中,无需额外安装。
|
||
|
||
### 系统依赖
|
||
|
||
需要安装 ffmpeg:
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install ffmpeg
|
||
|
||
# macOS
|
||
brew install ffmpeg
|
||
```
|
||
|
||
## 测试方法
|
||
|
||
### 1. 测试解析功能
|
||
|
||
```bash
|
||
python video_cutter.py
|
||
```
|
||
|
||
输出示例:
|
||
```
|
||
=== 测试图片名解析 ===
|
||
001 Puss Gets the Boot [1940]_05m23s_456.jpg
|
||
-> {'video_name': '001 Puss Gets the Boot [1940]', 'timestamp_seconds': 323.456}
|
||
```
|
||
|
||
### 2. 运行完整测试
|
||
|
||
```bash
|
||
python test_video_export.py
|
||
```
|
||
|
||
测试内容:
|
||
1. 图片名解析功能
|
||
2. 视频文件查找功能
|
||
3. 视频导出功能(需要 ffmpeg 和视频文件)
|
||
|
||
## 配置参数
|
||
|
||
在 `video_cutter.py` 中可以修改:
|
||
|
||
```python
|
||
VIDEO_DIR = "./shipin" # 原始视频目录
|
||
EXPORT_DIR = "./export_videos" # 导出视频目录
|
||
VIDEO_EXTENSIONS = {'.avi', '.mp4', '.mkv', '.mov', '.flv', '.wmv', '.webm', '.ts', '.m4v'}
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **ffmpeg 必须安装**
|
||
- 视频切割依赖 ffmpeg
|
||
- 请参考 `INSTALL_FFMPEG.md` 安装
|
||
|
||
2. **视频文件位置**
|
||
- 原始视频必须在 `./shipin/` 目录下
|
||
- 视频名必须与图片名中的视频名一致
|
||
|
||
3. **图片名格式**
|
||
- 必须符合:`{视频名}_{分钟}m{秒}s_{毫秒}.jpg`
|
||
- 例如:`001 Puss Gets the Boot [1940]_05m23s_456.jpg`
|
||
|
||
4. **切割精度**
|
||
- 使用 `-c copy` 参数,不重新编码
|
||
- 切割点可能不精确(取决于关键帧位置)
|
||
|
||
5. **存储空间**
|
||
- 导出的视频会占用额外空间
|
||
- 建议定期清理 `export_videos` 目录
|
||
|
||
## 后续扩展
|
||
|
||
### 1. 直接发送视频文件
|
||
|
||
修改 `weixin_sender.py` 中的 `send_video` 方法,实现视频文件上传和发送。
|
||
|
||
### 2. 自定义切割精度
|
||
|
||
添加参数控制切割精度(精确到帧或秒)。
|
||
|
||
### 3. 批量导出
|
||
|
||
支持一次导出多个视频片段。
|
||
|
||
### 4. 进度提示
|
||
|
||
在切割过程中发送进度提示给用户。
|
||
|
||
### 5. 视频格式转换
|
||
|
||
支持导出不同格式的视频(MP4, AVI, MKV 等)。
|
||
|
||
## 技术支持
|
||
|
||
如有问题,请检查:
|
||
1. ffmpeg 是否正确安装
|
||
2. 视频文件是否存在
|
||
3. 图片名格式是否正确
|
||
4. 磁盘空间是否充足
|
||
|
||
详细说明请参考 `VIDEO_EXPORT_README.md`。
|