将 PPT 自动转换为有声视频讲解的桌面客户端
🌐 语言切换: English
SlideTalk 是一款功能强大的桌面应用,能够将 PowerPoint 演示文稿自动转换为有声视频讲解。通过集成 AI 语音合成和视频编辑功能,让您的演示文稿动起来!
| 功能模块 | 描述 |
|---|---|
| PPT 导入解析 | 支持 .ppt/.pptx/.pdf 文件,自动提取每页内容和备注,生成高清缩略图 |
| 文案编辑 | 每页独立文案编辑,支持 AI 智能改写、扩写、精简 |
| 语音合成 | 多音色选择,语速/语调/音量可调,支持声音克隆(参考音频) |
| 字幕配置 | 每页字幕内容编辑 + 全局样式设置 |
| 背景音乐 | 内置音乐库 + BGM 全局配置(音量/淡入淡出) |
| 视频导出 | 支持多种格式、分辨率、帧率、画质设置,实时进度展示 |
| 主题切换 | 深色/浅色/跟随系统三种主题,即时生效 |
| 项目管理 | 支持搜索、排序、重命名、删除项目 |
| 技术 | 版本 | 用途 |
|---|---|---|
| Vue | 3.5+ | 前端框架 |
| TypeScript | 5.7+ | 类型安全 |
| Pinia | 2.3+ | 状态管理 |
| Vue Router | 4.5+ | 路由管理 |
| Lucide Vue | 0.469+ | 图标库 |
| Vite | 6.0+ | 构建工具 |
| 技术 | 版本 | 用途 |
|---|---|---|
| Electron | 33+ | 桌面应用框架 |
| electron-builder | 25+ | 打包工具 |
| 技术 | 用途 |
|---|---|
| Python | 后端语言 |
| FastAPI | API 框架 |
| PyMuPDF | PDF 解析与图片转换 |
| python-pptx | PPTX 文件解析 |
| ffmpeg | 视频合成与音频混音 |
| comtypes | Windows COM 自动化(PowerPoint/WPS) |
SlideTalk/
├── electron/ # Electron 主进程
│ ├── main.ts # 主进程入口(窗口管理、IPC)
│ ├── preload.ts # 预加载脚本(contextBridge)
│ ├── shared/
│ │ └── ipc-types.ts # IPC 类型定义
│ └── services/
│ ├── index.ts # 服务注册
│ ├── pythonService.ts # Python 后端进程管理
│ ├── mock/ # Mock 服务实现(开发测试)
│ │ ├── pptParser.ts # Mock PPT 解析
│ │ ├── ttsService.ts # Mock 语音合成
│ │ ├── llmService.ts # Mock AI 改写
│ │ ├── videoExporter.ts # Mock 视频导出
│ │ └── seedData.ts # 示例项目数据
│ └── real/
│ └── backendClient.ts # 真实后端 API 调用
├── ppt-video-backend/ # Python 后端服务
│ ├── app.py # FastAPI 入口
│ ├── core.py # 核心业务逻辑
│ └── requirements.txt # Python 依赖
├── src/ # 前端渲染层
│ ├── components/
│ │ ├── common/ # 通用组件(Button/Input/Modal 等)
│ │ ├── editor/ # 编辑器组件
│ │ ├── export/ # 导出相关组件
│ │ ├── home/ # 首页组件
│ │ └── layout/ # 布局组件(Titlebar/Sidebar)
│ ├── composables/ # 组合式函数(useTheme/useToast)
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia 状态管理
│ ├── services/ # 渲染层服务抽象
│ ├── styles/ # 全局样式与主题
│ ├── types/ # TypeScript 类型定义
│ ├── views/ # 页面视图
│ ├── App.vue # 根组件
│ └── main.ts # 应用入口
├── public/ # 静态资源
│ └── voices/ # 预置音色示例
├── resources/ # 打包资源(图标)
├── dist/ # 前端构建产物(自动生成)
├── dist-electron/ # Electron 构建产物(自动生成)
├── release/ # 打包输出目录(自动生成)
├── package.json # 项目依赖与脚本
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
└── README.md # 项目说明文档
- Node.js: >= 20.x
- Python: >= 3.10
- ffmpeg: 需安装并添加到系统 PATH
- PPT 转 PDF 引擎(任选其一):
- Microsoft PowerPoint(推荐)
- WPS Office
- LibreOffice
# 安装前端依赖
npm install
# 安装后端依赖(进入后端目录)
cd ppt-video-backend
pip install -r requirements.txt
cd ..Electron 下载加速(国内网络):
# Windows (PowerShell) $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" npm install
npm run dev启动 Vite 开发服务器 + Electron 主进程,支持热更新。
npm run typechecknpm run buildnpm run build:win产物输出到 release/ 目录:
SlideTalk-Setup-1.0.0.exe- NSIS 安装包SlideTalk-1.0.0-portable.exe- 免安装便携版
cd ppt-video-backend
python app.py默认端口:17878
curl http://localhost:17878/health返回示例:
{
"status": "ok",
"version": "1.0.0",
"ppt_engines": [
{"name": "powerpoint", "display": "Microsoft PowerPoint", "available": true, "path": null},
{"name": "wps", "display": "WPS Office", "available": false, "path": null},
{"name": "libreoffice", "display": "LibreOffice", "available": true, "path": "C:\\Program Files\\LibreOffice\\program\\soffice.exe"}
],
"ppt_engines_available": ["powerpoint", "libreoffice"],
"soffice": "C:\\Program Files\\LibreOffice\\program\\soffice.exe",
"ffmpeg": "ffmpeg"
}- 安装 OmniVoice 服务(参考 OmniVoice 文档)
- 启动 TTS 服务(默认端口 8002)
- 在应用设置中配置 TTS 服务地址
在应用设置中配置:
- API Key
- API Base URL(支持 OpenAI 兼容接口)
- Model 名称
POST /api/parse-ppt
Content-Type: application/json
{
"file_path": "C:/path/to/presentation.pptx",
"thumb_dir": "C:/path/to/thumbs"
}
POST /api/tts-single
Content-Type: application/json
{
"text": "这是一段测试文本",
"tts_endpoint": "http://localhost:8002",
"ref_audio_path": "C:/path/to/reference.wav",
"language": "zh"
}
POST /api/llm-rewrite
Content-Type: application/json
{
"text": "原始文本",
"mode": "rewrite",
"api_key": "your-api-key",
"api_base": "https://api.example.com/v1",
"model": "gpt-4"
}
POST /api/export-video
Content-Type: application/json
{
"ppt_path": "C:/path/to/presentation.pptx",
"narrations": ["第一页旁白", "第二页旁白", "..."],
"output_path": "C:/path/to/output.mp4",
"tts_endpoint": "http://localhost:8002",
"resolution": "1920:1080",
"bgm_path": "C:/path/to/bgm.mp3",
"bgm_volume": 0.10
}
GET /ws/progress/{task_id}
应用内置三套主题:
| 主题 | 描述 |
|---|---|
| 深色 | 剪映青蓝深色风格(默认) |
| 浅色 | 清爽浅色风格 |
| 跟随系统 | 自动适配操作系统主题 |
主题切换采用双写方案(localStorage + IPC 持久化),HTML 内联脚本防闪烁。
开发环境默认使用 Mock 模式,所有业务接口均为模拟实现:
| 接口 | Mock 行为 |
|---|---|
| PPT 解析 | 接受任意文件,模拟 2-3 秒解析,生成纯色占位缩略图 |
| 语音合成 | 返回模拟音频 URL |
| AI 改写 | 模拟 1-2 秒延迟,返回原文 + 模式后缀 |
| 视频导出 | 4 阶段进度模拟,约 5 秒完成 |
切换到真实后端:修改 electron/services/index.ts 中的服务注册逻辑。
A: 设置 Electron 镜像:
$env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
npm installA: 检查是否安装了 PPT 转 PDF 引擎(PowerPoint/WPS/LibreOffice),或尝试将 PPT 另存为 PDF 后直接导入。
A: 检查:
- ffmpeg 是否安装并添加到 PATH
- 输出目录是否有写权限
- TTS 服务是否正常运行
A: 检查 package.json 的 build.directories.output 是否为 release(不能是 dist)。
A: 组件内样式必须使用 CSS 变量(var(--bg-1) 等),不能硬编码颜色。
欢迎贡献代码!请遵循以下规范:
- Fork 项目
- 创建功能分支(
feature/xxx) - 提交代码(遵循 Conventional Commits)
- 创建 Pull Request
MIT License - 详见 LICENSE
SlideTalk - 让您的幻灯片开口说话 🎤

