AI-video-lifeplan-demo/FEATURES.md

334 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI Video LifePlan - 功能实现说明
本项目已完整实现以下6大核心功能模块:
## ✅ 已实现功能
### 1️⃣ Input Analysis - 输入分析 (PDF / 视频 / 音频)
**实现文件**: [`backend/extractor.py`](backend/extractor.py)
#### PDF 解析 (Gemini Pro)
- 使用 Google Gemini 2.0 Flash Exp 模型
- 自动提取结构化数据:
- 客户基本信息 (姓名、年龄)
- 财务数据 (资产、收入、支出)
- 家庭结构
- 人生事件规划
- 财务目标
**使用示例**:
```python
from backend.extractor import PDFExtractor
extractor = PDFExtractor()
data = extractor.extract("path/to/lifeplan.pdf")
```
#### 视频/音频转录 (OpenAI Whisper)
- 使用 FFmpeg 提取音频
- OpenAI Whisper API 进行高精度日语转录
- 支持分段时间戳
- 自动提取关键词
**使用示例**:
```python
from backend.extractor import VideoExtractor
extractor = VideoExtractor()
result = extractor.extract("path/to/interview.mp4")
# 返回: transcription, segments, keywords
```
---
### 2️⃣ Scripting - 脚本生成
**实现文件**: [`backend/scripter.py`](backend/scripter.py)
- 使用 Gemini Pro 生成自然的日语口语脚本
- 基于 PDF 数据和视频转录
- 支持多种风格 (friendly, professional, casual)
- 自动分段并计算时长
**使用示例**:
```python
from backend.scripter import generate_script
script = generate_script(pdf_data, video_data, style="friendly")
```
---
### 3️⃣ Audio - TTS 音频生成
**实现文件**: [`backend/audio_generator.py`](backend/audio_generator.py)
- OpenAI TTS API (tts-1 模型)
- 多种语音选择 (alloy, echo, fable, onyx, nova, shimmer)
- 自动为每个脚本段落生成音频
- 输出到 `assets/1_processed/audio/`
**使用示例**:
```python
from backend.audio_generator import generate_audio_for_script
updated_script = generate_audio_for_script(script_data, voice="alloy")
```
---
### 4️⃣ Dynamic Visuals - 动态图表 (Remotion)
**实现文件**:
- [`src/Composition.tsx`](src/Composition.tsx)
- [`src/DualChartView.tsx`](src/DualChartView.tsx)
- [`src/LifePlanChart.tsx`](src/LifePlanChart.tsx)
- 基于 Remotion 的程序化视频渲染
- 实时动态图表:
- 资产消耗曲线
- 现金流分析
- 双图表联动显示
- 虚拟人角色同步说话
- 字幕自动同步
---
### 5️⃣ Stock Visuals - B-Roll 素材获取 (Pexels API)
**实现文件**: [`backend/media_fetcher.py`](backend/media_fetcher.py)
- 自动翻译日语关键词为英语 (使用 Gemini)
- Pexels API 搜索并下载 HD 视频
- 智能缓存机制 (避免重复下载)
- 支持本地文件路径引用
**功能特性**:
- 关键词翻译缓存
- 自动选择最佳质量 (≤1920p HD)
- 存储到 `assets/1_processed/broll/`
**使用示例**:
```python
from backend.media_fetcher import MediaFetcher
fetcher = MediaFetcher()
results = fetcher.fetch_broll(["家族", "老後", "貯蓄"], max_per_keyword=2)
```
---
### 6️⃣ Source Slicing - 视频切片 (可选功能)
**实现文件**: [`backend/video_slicer.py`](backend/video_slicer.py)
- 基于转录内容智能识别关键片段
- 使用 Gemini 分析重要性
- FFmpeg 快速切片 (stream copy, 无需重编码)
- 输出到 `assets/1_processed/video_clips/`
**使用示例**:
```python
from backend.video_slicer import extract_video_clips
clips = extract_video_clips(
video_path="interview.mp4",
transcription_data=video_data,
max_clips=3
)
```
---
## 🚀 完整工作流
### 命令行使用
```bash
# 基础使用 - 仅 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:
```env
GEMINI_API_KEY=your_gemini_api_key
OPENAI_API_KEY=your_openai_api_key
PEXELS_API_KEY=your_pexels_api_key
```
---
## 📦 依赖安装
### Python 依赖
```bash
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 依赖
```bash
npm install
```
---
## 📁 目录结构
```
assets/
├── 0_input/ # 输入文件 (PDF, 视频)
├── 1_processed/ # 中间处理文件
│ ├── audio/ # 生成的音频
│ ├── broll/ # 下载的 B-Roll 视频
│ ├── video_clips/ # 提取的视频片段
│ ├── render_props.json
│ └── translation_cache.json
└── 2_output/ # 最终视频输出
```
---
## 🔍 调试与验证
### 检查 PDF 提取结果
```python
from backend.extractor import PDFExtractor
extractor = PDFExtractor()
data = extractor.extract("path/to/pdf")
print(json.dumps(data, ensure_ascii=False, indent=2))
```
### 检查视频转录
```python
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 下载
```python
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 中
```bash
ffmpeg -version # 检查是否安装
```
### Q: Gemini API 错误
A: 检查 API key 是否正确,是否有配额
### Q: Whisper 转录失败
A: 确认视频文件有音频轨道,格式支持
### Q: B-Roll 下载慢
A: Pexels API 有速率限制,会自动等待
---
## 📄 相关文档
- [项目总览 README](PROJECT_README.md)
- [Remotion 配置](remotion.config.ts)
- [字幕提取调查](backend/SUBTITLE_INVESTIGATION_README.md)
---
## 📝 更新日志
**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