AI-video-lifeplan-demo/FEATURES.md

7.4 KiB
Raw Permalink Blame History

AI Video LifePlan - 功能实现说明

本项目已完整实现以下6大核心功能模块:

✅ 已实现功能

1️⃣ Input Analysis - 输入分析 (PDF / 视频 / 音频)

实现文件: backend/extractor.py

PDF 解析 (Gemini Pro)

  • 使用 Google Gemini 2.0 Flash Exp 模型
  • 自动提取结构化数据:
    • 客户基本信息 (姓名、年龄)
    • 财务数据 (资产、收入、支出)
    • 家庭结构
    • 人生事件规划
    • 财务目标

使用示例:

from backend.extractor import PDFExtractor

extractor = PDFExtractor()
data = extractor.extract("path/to/lifeplan.pdf")

视频/音频转录 (OpenAI Whisper)

  • 使用 FFmpeg 提取音频
  • OpenAI Whisper API 进行高精度日语转录
  • 支持分段时间戳
  • 自动提取关键词

使用示例:

from backend.extractor import VideoExtractor

extractor = VideoExtractor()
result = extractor.extract("path/to/interview.mp4")
# 返回: transcription, segments, keywords

2️⃣ Scripting - 脚本生成

实现文件: backend/scripter.py

  • 使用 Gemini Pro 生成自然的日语口语脚本
  • 基于 PDF 数据和视频转录
  • 支持多种风格 (friendly, professional, casual)
  • 自动分段并计算时长

使用示例:

from backend.scripter import generate_script

script = generate_script(pdf_data, video_data, style="friendly")

3️⃣ Audio - TTS 音频生成

实现文件: backend/audio_generator.py

  • OpenAI TTS API (tts-1 模型)
  • 多种语音选择 (alloy, echo, fable, onyx, nova, shimmer)
  • 自动为每个脚本段落生成音频
  • 输出到 assets/1_processed/audio/

使用示例:

from backend.audio_generator import generate_audio_for_script

updated_script = generate_audio_for_script(script_data, voice="alloy")

4️⃣ Dynamic Visuals - 动态图表 (Remotion)

实现文件:


5️⃣ Stock Visuals - B-Roll 素材获取 (Pexels API)

实现文件: backend/media_fetcher.py

  • 自动翻译日语关键词为英语 (使用 Gemini)
  • Pexels API 搜索并下载 HD 视频
  • 智能缓存机制 (避免重复下载)
  • 支持本地文件路径引用

功能特性:

  • 关键词翻译缓存
  • 自动选择最佳质量 (≤1920p HD)
  • 存储到 assets/1_processed/broll/

使用示例:

from backend.media_fetcher import MediaFetcher

fetcher = MediaFetcher()
results = fetcher.fetch_broll(["家族", "老後", "貯蓄"], max_per_keyword=2)

6️⃣ Source Slicing - 视频切片 (可选功能)

实现文件: backend/video_slicer.py

  • 基于转录内容智能识别关键片段
  • 使用 Gemini 分析重要性
  • FFmpeg 快速切片 (stream copy, 无需重编码)
  • 输出到 assets/1_processed/video_clips/

使用示例:

from backend.video_slicer import extract_video_clips

clips = extract_video_clips(
    video_path="interview.mp4",
    transcription_data=video_data,
    max_clips=3
)

🚀 完整工作流

命令行使用

# 基础使用 - 仅 PDF
python main.py --pdf assets/0_input/report.pdf

# 带视频转录
python main.py --pdf report.pdf --video interview.mp4

# 启用视频切片功能
python main.py --pdf report.pdf --video interview.mp4 --extract-clips

# 仅生成数据,不渲染视频
python main.py --pdf report.pdf --dry-run

工作流步骤

1. 📄 PDF 解析 (Gemini Pro)
   ↓
2. 🎥 视频转录 (Whisper) [可选]
   ↓
3. ✍️  脚本生成 (Gemini Pro)
   ↓
