# 专项 D:生成链生产化深化 - 规划文档 **专项负责人**:小虾 🦐 **创建时间**:2026-06-19 10:50 GMT+8 **状态**:🔄 进行中 --- ## 一、专项目标 **把当前的 mock 生成逻辑改造为真实的媒体处理管线。** 从"返回假数据"提升到"真正能生成视频"。 --- ## 二、当前状态 ### 当前实现(Mock) **位置**:`apps/worker/tasks.py::generate_video` ```python def generate_video(task_id: str): # Mock: 直接创建一个假的生成结果 session.add(GeneratedVideoModel(...)) session.commit() ``` **问题**: - 没有真实的视频处理 - 返回的是假的文件路径 - 无法真正下载视频 --- ## 三、目标实现 ### 真实生成流程 ``` 1. 获取生成任务 ↓ 2. 加载素材库中的素材 ↓ 3. 分析素材元数据(时长/分辨率/编码) ↓ 4. 根据策略选择素材 ↓ 5. 使用 FFmpeg 进行视频合成 - 拼接视频片段 - 添加转场效果 - 混音(如有配音) ↓ 6. 生成缩略图 ↓ 7. 上传到 MinIO ↓ 8. 创建 GeneratedVideo 记录 ↓ 9. 更新任务状态 ``` --- ## 四、技术方案 ### 方案选择:使用 FFmpeg **理由**: - 功能强大,支持几乎所有视频格式 - Python 有成熟的 wrapper(ffmpeg-python) - 性能好,命令行工具稳定 **替代方案**: - MoviePy(太慢,不适合生产) - OpenCV(功能有限) - 云服务(成本高) --- ## 五、实现计划 ### Phase 1:基础框架(本次) - [ ] 安装 ffmpeg-python 依赖 - [ ] 创建 `VideoProcessor` 类 - [ ] 实现简单的视频拼接 - [ ] 生成缩略图 - [ ] 上传到 MinIO - [ ] 更新 worker 逻辑 ### Phase 2:高级功能(后续) - [ ] 转场效果 - [ ] 字幕叠加 - [ ] 配音混音 - [ ] 滤镜效果 - [ ] 质量优化 --- ## 六、架构设计 ### 新增模块 ``` apps/worker/ └── video_processing/ ├── __init__.py ├── processor.py # VideoProcessor 核心类 ├── ffmpeg_wrapper.py # FFmpeg 命令封装 ├── thumbnail.py # 缩略图生成 └── strategies.py # 生成策略 ``` ### VideoProcessor 接口 ```python class VideoProcessor: def generate_video( self, assets: List[Asset], strategy: Strategy, output_path: str ) -> VideoResult: """生成视频""" pass def generate_thumbnail( self, video_path: str, timestamp: float = 1.0 ) -> str: """生成缩略图""" pass ``` --- ## 七、MVP 范围(本次实现) ### ✅ 必须实现 1. **简单拼接**: - 把多个视频素材按顺序拼接 - 输出单个 MP4 文件 2. **缩略图**: - 从视频第 1 秒截图 3. **存储**: - 上传到 MinIO - 返回正确的文件路径 4. **元数据**: - 正确记录时长/分辨率/大小 ### ❌ 暂不实现 - 转场效果 - 字幕叠加 - 配音混音 - 复杂策略 --- ## 八、验收标准 ### 成功标准 - ✅ 能从素材库选择素材 - ✅ 能生成真实的 MP4 文件 - ✅ 文件能正常播放 - ✅ 缩略图正常显示 - ✅ 能从前端下载 ### 失败标准 - ❌ FFmpeg 报错无法生成 - ❌ 生成的文件无法播放 - ❌ 文件路径错误 --- ## 九、依赖和环境 ### 系统依赖 - FFmpeg 4.0+ (需要预装) - Python 3.12+ ### Python 依赖 ``` ffmpeg-python==0.2.0 pillow>=10.0.0 ``` ### 检查方式 ```bash ffmpeg -version ``` --- ## 十、风险评估 ### 已知风险 1. **FFmpeg 未安装** - 影响:无法生成视频 - 应对:提供安装文档 2. **素材格式不兼容** - 影响:FFmpeg 报错 - 应对:添加格式检查和转码 3. **生成时间长** - 影响:任务超时 - 应对:设置合理的超时时间 4. **存储空间** - 影响:磁盘满 - 应对:设置配额限制 --- ## 十一、执行顺序 1. **环境检查**:确认 FFmpeg 可用 2. **创建模块**:video_processing 目录结构 3. **实现 Processor**:VideoProcessor 核心类 4. **集成 Worker**:更新 generate_video 任务 5. **测试验证**:生成真实视频 6. **文档更新**:添加部署文档 --- **状态**:准备开始执行 **预计时间**:1-2 小时