AI-video-lifeplan-demo/.qoder/repowiki/zh/content/故障排除.md

462 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 故障排除
<cite>
**本文引用的文件**
- [PROJECT_README.md](file://PROJECT_README.md)
- [verify_structure.py](file://verify_structure.py)
- [main.py](file://main.py)
- [requirements.txt](file://requirements.txt)
- [package.json](file://package.json)
- [backend/extractor.py](file://backend/extractor.py)
- [backend/scripter.py](file://backend/scripter.py)
- [backend/media_fetcher.py](file://backend/media_fetcher.py)
- [backend/data_builder.py](file://backend/data_builder.py)
- [tests/test_video_cli.py](file://tests/test_video_cli.py)
- [tests/test_video_processor.py](file://tests/test_video_processor.py)
- [.env.example](file://.env.example)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能注意事项](#性能注意事项)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本指南面向使用本项目的用户与开发者,聚焦“常见问题现象—根本原因—解决方案”的闭环排查流程,并结合项目内置的结构验证脚本,帮助快速定位缺失文件、环境变量、依赖安装与渲染失败等问题。同时提供可操作的诊断步骤与修复命令,降低技术支持门槛。
## 项目结构
项目采用“Python 后端 + Node.js 前端(Remotion)”的混合架构,数据通过中间产物 JSON 在两端之间传递。关键目录与文件包括:
- assets/0_input:原始输入(PDF、MP4)
- assets/1_processed:中间产物(提取结果、翻译缓存、B-Roll下载等)
- assets/2_output:最终输出(生成的视频)
- backend:Python 模块(PDF/视频解析、脚本生成、媒体抓取、数据模拟)
- frontend:Remotion 前端工程(React + TypeScript + Recharts)
- 根目录配置:.env、requirements.txt、package.json、remotion.config.ts、verify_structure.py、main.py
```mermaid
graph TB
A["main.py<br/>主入口与流水线编排"] --> B["backend.extractor.py<br/>PDF/视频解析"]
A --> C["backend.scripter.py<br/>脚本生成"]
A --> D["backend.media_fetcher.py<br/>B-Roll抓取"]
A --> E["backend.data_builder.py<br/>财务模拟/图表数据"]
A --> F["assets/1_processed/render_props.json<br/>数据契约"]
F --> G["frontend/src/index.ts<br/>Remotion渲染入口"]
G --> H["frontend/src/components/*<br/>图表与合成组件"]
H --> I["最终视频输出<br/>assets/2_output/*.mp4"]
```
图示来源
- [main.py](file://main.py#L1-L305)
- [backend/extractor.py](file://backend/extractor.py#L1-L84)
- [backend/scripter.py](file://backend/scripter.py#L1-L69)
- [backend/media_fetcher.py](file://backend/media_fetcher.py#L1-L72)
- [backend/data_builder.py](file://backend/data_builder.py#L1-L200)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L50-L80)
- [PROJECT_README.md](file://PROJECT_README.md#L132-L141)
## 核心组件
- 主入口与流水线编排:负责参数解析、目录准备、步骤调度与调用各模块、保存 render_props.json 并触发 Remotion 渲染。
- 数据提取器:封装 PDF 与视频解析接口,读取环境变量中的 API Key,抛出明确错误提示。
- 脚本生成器:根据 PDF 与可选视频内容生成自然语言脚本,同样依赖环境变量。
- 媒体抓取器:基于关键词从 Pexels 抓取 B-Roll 视频,依赖 Pexels API Key。
- 数据构建器:执行财务模拟,生成资产枯竭与现金流图表数据,供前端渲染使用。
- 结构验证脚本:校验目录与文件完整性、导入可用性、CLI 可用性,辅助迁移与初始化。
章节来源
- [main.py](file://main.py#L33-L301)
- [backend/extractor.py](file://backend/extractor.py#L15-L84)
- [backend/scripter.py](file://backend/scripter.py#L14-L69)
- [backend/media_fetcher.py](file://backend/media_fetcher.py#L15-L72)
- [backend/data_builder.py](file://backend/data_builder.py#L1-L200)
- [verify_structure.py](file://verify_structure.py#L1-L136)
## 架构总览
下图展示从输入到输出的端到端流程,以及关键错误点的定位位置。
```mermaid
sequenceDiagram
participant U as "用户"
participant M as "main.py"
participant X as "extractor.py"
participant S as "scripter.py"
participant MF as "media_fetcher.py"
participant DB as "data_builder.py"
participant R as "Remotion渲染"
participant O as "assets/2_output"
U->>M : 运行命令传入PDF/可选视频
M->>X : 提取PDF/视频数据
X-->>M : 返回结构化数据或报错
M->>S : 生成脚本
S-->>M : 返回脚本或报错
M->>MF : 抓取B-Roll
MF-->>M : 返回资源或报错
M->>DB : 构建图表数据
DB-->>M : 返回render_props.json
M->>R : 触发渲染npx remotion render
R-->>O : 输出最终视频
```
图示来源
- [main.py](file://main.py#L48-L225)
- [backend/extractor.py](file://backend/extractor.py#L23-L42)
- [backend/scripter.py](file://backend/scripter.py#L22-L48)
- [backend/media_fetcher.py](file://backend/media_fetcher.py#L25-L41)
- [backend/data_builder.py](file://backend/data_builder.py#L150-L200)
## 详细组件分析
### 组件A:主入口与流水线编排
- 功能要点
- 参数解析与配置合并(支持 --pdf/--video/--config/--output/--dry-run)
- 自动创建 assets 子目录
- 步骤顺序:PDF 解析 → 视频解析(可选)→ 脚本生成 → B-Roll 抓取 → 图表数据构建 → 保存 render_props.json → 触发渲染
- 渲染命令通过 npx remotion render 执行,当前处于占位状态(注释掉实际子进程调用)
- 关键错误点
- 缺少必要参数时直接报错
- 渲染阶段若未启用实际子进程调用,会显示占位信息而非真实错误
- 优化建议
- 在渲染阶段取消注释子进程调用,确保错误能被上层捕获
- 将 dry-run 与渲染阶段解耦,便于独立调试
```mermaid
flowchart TD
Start(["开始"]) --> Parse["解析参数与配置"]
Parse --> MkDirs["创建assets子目录"]
MkDirs --> Step1["Step 1: PDF解析"]
Step1 --> Step2["Step 2: 视频解析可选"]
Step2 --> Step3["Step 3: 生成脚本"]
Step3 --> Step4["Step 4: 抓取B-Roll"]
Step4 --> Step5["Step 5: 构建图表数据"]
Step5 --> SaveProps["保存render_props.json"]
SaveProps --> Render["触发Remotion渲染"]
Render --> End(["结束"])
```
图示来源
- [main.py](file://main.py#L48-L225)
章节来源
- [main.py](file://main.py#L228-L301)
### 组件B:数据提取器(PDF/视频)
- 功能要点
- PDFExtractor:从 PDF 中抽取结构化数据,需要 GEMINI_API_KEY
- VideoExtractor:对视频进行转录与时间戳抽取,需要 OPENAI_API_KEY
- 错误处理
- 若环境变量缺失,直接抛出异常,提示缺少对应 API Key
- 诊断要点
- 确认 .env 文件存在且包含有效密钥
- 确认网络可达与配额充足
```mermaid
classDiagram
class PDFExtractor {
+__init__(api_key)
+extract(pdf_path) Dict
}
class VideoExtractor {
+__init__(api_key)
+extract(video_path) Dict
}
PDFExtractor <.. VideoExtractor : "均依赖环境变量"
```
图示来源
- [backend/extractor.py](file://backend/extractor.py#L15-L84)
章节来源
- [backend/extractor.py](file://backend/extractor.py#L15-L84)
### 组件C:脚本生成器
- 功能要点
- 基于 PDF 与可选视频内容生成自然语言脚本,需要 GEMINI_API_KEY
- 错误处理
- 环境变量缺失时抛出异常
- 诊断要点
- 配置 .env 并确认 Gemini API 可用
章节来源
- [backend/scripter.py](file://backend/scripter.py#L14-L48)
### 组件D:媒体抓取器(B-Roll)
- 功能要点
- 依据关键词从 Pexels 搜索并下载 B-Roll,需要 PEKELS_API_KEY
- 错误处理
- 环境变量缺失时抛出异常
- 诊断要点
- 配置 .env 并确认 Pexels API 可用
章节来源
- [backend/media_fetcher.py](file://backend/media_fetcher.py#L15-L41)
### 组件E:数据构建器(财务模拟)
- 功能要点
- 使用默认通胀率、赤字利率、投资回报率等参数进行年金模拟,生成资产枯竭与现金流数据
- 错误处理
- 无显式异常处理,需在上游保证输入数据合法
- 诊断要点
- 确保 PDF 解析返回的数据字段齐全
章节来源
- [backend/data_builder.py](file://backend/data_builder.py#L150-L200)
## 依赖关系分析
- Python 依赖
- dotenv:加载 .env
- ffmpeg-python、requests:媒体处理与网络请求
- tqdm、rich:进度与日志
- Node.js 依赖
- remotion、react、recharts:渲染引擎与图表
- 开发工具链:ESLint、TypeScript、Prettier
- 外部服务
- Google Gemini API(PDF 解析、脚本生成)
- OpenAI Whisper(音频转录)
- Pexels API(B-Roll)
```mermaid
graph LR
subgraph "Python"
P1["dotenv"]
P2["ffmpeg-python"]
P3["requests"]
P4["tqdm/rich"]
end
subgraph "Node.js"
N1["remotion"]
N2["react/recharts"]
N3["typescript/eslint/prettier"]
end
subgraph "外部服务"
E1["Gemini API"]
E2["OpenAI Whisper"]
E3["Pexels API"]
end
P1 --> E1
P2 --> E2
P3 --> E3
N1 --> E3
```
图示来源
- [requirements.txt](file://requirements.txt#L1-L34)
- [package.json](file://package.json#L1-L43)
章节来源
- [requirements.txt](file://requirements.txt#L1-L34)
- [package.json](file://package.json#L1-L43)
## 性能注意事项
- API 调用成本与配额
- Gemini、Whisper、Pexels 均有配额限制,建议在本地或 CI 中合理控制并发与重试策略
- 渲染性能
- Remotion 渲染耗时与图表复杂度、B-Roll 视频长度相关,建议先使用 dry-run 生成数据以验证流程
- 本地依赖
- FFmpeg 安装与可用性直接影响视频转录与处理,建议在测试前单独验证
[本节为通用指导,不直接分析具体文件]
## 故障排除指南
### 一、环境变量与密钥问题
- 现象
- “API 密钥未找到”
- 根因
- .env 文件缺失或未正确填写;或运行环境中未加载 .env
- 修复步骤
- 复制示例文件并填写密钥
- 复制命令参考:[PROJECT_README.md](file://PROJECT_README.md#L99-L111)
- 示例文件路径:[.env.example](file://.env.example#L1-L23)
- 确认密钥类型与来源
- Gemini:用于 PDF 解析与脚本生成
- OpenAI:用于 Whisper 转录
- Pexels:用于 B-Roll 下载
- 验证方法
- 运行结构验证脚本,检查后端模块导入是否成功
- 参考:[verify_structure.py](file://verify_structure.py#L75-L97)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L97-L111)
- [.env.example](file://.env.example#L1-L23)
- [verify_structure.py](file://verify_structure.py#L75-L97)
### 二、PDF 提取失败
- 现象
- PDF 解析阶段报错或返回空数据
- 根因
- PDF 不可读或受密码保护;Gemini API 额度不足或网络异常
- 修复步骤
- 确保输入 PDF 可打开且非加密
- 检查 .env 中 GEMINI_API_KEY 是否正确
- 如为首次使用,确认 API 已激活并有足够配额
- 验证方法
- 使用 verify_structure.py 的导入测试,确认 extractor 模块可用
- 参考:[verify_structure.py](file://verify_structure.py#L75-L97)
- 查看 extractor 抛出的异常信息(缺少密钥时会直接报错)
- 参考:[backend/extractor.py](file://backend/extractor.py#L18-L22)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L228-L231)
- [backend/extractor.py](file://backend/extractor.py#L18-L22)
- [verify_structure.py](file://verify_structure.py#L75-L97)
### 三、视频转录失败
- 现象
- 视频解析阶段报错或无法生成时间戳
- 根因
- 缺少 OPENAI_API_KEY;FFmpeg 未安装或不可用;视频格式不受支持
- 修复步骤
- 安装 FFmpeg 并确保在 PATH 中
- 参考:[tests/test_video_cli.py](file://tests/test_video_cli.py#L71-L80)
- 确认 .env 中 OPENAI_API_KEY 已设置
- 使用独立测试工具检查依赖
- 参考:[tests/test_video_cli.py](file://tests/test_video_cli.py#L68-L91)
- 验证方法
- 运行单元测试(需 OPENAI_API_KEY),验证音频优先策略
- 参考:[tests/test_video_processor.py](file://tests/test_video_processor.py#L113-L140)
章节来源
- [tests/test_video_cli.py](file://tests/test_video_cli.py#L68-L91)
- [tests/test_video_processor.py](file://tests/test_video_processor.py#L113-L140)
- [backend/extractor.py](file://backend/extractor.py#L48-L51)
### 四、B-Roll 抓取失败
- 现象
- B-Roll 获取阶段报错或返回空结果
- 根因
- 缺少 PEKELS_API_KEY;网络异常;关键词为空
- 修复步骤
- 确认 .env 中 PEKELS_API_KEY 已设置
- 检查网络连通性与 API 配额
- 验证方法
- 运行结构验证脚本,确认 media_fetcher 模块可用
- 参考:[verify_structure.py](file://verify_structure.py#L75-L97)
- 查看 media_fetcher 抛出的异常信息(缺少密钥时会直接报错)
- 参考:[backend/media_fetcher.py](file://backend/media_fetcher.py#L18-L21)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L228-L231)
- [backend/media_fetcher.py](file://backend/media_fetcher.py#L18-L21)
- [verify_structure.py](file://verify_structure.py#L75-L97)
### 五、Remotion 渲染失败
- 现象
- 渲染阶段报错或无输出
- 根因
- Node.js 依赖未安装;Remotion 配置不正确;前端组件缺失;渲染命令未启用
- 修复步骤
- 安装 Node.js 依赖
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L91-L95)
- 依赖清单:[package.json](file://package.json#L1-L43)
- 确认 frontend/src 目录结构与组件注册正确
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L50-L80)
- 检查 remotion.config.ts 是否存在
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L56-L58)
- 在 main.py 中启用渲染子进程调用(当前为占位)
- 参考:[main.py](file://main.py#L217-L225)
- 验证方法
- 使用 verify_structure.py 的 CLI 测试,确认 main.py --help 可用
- 参考:[verify_structure.py](file://verify_structure.py#L98-L121)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L91-L95)
- [PROJECT_README.md](file://PROJECT_README.md#L50-L80)
- [package.json](file://package.json#L1-L43)
- [main.py](file://main.py#L217-L225)
- [verify_structure.py](file://verify_structure.py#L98-L121)
### 六、项目目录结构完整性检查
- 现象
- 运行后提示某些文件缺失或导入失败
- 根因
- 迁移或克隆后遗漏关键目录/文件
- 修复步骤
- 使用结构验证脚本一次性检查所有必需项
- 参考:[verify_structure.py](file://verify_structure.py#L12-L74)
- 若缺失,请对照项目结构补充
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L50-L80)
- 验证方法
- 运行导入测试,确认 backend 包与子模块均可导入
- 参考:[verify_structure.py](file://verify_structure.py#L75-L97)
- 运行 CLI 测试,确认 main.py --help 可用
- 参考:[verify_structure.py](file://verify_structure.py#L98-L121)
章节来源
- [verify_structure.py](file://verify_structure.py#L12-L74)
- [verify_structure.py](file://verify_structure.py#L75-L97)
- [verify_structure.py](file://verify_structure.py#L98-L121)
- [PROJECT_README.md](file://PROJECT_README.md#L50-L80)
### 七、Dry Run 与数据验证
- 现象
- 希望跳过渲染阶段,仅生成数据
- 根因
- 未使用 --dry-run 参数
- 修复步骤
- 使用 --dry-run 生成 render_props.json,随后手动检查
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L126-L130)
- 验证方法
- 检查 assets/1_processed/render_props.json 是否生成
- 参考:[main.py](file://main.py#L72-L77)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L126-L130)
- [main.py](file://main.py#L72-L77)
### 八、Python 依赖缺失
- 现象
- 导入 backend 模块时报错或功能受限
- 根因
- requirements.txt 未安装或版本不匹配
- 修复步骤
- 安装 Python 依赖
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L87-L90)
- 依赖清单:[requirements.txt](file://requirements.txt#L1-L34)
- 验证方法
- 运行 verify_structure.py 的导入测试
- 参考:[verify_structure.py](file://verify_structure.py#L75-L97)
章节来源
- [PROJECT_README.md](file://PROJECT_README.md#L87-L90)
- [requirements.txt](file://requirements.txt#L1-L34)
- [verify_structure.py](file://verify_structure.py#L75-L97)
## 结论
本指南围绕“环境变量、API 密钥、依赖安装、数据提取、脚本生成、B-Roll 抓取、财务模拟、Remotion 渲染”八个关键环节,提供了系统化的诊断与修复路径。配合 verify_structure.py 的结构检查与 dry-run 数据验证,可显著降低问题定位成本,提升整体使用体验。
[本节为总结性内容,不直接分析具体文件]
## 附录
### A. 常见命令速查
- 安装 Python 依赖
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L87-L90)
- 安装 Node.js 依赖
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L91-L95)
- 运行结构验证
- 参考:[verify_structure.py](file://verify_structure.py#L128-L136)
- 生成数据(跳过渲染)
- 参考:[PROJECT_README.md](file://PROJECT_README.md#L126-L130)
- 检查 FFmpeg 依赖
- 参考:[tests/test_video_cli.py](file://tests/test_video_cli.py#L71-L80)
### B. 关键文件清单
- 环境变量模板:[.env.example](file://.env.example#L1-L23)
- Python 依赖清单:[requirements.txt](file://requirements.txt#L1-L34)
- Node.js 依赖清单:[package.json](file://package.json#L1-L43)
- 主入口与流水线:[main.py](file://main.py#L1-L305)
- 结构验证脚本:[verify_structure.py](file://verify_structure.py#L1-L136)
- 数据提取器:[backend/extractor.py](file://backend/extractor.py#L1-L84)
- 脚本生成器:[backend/scripter.py](file://backend/scripter.py#L1-L69)
- 媒体抓取器:[backend/media_fetcher.py](file://backend/media_fetcher.py#L1-L72)
- 数据构建器:[backend/data_builder.py](file://backend/data_builder.py#L1-L200)
- 视频处理测试工具:[tests/test_video_cli.py](file://tests/test_video_cli.py#L1-L161)
- 视频处理单元测试:[tests/test_video_processor.py](file://tests/test_video_processor.py#L1-L143)