4. 🎙️  音频生成 (OpenAI TTS)
   ↓
5. 🎬 B-Roll 获取 (Pexels API)
   ↓
6. ✂️  视频切片 [可选]
   ↓
7. 📊 数据整合 (render_props.json)
   ↓
8. 🎞️  视频渲染 (Remotion)

🔑 API 配置

需要在 .env 文件中配置以下 API Keys:

GEMINI_API_KEY=your_gemini_api_key
OPENAI_API_KEY=your_openai_api_key
PEXELS_API_KEY=your_pexels_api_key

📦 依赖安装

Python 依赖

pip install -r requirements.txt

主要包含:

  • google-genai - Gemini AI SDK (新版)
  • openai - OpenAI API (Whisper + TTS)
  • requests - HTTP 请求 (Pexels API)
  • ffmpeg-python - 视频处理
  • python-dotenv - 环境变量管理

系统依赖

  • FFmpeg: 必须安装并在 PATH 中
    • Windows: choco install ffmpeg 或从官网下载
    • Mac: brew install ffmpeg
    • Linux: apt install ffmpeg

Node.js 依赖

npm install

📁 目录结构

assets/
├── 0_input/              # 输入文件 (PDF, 视频)
├── 1_processed/          # 中间处理文件
│   ├── audio/           # 生成的音频
│   ├── broll/           # 下载的 B-Roll 视频
│   ├── video_clips/     # 提取的视频片段
│   ├── render_props.json
│   └── translation_cache.json
└── 2_output/            # 最终视频输出

🔍 调试与验证

检查 PDF 提取结果

from backend.extractor import PDFExtractor
extractor = PDFExtractor()
data = extractor.extract("path/to/pdf")
print(json.dumps(data, ensure_ascii=False, indent=2))

检查视频转录

from backend.extractor import VideoExtractor
extractor = VideoExtractor()
result = extractor.extract("path/to/video.mp4")
print(f"Duration: {result['duration']}s")
print(f"Segments: {len(result['segments'])}")

检查 B-Roll 下载

from backend.media_fetcher import MediaFetcher
fetcher = MediaFetcher()
results = fetcher.fetch_broll(["家族", "老後"])
for keyword, videos in results.items():
    print(f"{keyword}: {len(videos)} videos")

⚠️ 注意事项

  1. API 配额:

    • Gemini Pro 和 OpenAI API 有使用限制
    • Pexels API 免费版每小时 200 请求
  2. 文件大小:

    • 视频文件建议不超过 500MB
    • PDF 建议不超过 20 页
  3. 处理时间:

    • PDF 解析: ~10-30秒
    • 视频转录: ~视频时长的 1/3
    • B-Roll 下载: ~2-5分钟 (取决于网络)
    • 视频渲染: ~1-3分钟
  4. 语言支持:

    • 主要支持日语
    • B-Roll 关键词会自动翻译为英语

🐛 常见问题

Q: FFmpeg not found

A: 确保 FFmpeg 已安装并在系统 PATH 中

ffmpeg -version  # 检查是否安装

Q: Gemini API 错误

A: 检查 API key 是否正确,是否有配额

Q: Whisper 转录失败

A: 确认视频文件有音频轨道,格式支持

Q: B-Roll 下载慢

A: Pexels API 有速率限制,会自动等待


📄 相关文档


📝 更新日志

v1.0.0 (2026-01-16)

  • ✅ 完整实现 6 大核心功能
  • ✅ PDF 语义分析 (Gemini)
  • ✅ 视频/音频转录 (Whisper)
  • ✅ 脚本生成 (Gemini)
  • ✅ TTS 音频生成 (OpenAI)
  • ✅ B-Roll 素材获取 (Pexels)
  • ✅ 视频切片 (FFmpeg + Gemini)
  • ✅ 动态图表渲染 (Remotion)

构建者: Qoder AI Assistant
最后更新: 2026-01-16