5.3 KiB
5.3 KiB
视频导出功能实现总结
已完成的工作
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方法中添加处理逻辑
工具定义:
{
"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:
# Ubuntu/Debian
sudo apt install ffmpeg
# macOS
brew install ffmpeg
测试方法
1. 测试解析功能
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. 运行完整测试
python test_video_export.py
测试内容:
- 图片名解析功能
- 视频文件查找功能
- 视频导出功能(需要 ffmpeg 和视频文件)
配置参数
在 video_cutter.py 中可以修改:
VIDEO_DIR = "./shipin" # 原始视频目录
EXPORT_DIR = "./export_videos" # 导出视频目录
VIDEO_EXTENSIONS = {'.avi', '.mp4', '.mkv', '.mov', '.flv', '.wmv', '.webm', '.ts', '.m4v'}
注意事项
-
ffmpeg 必须安装
- 视频切割依赖 ffmpeg
- 请参考
INSTALL_FFMPEG.md安装
-
视频文件位置
- 原始视频必须在
./shipin/目录下 - 视频名必须与图片名中的视频名一致
- 原始视频必须在
-
图片名格式
- 必须符合:
{视频名}_{分钟}m{秒}s_{毫秒}.jpg - 例如:
001 Puss Gets the Boot [1940]_05m23s_456.jpg
- 必须符合:
-
切割精度
- 使用
-c copy参数,不重新编码 - 切割点可能不精确(取决于关键帧位置)
- 使用
-
存储空间
- 导出的视频会占用额外空间
- 建议定期清理
export_videos目录
后续扩展
1. 直接发送视频文件
修改 weixin_sender.py 中的 send_video 方法,实现视频文件上传和发送。
2. 自定义切割精度
添加参数控制切割精度(精确到帧或秒)。
3. 批量导出
支持一次导出多个视频片段。
4. 进度提示
在切割过程中发送进度提示给用户。
5. 视频格式转换
支持导出不同格式的视频(MP4, AVI, MKV 等)。
技术支持
如有问题,请检查:
- ffmpeg 是否正确安装
- 视频文件是否存在
- 图片名格式是否正确
- 磁盘空间是否充足
详细说明请参考 VIDEO_EXPORT_README.md。