关注系统的功能分解、核心类及其关系。
classDiagram
direction TB
class PipelineOrchestrator {
+start(任务启动)
-generate_script(脚本生成)
-generate_terms(关键词生成)
-generate_audio(语音生成)
-generate_subtitle(字幕生成)
-get_video_materials(素材获取)
-generate_final_videos(视频合成)
}
class LLMService {
+generate_script()
+generate_terms()
}
class VoiceService {
+tts()
+create_subtitle()
+get_audio_duration()
}
class VideoService {
+combine_videos()
+generate_video()
+preprocess_video()
}
class MaterialService {
+download_videos()
+search_videos_pexels()
+search_videos_pixabay()
}
class SubtitleService {
+create()
+correct()
}
class StateManager {
<<abstract>>
+update_task()
+get_task()
+get_all_tasks()
+delete_task()
}
class MemoryState
class RedisState
class TaskManager {
<<abstract>>
+add_task()
+execute_task()
}
class InMemoryTaskManager
class RedisTaskManager
class Config {
+load_config()
+save_config()
}
PipelineOrchestrator --> LLMService : 脚本与关键词生成
PipelineOrchestrator --> VoiceService : 语音合成
PipelineOrchestrator --> VideoService : 画面合成
PipelineOrchestrator --> MaterialService : 视频素材下载
PipelineOrchestrator --> SubtitleService : 字幕文件生成
PipelineOrchestrator --> StateManager : 更新任务状态
PipelineOrchestrator --> TaskManager : 入队异步执行
StateManager <|-- MemoryState : 内存实现
StateManager <|-- RedisState : Redis 实现
TaskManager <|-- InMemoryTaskManager : 内存队列
TaskManager <|-- RedisTaskManager : Redis 队列
LLMService --> Config : 读取 API 配置
VoiceService --> Config : 读取 TTS 配置
VideoService --> Config : 读取编解码配置
MaterialService --> Config : 读取素材源配置
StateManager --> Config : 读取 Redis 配置
关注运行时端到端交互、并发模型与进度机制。
sequenceDiagram
actor User as 用户
participant API as FastAPI 控制器
participant TM as 任务管理器
participant State as 状态管理器
participant P as 流水线编排器
participant LLM as LLM 服务
participant Voice as 语音服务
participant Sub as 字幕服务
participant Mat as 素材服务
participant Vid as 视频合成服务
participant Ext as 外部 API
User->>API: POST /api/v1/videos
API->>State: 初始化任务状态
API->>TM: 提交任务到队列
API-->>User: 202 {task_id}
TM->>P: daemon 线程异步执行
rect rgb(230, 242, 255)
Note over P,Ext: 第1步 — 脚本生成
P->>State: progress=5
P->>LLM: generate_script(主题, 语言)
LLM->>Ext: OpenAI / Gemini / Qwen / DeepSeek 等
Ext-->>LLM: 脚本文本
LLM-->>P: video_script
P->>State: progress=10
end
rect rgb(255, 245, 230)
Note over P,Ext: 第2步 — 关键词生成
P->>LLM: generate_terms(主题, 脚本)
LLM->>Ext: 同上 LLM 提供商
Ext-->>LLM: ["关键词1","关键词2",...]
LLM-->>P: video_terms[]
P->>State: progress=20
end
rect rgb(230, 255, 240)
Note over P,Ext: 第3步 — 语音合成
P->>Voice: tts(脚本, 语音名称, 速率)
Voice->>Ext: Edge TTS / Azure V2 / SiliconFlow / Gemini TTS
Ext-->>Voice: 音频流 + WordBoundary 边界事件
Voice-->>P: audio.mp3 + SubMaker
P->>State: progress=30
end
rect rgb(255, 240, 230)
Note over P,Ext: 第4步 — 字幕生成
P->>Sub: create_subtitle(SubMaker, 脚本)
Sub->>Sub: 词级时间戳聚合为句子级 SRT
Sub-->>P: subtitle.srt
P->>State: progress=40
end
rect rgb(240, 230, 255)
Note over P,Ext: 第5步 — 素材下载
P->>Mat: download_videos(关键词, 比例, 时长)
Mat->>Ext: Pexels / Pixabay 搜索与下载
Ext-->>Mat: .mp4 视频文件
Mat->>Mat: MD5 缓存去重
Mat-->>P: video_paths[]
P->>State: progress=50
end
rect rgb(255, 230, 240)
Note over P,Ext: 第6步 — 视频合成
P->>Vid: combine_videos(素材路径, 音频, 转场参数)
Vid->>Vid: 裁剪 / 缩放 / 转场效果 / ffmpeg 拼接
Vid-->>P: combined-1.mp4
P->>State: progress=75
P->>Vid: generate_video(拼接视频, 音频, 字幕, 样式参数)
Vid->>Vid: 叠加字幕 + 背景音乐 / 渲染输出
Vid-->>P: final-1.mp4
P->>State: progress=100
end
P->>State: 标记任务完成
loop 前端轮询
User->>API: GET /api/v1/tasks/{task_id}
API->>State: get_task()
State-->>API: 当前状态、进度、视频URL
API-->>User: 任务进度与视频下载链接
end
关注系统在物理节点上的部署拓扑与外部服务依赖。
graph TB
Browser["用户浏览器"]
subgraph Host["单机节点"]
SW["Streamlit WebUI<br/>端口 8501<br/>交互式图形界面"]
API["FastAPI Server<br/>端口 8080<br/>REST 编程接口"]
SVC["app/services/<br/>共享业务逻辑层"]
FS[("本地文件系统<br/>config.toml 配置文件<br/>resource/ 字体与音乐<br/>storage/ 任务产物与缓存")]
end
Redis[("Redis 服务器<br/>可选组件<br/>跨进程队列与状态共享")]
subgraph Cloud["外部云服务"]
LLM["LLM 提供商群<br/>OpenAI / Gemini / Qwen<br/>DeepSeek / Moonshot / Ollama<br/>LiteLLM / Cloudflare 等"]
TTS["TTS 语音服务群<br/>Microsoft Edge TTS<br/>Azure Cognitive Services<br/>SiliconFlow CosyVoice2<br/>Google Gemini TTS"]
Stock["素材平台<br/>Pexels API<br/>Pixabay API"]
Social["社交发布<br/>Upload-Post API<br/>TikTok / Instagram"]
end
Browser -->|"HTTP 访问页面"| SW
Browser -->|"REST 调用接口"| API
SW -->|"进程内 import"| SVC
API -->|"进程内 import"| SVC
SVC -->|"读写"| FS
SVC -.->|"可选连接"| Redis
SVC -->|"HTTPS"| LLM
SVC -->|"HTTPS"| TTS
SVC -->|"HTTPS"| Stock
SVC -->|"HTTPS"| Social
关注源代码的模块划分、分层组织与依赖约束。
graph TD
W["webui/Main.py<br/>Streamlit 图形界面"]
C1["controllers/v1/video.py<br/>视频任务 API"]
C2["controllers/v1/llm.py<br/>LLM 调用 API"]
MGR["controllers/manager/<br/>任务队列管理器"]
TASK["services/task.py<br/>7步流水线编排器"]
LLM["services/llm.py<br/>LLM 集成(17种后端)"]
VO["services/voice.py<br/>TTS 集成(4种后端)"]
VID["services/video.py<br/>MoviePy + ffmpeg 合成"]
MAT["services/material.py<br/>Pexels/Pixabay 素材"]
SUB["services/subtitle.py<br/>faster-whisper 字幕"]
UP["services/upload_post.py<br/>社交平台发布"]
CFG["config/config.py<br/>TOML 配置加载"]
UT["utils/utils.py<br/>通用工具函数"]
ST["services/state.py<br/>任务状态管理"]
SCH["models/schema.py<br/>Pydantic 数据模型"]
CNST["models/const.py<br/>常量与枚举"]
EXC["models/exception.py<br/>自定义异常"]
W --> TASK
C1 --> TASK
C1 --> MGR
C2 --> LLM
C2 --> SCH
TASK --> LLM
TASK --> VO
TASK --> VID
TASK --> MAT
TASK --> SUB
TASK --> UP
TASK --> ST
TASK --> SCH
LLM --> CFG
VO --> CFG
VO --> UT
VID --> CFG
VID --> UT
MAT --> CFG
MAT --> UT
ST --> CFG
UP --> CFG
MGR --> ST
SCH --> CFG
SCH --> CNST
关注关键用例及其与外部系统的关联。
graph TD
User(("用户"))
UC0["配置 API Key 与参数"]
UC1["生成完整短视频"]
UC2["仅生成视频脚本"]
UC3["仅生成语音旁白"]
UC4["仅生成字幕文件"]
UC5["查询与删除历史任务"]
UC6["管理背景音乐与本地素材"]
UC7["跨平台发布到 TikTok/Instagram"]
AI["LLM 提供商"]
Tts["TTS 语音服务"]
Pex["Pexels / Pixabay<br/>素材平台"]
UP["Upload-Post<br/>社交发布"]
User --> UC0
User --> UC1
User --> UC2
User --> UC3
User --> UC4
User --> UC5
User --> UC6
User --> UC7
UC1 -.->|include| UC2
UC1 -.->|include| UC3
UC1 -.->|include| UC4
UC1 -.->|include| UC6
UC1 -.->|include| UC7
UC0 --> AI
UC0 --> Tts
UC1 --> AI
UC1 --> Tts
UC1 --> Pex
UC1 --> UP
UC2 --> AI
UC3 --> Tts
UC4 --> Tts
UC7 --> UP