# 核心功能
**本文档中引用的文件**
- [extractor.py](file://backend/extractor.py)
- [scripter.py](file://backend/scripter.py)
- [media_fetcher.py](file://backend/media_fetcher.py)
- [data_builder.py](file://backend/data_builder.py)
- [index.ts](file://src/index.ts)
- [Root.tsx](file://src/Root.tsx)
- [types.ts](file://src/types.ts)
- [main.py](file://main.py)
- [PROJECT_README.md](file://PROJECT_README.md)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本项目是一个混合型Python/Node.js系统,能够将静态的财务规划报告(PDF)和原始访谈视频自动转换为动态、个性化的3-5分钟解说视频。系统整合了动画图表、AI生成的日语解说、情境化素材片段(B-Roll)以及同步的访谈剪辑,为用户提供直观的财务规划可视化服务。整个流程由Python后端驱动,利用AI模型进行数据提取和内容生成,再通过Remotion前端引擎完成视频渲染。
## 项目结构
项目采用分层架构,清晰地分离了数据处理逻辑与视频渲染逻辑。后端(Python)负责数据提取、AI生成和模拟计算,前端(Node.js/TypeScript)则专注于程序化视频渲染。两者通过一个名为`render_props.json`的数据契约文件进行通信。
```mermaid
graph TD
subgraph "Backend (Python)"
A[extractor.py] --> B[scripter.py]
B --> C[media_fetcher.py]
C --> D[data_builder.py]
D --> E[main.py]
end
subgraph "Frontend (Node.js/TypeScript)"
F[index.ts]
G[Root.tsx]
H[CashFlowChart.tsx]
I[LifePlanChart.tsx]
end
E --> |生成| J[render_props.json]
J --> |消费| F
```
**Diagram sources**
- [PROJECT_README.md](file://PROJECT_README.md#L14-L32)
**Section sources**
- [PROJECT_README.md](file://PROJECT_README.md#L50-L79)
## 核心组件
系统的核心功能由五个关键模块构成:PDF/视频数据提取器、AI日语解说脚本生成器、B-Roll素材自动获取器、财务数据模拟与图表构建器以及最终的视频渲染合成器。这些模块协同工作,形成一个从原始输入到最终视频输出的完整流水线。
**Section sources**
- [main.py](file://main.py#L5-L11)
- [PROJECT_README.md](file://PROJECT_README.md#L7-L12)
## 架构概述
系统的整体架构遵循“后端处理,前端渲染”的模式。Python后端作为“导演”,负责协调所有AI和数据处理任务;而Node.js前端作为“引擎”,专注于高质量的视频合成。`main.py`是整个流水线的入口点,它按顺序调用各个模块,最终生成`render_props.json`文件,触发Remotion进行视频渲染。
```mermaid
graph TD
A[PDF/视频输入] --> B[extractor.py]
B --> C[scripter.py]
C --> D[media_fetcher.py]
D --> E[data_builder.py]
E --> F[render_props.json]
F --> G[Remotion渲染]
G --> H[最终视频输出]
```
**Diagram sources**
- [main.py](file://main.py#L5-L11)
- [PROJECT_README.md](file://PROJECT_README.md#L16-L32)
## 详细组件分析
### PDF/视频数据提取器 (extractor.py)
该模块负责解析输入的PDF报告和视频文件,从中提取结构化数据。它利用Google Gemini Pro API来解析日语财务报告,并使用OpenAI Whisper API对访谈视频进行转录,获取时间戳和关键词。
**Section sources**
- [extractor.py](file://backend/extractor.py#L1-L84)
### AI日语解说脚本生成器 (scripter.py)
此模块是AI驱动内容生成的核心。它接收从PDF和视频中提取的数据,利用Google Gemini Pro生成自然流畅的日语解说脚本。脚本被划分为多个片段,每个片段都包含预计的持续时间,为后续的视频同步提供依据。
```mermaid
classDiagram
class ScriptGenerator {
+api_key : str
+__init__(api_key : Optional[str])
+generate(pdf_data : Dict, video_data : Optional[Dict], style : str) : Dict
-_build_prompt(pdf_data : Dict, style : str) : str
}
```
**Diagram sources**
- [scripter.py](file://backend/scripter.py#L14-L69)
**Section sources**
- [scripter.py](file://backend/scripter.py#L1-L69)
### B-Roll素材自动获取器 (media_fetcher.py)
该模块根据生成的脚本内容,自动从Pexels API获取相关的背景视频素材(B-Roll)。它会从脚本中提取关键词,将日语关键词翻译成英语,然后搜索并下载匹配的视频片段,为视频增添视觉吸引力。
```mermaid
sequenceDiagram
participant Script as 脚本
participant Fetcher as MediaFetcher
participant Pexels as Pexels API
Script->>Fetcher : 提供关键词列表
Fetcher->>Fetcher : 翻译关键词(日->英)
Fetcher->>Pexels : 搜索视频
Pexels-->>Fetcher : 返回视频URL
Fetcher->>Fetcher : 下载视频到本地
Fetcher-->>Script : 返回本地文件路径
```
**Diagram sources**
- [media_fetcher.py](file://backend/media_fetcher.py#L15-L72)
**Section sources**
- [media_fetcher.py](file://backend/media_fetcher.py#L1-L72)
### 财务数据模拟与图表构建器 (data_builder.py)
这是数据驱动视频渲染的关键。该模块包含一个财务模拟引擎,能够基于提取的财务数据,模拟未来几十年的资产耗尽和现金流情况。它考虑了通货膨胀、投资回报和债务复利等因素,生成精确的年度财务快照,并将其格式化为Remotion图表组件所需的格式。
```mermaid
classDiagram
class FinancialSimulator {
+config : Dict
+inflation_rate : float
+deficit_interest_rate : float
+investment_return : float
+__init__(config : Optional[Dict])
+simulate_timeline(...) : List[Dict]
+build_cashflow_data(timeline : List[Dict]) : List[Dict]
-_get_event_cost(...) : float
-_get_event_labels(...) : List[str]
}
```
**Diagram sources**
- [data_builder.py](file://backend/data_builder.py#L15-L200)
**Section sources**
- [data_builder.py](file://backend/data_builder.py#L1-L200)
### 视频渲染合成器 (src/index.ts)
前端部分使用Remotion库进行程序化视频渲染。`index.ts`是入口文件,它注册了`Root.tsx`作为根组件。`Root.tsx`中定义了多个``,每个都对应一个视频片段(如资产耗尽图、现金流图),并将`render_props.json`中的数据作为属性传递给相应的React组件。
```mermaid
flowchart TD
A[index.ts] --> B[Root.tsx]
B --> C[Composition: LifePlanChart]
B --> D[Composition: CashFlowChart]
B --> E[Composition: DualChartView]
C --> F[LifePlanChart.tsx]
D --> G[CashFlowChart.tsx]
E --> H[DualChartView.tsx]
```
**Diagram sources**
- [src/index.ts](file://src/index.ts#L1-L6)
- [src/Root.tsx](file://src/Root.tsx#L1-L68)
**Section sources**
- [src/index.ts](file://src/index.ts#L1-L6)
- [src/Root.tsx](file://src/Root.tsx#L1-L68)
## 依赖分析
系统的主要依赖关系清晰地体现在`main.py`的流水线设计中。`VideoGeneratorPipeline`类按顺序调用`extract_pdf`、`generate_script`、`fetch_broll`和`build_render_props`等方法,形成了一个强依赖的线性流程。外部API密钥通过环境变量注入,确保了配置的安全性。
```mermaid
graph TD
main.VideoGeneratorPipeline.run[run] --> main.VideoGeneratorPipeline.extract_pdf[extract_pdf]
main.VideoGeneratorPipeline.run[run] --> main.VideoGeneratorPipeline.generate_script[generate_script]
main.VideoGeneratorPipeline.run[run] --> main.VideoGeneratorPipeline.fetch_broll[fetch_broll]
main.VideoGeneratorPipeline.run[run] --> main.VideoGeneratorPipeline.build_render_props[build_render_props]
main.VideoGeneratorPipeline.run[run] --> main.VideoGeneratorPipeline.render_video[render_video]
```
**Diagram sources**
- [main.py](file://main.py#L48-L83)
**Section sources**
- [main.py](file://main.py#L33-L305)
## 性能考虑
虽然代码中包含了一些TODO注释,表明部分功能尚未完全实现,但其架构设计已考虑到性能。例如,`media_fetcher.py`中提到了翻译缓存,以避免重复的API调用。财务模拟使用了数学公式进行高效计算。对于视频渲染,Remotion支持并行渲染和缓存,可以显著缩短生成时间。
## 故障排除指南
常见问题主要集中在API密钥和环境配置上。确保`.env`文件存在且包含有效的`GEMINI_API_KEY`、`OPENAI_API_KEY`和`PEXELS_API_KEY`。如果遇到渲染失败,检查`npm install`是否成功,并确认`frontend/src/`目录结构正确。对于PDF解析失败,需确认PDF文件可读且未加密。
**Section sources**
- [PROJECT_README.md](file://PROJECT_README.md#L218-L231)
## 结论
该项目成功地将AI驱动的内容生成与数据驱动的视频渲染相结合,创造了一个自动化视频生成的解决方案。通过模块化的设计,每个核心功能都职责明确,易于维护和扩展。未来的工作应集中在实现`TODO`中提到的功能,如Gemini和Whisper的实际集成,并优化数据流以处理更复杂的财务场景。