AI.Demo/.codebuddy/plans/试题讲解视频生成功能开发_c0649647.md

144 lines
4.2 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.

---
name: 试题讲解视频生成功能开发
overview: 在 QuestionExplanation.vue 页面添加视频生成功能,将已生成的图片和音频合成为完整视频,支持在线预览、下载,并显示详细的生成进度。
design:
architecture:
framework: vue
styleKeywords:
- Dark Theme
- Glassmorphism
- Minimalist
fontSystem:
fontFamily: PingFang SC
heading:
size: 1.25rem
weight: 600
subheading:
size: 1rem
weight: 500
body:
size: 0.875rem
weight: 400
colorSystem:
primary:
- "#8b5cf6"
- "#3b82f6"
background:
- "#0f172a"
- "#1e293b"
text:
- "#ffffff"
- rgba(255,255,255,0.6)
functional:
- "#22c55e"
- "#ef4444"
todos:
- id: create-composer
content: 创建 videoComposer.js 封装 ffmpeg.wasm 合成逻辑
status: completed
- id: add-video-config
content: 在 config/index.js 添加视频相关配置
status: completed
- id: implement-compose-ui
content: 在 QuestionExplanation.vue 添加合成按钮和进度显示
status: completed
dependencies:
- create-composer
- add-video-config
- id: implement-preview-download
content: 实现视频预览和下载功能
status: completed
dependencies:
- implement-compose-ui
- id: integrate-workflow
content: 整合视频合成到现有生成流程
status: completed
dependencies:
- implement-preview-download
---
## 产品概述
在现有试题讲解页面基础上,新增视频合成功能,将已生成的图片和音频合成为完整的教学讲解视频。
## 核心功能
- 将多个讲解点的图片和音频按顺序合成为单一视频文件
- 视频生成过程中显示详细进度(资源下载、片段合成、视频编码等步骤)
- 支持在线预览生成的视频
- 支持下载视频到本地
## 技术栈
- 视频合成ffmpeg.wasm已安装 @ffmpeg/ffmpeg@0.12.15
- 现有框架Vue 3 + Vite
- HTTP 请求axios已有
## 技术架构
### 实现方案
使用 ffmpeg.wasm 在浏览器端完成视频合成,无需后端服务:
```mermaid
flowchart LR
A[slides数据] --> B[下载图片/音频]
B --> C[写入FFmpeg虚拟文件系统]
C --> D[生成视频片段]
D --> E[合并所有片段]
E --> F[输出MP4视频]
F --> G[预览/下载]
```
### 核心流程
1. **资源准备阶段**:遍历 slides 数组fetch 所有图片和音频到内存
2. **文件系统写入**:将资源写入 ffmpeg.wasm 的虚拟文件系统
3. **片段生成**:每个 slide 生成一个视频片段(图片+音频)
4. **视频合并**:使用 concat demuxer 将所有片段合并为完整视频
5. **输出展示**:生成 Blob URL 用于预览和下载
### 性能考量
- 音频时长检测:需要预先获取每个音频时长,用于视频片段时长控制
- 内存管理:大文件处理时注意释放内存
- 进度反馈:通过 ffmpeg 日志解析当前进度
## 目录结构
```
src/
├── views/
│ └── QuestionExplanation.vue # [MODIFY] 添加视频合成功能
├── utils/
│ └── videoComposer.js # [NEW] ffmpeg.wasm 封装模块
└── config/
└── index.js # [MODIFY] 添加视频相关配置
```
## 实现要点
### videoComposer.js 核心接口
- `initFFmpeg()`: 初始化并加载 ffmpeg.wasm
- `composeVideo(slides, onProgress)`: 主合成函数,返回视频 Blob
- `downloadVideo(blob, filename)`: 触发下载
- `getAudioDuration(audioUrl)`: 获取音频时长
### 状态管理
新增状态:
- `videoStatus`: idle | preparing | composing | ready | error
- `videoProgress`: { stage: string, current: number, total: number, message: string }
- `videoBlobUrl`: 合成完成的视频 URL
## 设计说明
在现有播放器界面基础上,新增视频合成功能区,位于播放控制区域下方。采用深色主题风格与现有界面保持一致。
## 新增区块
1. **视频合成按钮区**:在播放控制区底部添加"生成视频"按钮
2. **进度显示区**:合成过程中显示分步骤进度条和当前状态描述
3. **视频预览区**:合成完成后显示视频播放器和下载按钮