334 lines
7.4 KiB
Markdown
334 lines
7.4 KiB
Markdown
# 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
|