Initial commit: WeChat bot project with AI chat, video export, and image upload scripts
This commit is contained in:
215
VIDEO_EXPORT_SUMMARY.md
Normal file
215
VIDEO_EXPORT_SUMMARY.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 视频导出功能实现总结
|
||||
|
||||
## 已完成的工作
|
||||
|
||||
### 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`。
|
||||
Reference in New Issue
Block a user