Files
agent_test/VIDEO_EXPORT_SUMMARY.md

5.3 KiB
Raw Blame History

视频导出功能实现总结

已完成的工作

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_videomode="after", minutes=5

场景3整个视频

用户:我要整个视频
AI调用 export_videomode="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

测试内容:

  1. 图片名解析功能
  2. 视频文件查找功能
  3. 视频导出功能(需要 ffmpeg 和视频文件)

配置参数

video_cutter.py 中可以修改:

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