5.0 KiB
5.0 KiB
Day 1 - ViGent 数字人口播系统开发
日期:2026-01-13
开发环境:Windows 11 (本地开发) / Ubuntu 24.04 (服务器部署)
目标平台:Dell PowerEdge R730 (2× RTX 3090 24GB)
🎯 今日目标
搭建数字人口播视频生成系统的完整框架,包括:
- 后端 API (FastAPI)
- 前端 UI (Next.js)
- 视频生成流程 (TTS + FFmpeg)
- 社交媒体发布功能
📦 项目初始化
后端项目结构
backend/
├── app/
│ ├── api/ # API 路由
│ │ ├── materials.py # 素材管理
│ │ ├── videos.py # 视频生成
│ │ └── publish.py # 社交发布
│ ├── services/ # 核心服务
│ │ ├── tts_service.py # EdgeTTS 配音
│ │ ├── video_service.py # FFmpeg 视频合成
│ │ ├── lipsync_service.py # MuseTalk 唇形同步
│ │ └── publish_service.py # Playwright 自动发布
│ └── core/
│ └── config.py # 配置管理
├── requirements.txt
└── .env.example
前端项目
- 使用 Next.js 14 + TypeScript + Tailwind CSS
- 主页面: 视频生成界面
- 发布页面:
/publish多平台发布管理
🔧 TTS + 视频合成
EdgeTTS 集成
- 使用
edge-tts库实现免费中文语音合成 - 支持多种音色: 云溪、云健、云扬、晓晓、晓伊
FFmpeg 视频合成
# 核心命令
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4
🐛 Bug 修复: asyncio subprocess 问题
问题:在 FastAPI BackgroundTasks 中调用 asyncio.create_subprocess_exec 导致 NotImplementedError
原因:BackgroundTasks 运行在非 asyncio 上下文中
修复:将 _run_ffmpeg 和 _get_duration 改为使用同步 subprocess.run
# 修复前
result = await asyncio.create_subprocess_exec(...)
# 修复后
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, encoding='utf-8')
状态:✅ 已修复,视频生成成功
🎬 MuseTalk 唇形同步集成
架构设计
- GPU0: 其他服务
- GPU1: MuseTalk 唇形同步
代码实现
lipsync_service.py支持本地模式和远程 API 模式- 通过
CUDA_VISIBLE_DEVICES=1指定使用 GPU1 - 如未配置,自动跳过唇形同步
📱 社交媒体发布
支持平台
| 平台 | 状态 |
|---|---|
| 抖音 | ✅ 框架完成 |
| 小红书 | ✅ 框架完成 |
| 微信视频号 | ✅ 框架完成 |
| 快手 | ✅ 框架完成 |
| B站 | ✅ 框架完成 |
技术方案
- 使用 Playwright 进行浏览器自动化
- Cookie 管理实现免登录发布
- 前端提供账号管理和一键发布 UI
📚 文档产出
| 文件 | 说明 |
|---|---|
README.md |
项目说明 |
DEPLOY_MANUAL.md |
手动部署指南 |
deploy.sh |
一键部署脚本 |
.env.example |
环境配置模板 |
✅ 今日完成
- ✅ FastAPI 后端框架搭建
- ✅ EdgeTTS 语音合成服务
- ✅ FFmpeg 视频合成服务
- ✅ MuseTalk 唇形同步集成 (代码层面)
- ✅ Next.js 前端 UI (视频生成 + 发布管理)
- ✅ Playwright 社交媒体发布服务
- ✅ 端到端视频生成测试通过
- ✅ 服务器部署文档编写
下午调试记录 (Afternoon Debugging Session)
1. 前端 "Undefined" 错误
- 现象:视频生成失败,弹窗显示 "undefined"。
- 原因:
- 后端
videos.py在异常捕获时未设置message字段,前端无法获取错误信息。 - 路径解析逻辑错误导致文件未找到。
- 后端
- 修复:
- 后端补充
tasks[task_id]["message"]字段。 - 修复
pathlib.Path引用缺失。
- 后端补充
2. 路径解析问题
- 现象:本地测试时无法找到素材文件。
- 原因:Windows 本地路径 (
d:\...) 与相对路径混合使用,且BASE_DIR指向了错误的父级目录。 - 修复:
materials.py所有返回路径改为相对路径 (uploads/materials/xxx)。videos.py增加智能路径解析:非绝对路径自动拼接BASE_DIR。config.py调整BASE_DIR指向项目根目录。
3. 语法错误修复
- 现象:
page.tsx出现Parsing ecmascript source code failed。 - 原因:调试代码逻辑错误地插入到了 JSX渲染块中。
- 修复:完全重写
page.tsx,规范化代码结构,增加 "Raw Response" 调试面板。
4. 本地 Fallback 逻辑验证
- 现象:进度条从 5% 直接跳到 100%。
- 原因:本地 MuseTalk 未启用,系统触发
fallback逻辑(仅复制文件)。 - 验证:符合预期行为,确保了无 GPU 环境下的流程连通性。
📋 明日计划
- 在服务器上部署系统
- 下载 MuseTalk 模型权重
- 测试完整唇形同步流程
- 优化前端 UI 交互体验