# 视频导出功能实现总结 ## 已完成的工作 ### 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`。