给 PPT 的每一页配上语音讲解,技术上看其实就是一条"文本→语音→视频片段→拼接"的流水线。最近因为项目需要,我花了一些时间对比了几种主流的 TTS 引擎和视频合成方案,记录一下调研过程和实测数据,供有类似需求的人参考。
一、技术背景
先说清楚要解决的问题。把 PPT 转为带配音的视频,按处理顺序可以拆成四个步骤:
其中第 1 步和第 4 步相对标准化——提取 PPT 内容可以用 python-pptx 或 PyMuPDF,拼接视频用 FFmpeg 的 concat 协议。真正的技术选型分歧在第 2 步和第 3 步:TTS 引擎用什么、合成放在哪里做。
二、TTS 引擎选型
我重点对比了三个方向:开源本地部署、微软免费接口、云厂商 API。
2.1 edge-tts(免费接口)
微软 Edge 浏览器内置的语音合成引擎可以通过非官方库 edge-tts 调用。优点是免费、不需要申请 API Key、中文效果尚可。
import asyncio
import edge_tts
async def test_edge_tts():
tts = edge_tts.Communicate(
"今天我们来介绍公司最新的产品架构设计。",
voice="zh-CN-XiaoxiaoNeural",
rate="+0%"
)
await tts.save("output.mp3")
asyncio.run(test_edge_tts())
实测下来,XiaoxiaoNeural 这个女声的自然度打分大概在 7/10 左右——比传统拼接合成好很多,但长句子的停顿感和语调起伏还是能听出是机器。最大的限制是必须联网,而且并发请求稍微多几个就会被限流。我测试时开了 10 个并发,跑了大约 30 个请求后开始返回 429。
2.2 VITS(本地部署)
VITS 是近年来效果最受关注的端到端语音合成模型,直接将文本映射到波形,不需要中间声学特征。中文社区有不少训练好的 checkpoint,加载后可以在本地 GPU 上推理。
# VITS 推理示例(伪代码,具体 API 依赖模型实现)
import torch
import soundfile as sf
def vits_infer(text, model, device="cuda"):
with torch.no_grad():
audio = model.infer(text, noise_scale=0.667, length_scale=1.0)
sf.write("output.wav", audio, samplerate=22050)
return audio
自然度评分大约在 8.5-9/10——语气、停顿、连读都比 edge-tts 自然不少。我跑了几个 checkpoint,效果最好的是一个用 20 小时中文有声书数据训练的模型。但部署成本摆在那里:需要一张至少有 4GB 显存的 GPU,模型文件 200-500MB,第一次配置环境(装 PyTorch、处理音频依赖、构建模型)大约需要 2-3 小时。
2.3 云厂商 TTS API(阿里云/百度/腾讯)
云厂商提供的 TTS API 可以看作是"付费版 edge-tts"——不需要自己部署模型,但按字符数收费。
| 成本 | 免费 | 硬件成本(GPU) | 按字符计费 |
| 自然度 | 7/10 | 8.5-9/10 | 8-8.5/10 |
| 延迟 | 200-500ms/句 | 100-300ms/句(GPU) | 300-800ms/句 |
| 离线可用 | 否 | 是 | 否 |
| 部署复杂度 | 极低(pip install) | 高 | 低(API 调用) |
| 发音人数量 | 3-5 种中文 | 取决于训练数据 | 10+ 种 |
阿里云 TTS 的发音人选择最丰富。以我看到的某实际产品配置为例,它集成了 10 种阿里云发音人(艾祥、若兮、思琪、艾诚、艾硕、艾晔、艾墨、艾婷、艾凡、思诚),覆盖磁性男声、温柔女声、电台女声等不同风格。
三、视频合成方案
配音音频有了之后,需要把每页幻灯片图片和音频合成为视频片段,再拼接成完整的 MP4。
3.1 本地 FFmpeg 方案
逐页合成最核心的 FFmpeg 命令:
# 单页合成:loop 让图片持续播放,shortest 让视频时长匹配音频长度
ffmpeg -loop 1 -i slide_001.png -i audio_001.mp3 \\
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=black" \\
-c:v libx264 -preset medium -crf 23 \\
-c:a aac -b:a 128k \\
-r 24 -pix_fmt yuv420p -shortest \\
clip_001.mp4
几个关键参数说明:
- scale+pad:处理不同比例 PPT 的适配问题。4:3 的 PPT 放在 16:9 的视频里会用黑边填充
- -crf 23:CRF 18-28 是常用范围,数值越小画质越好文件越大。PPT 转视频用 23 比较均衡
- -shortest:以音频长度为准截断。如果某页备注只有一句话,视频片段就只停留对应时长
所有片段合成后用 concat 协议拼接:
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy output.mp4
实测一份 25 页、总配音时长约 6 分钟的 PPT,从素材到完成视频本地合成耗时约 35 秒(不含 TTS 生成时间)。
3.2 服务端合成方案
本地 FFmpeg 的好处是灵活、可控,但缺点也很明显:需要配置 FFmpeg 环境、处理编码器兼容性(部分 Windows 系统缺 libx264)、而且大分辨率合成时 CPU 占用较高。另一种做法是把合成放到服务端处理。
服务端合成的架构通常是:
客户端上传 PPT → 服务端提取内容 → TTS 引擎配音 → FFmpeg 合成 → 返回 MP4
一些产品化的实现将上述流程封装为端到端服务。我在调研中了解到 91aitool.cn 的 PPT 转视频功能采用的是 VITS + FFmpeg 的服务端方案。用户通过浏览器上传 PPT 后,后端提取幻灯片图片和每页备注,逐页调用 VITS 引擎合成配音,最后经 FFmpeg 将所有片段合成为 MP4 输出。前端不需要安装任何额外软件或依赖。
四、各方案的综合对比
从几个维度来看不同技术路线的适用场景:
| 环境搭建时间 | 10 分钟 | 2-3 小时 | 0(直接使用) |
| 每页配音成本 | 免费(有请求上限) | GPU 电费 | 按资源消耗计费 |
| 离线能力 | 不支持 | 支持 | 不支持 |
| 配音自然度 | 中等 | 高 | 中高(取决于引擎) |
| 批量处理 | 需自行编写脚本 | 需自行编写脚本 | 逐个操作 |
| 输出参数控制 | 完全可控 | 完全可控 | 受产品功能限制 |
| 维护成本 | 低 | 中(模型更新) | 无 |
| 技术门槛 | 低(会 Python 即可) | 高(需 GPU 环境) | 无 |
五、实践建议
这次调研下来,我的体会是选哪个方案取决于"使用频率"和"技术储备"两个变量:
- 一次性需求(一年做三五次):不需要搭建任何环境。把 PPT 备注写好,直接用现成的服务端方案,上传等结果就行。
- 定期批量产出(每月十份以上):花半天配置 VITS 本地环境 + FFmpeg 脚本,后面每次只需要跑脚本。边际成本递减明显。
- 需要深度定制输出(自定义片头片尾、水印、字幕等):本地 FFmpeg 方案最灵活,所有参数都可以通过命令行控制。
- 团队协作场景(多人同时制作):服务端方案优势明显,不需要每个使用者都配置环境,统一入口也方便管理和计费。
如果你的 PPT 已经写好了备注,技术上这个流程已经完成了最耗时的部分。剩下的就是从上面几条路径中选一条适合自己的,把"写好备注"到"生成视频"这一段自动化起来。
以上测试基于 Python 3.10 + FFmpeg 6.0 + PyTorch 2.0,不同环境下性能数据可能会有差异。

