
PowerPoint 很适合用于现场演示或由演讲者控制播放,但在一些场景中,将演示文稿转换为视频会更方便。例如培训资料、产品演示、课程内容、数字标牌,或者需要上传到视频平台的演示内容,都更适合使用视频格式进行分发和播放。
在 Windows 上,一种常见做法是通过 COM API 自动化 Microsoft PowerPoint。不过,这种方式要求计算机上安装 PowerPoint,也不适用于无图形界面的 Linux 服务器、Docker 容器或云端环境。
本文将介绍如何使用 Python 以编程方式将 PowerPoint 演示文稿转换为 MP4 或 WMV 视频,而无需使用 COM 自动化。主要内容包括:
- 前置准备
- 使用 Python 将 PowerPoint 转换为 MP4
- 使用 Python 将 PowerPoint 转换为 WMV
- 自定义视频帧率和幻灯片播放时长
- 使用 Python 将指定范围的幻灯片转换为视频
- 支持的动画和幻灯片切换效果
- PowerPoint 转视频的注意事项
前置准备
本文使用 Spire.Presentation for Python 处理和渲染 PowerPoint 演示文稿,无需安装 Microsoft PowerPoint。视频导出还需要使用 FFmpeg,将渲染后的幻灯片内容编码为最终的视频文件。
第 1 步:安装所需库
通过 pip 从 PyPI 安装:
bash
pip install Spire.Presentation
**注意:**PowerPoint 转视频功能从 11.8.1 版本开始提供支持。
第 2 步:安装 FFmpeg 并找到 bin 目录
根据所使用的操作系统安装 FFmpeg,然后找到 ffmpeg 可执行文件所在的目录。后面的代码示例需要使用该目录。
Windows :
- 打开 FFmpeg 官方下载页面,将鼠标移到 Windows 图标上。
- 点击 Windows builds from gyan.dev ,也可以选择 Windows builds by BtbN。
- 在 release builds 部分下载 release essentials 版本,例如 ffmpeg-release-essentials.7z 或对应的 .zip 压缩包。
- 解压文件并找到其中的 bin 目录,例如:
E:\software\ffmpeg-9.0.1-essentials_build\bin
Linux (Ubuntu/Debian ):
- 更新软件包索引并安装 FFmpeg:
sudo apt update
sudo apt install ffmpeg - 查看 FFmpeg 可执行文件的位置:
which ffmpeg
运行该命令通常会得到/usr/bin/ffmpeg,这种情况下,后续代码中使用的 FFmpeg 目录就是/usr/bin。
使用 Python 将 PowerPoint 转换为 MP4
对于大多数使用场景,MP4 是更通用的视频格式,它可以直接在现代浏览器、媒体播放器、在线学习平台和移动设备上播放。
转换过程比较简单:加载 PPTX 文件,通过 SaveToVideoOption 指定 FFmpeg 所在目录,然后以 MP4 格式保存演示文稿。
示例代码如下:
python
from spire.presentation import *
# 指定输入和输出文件
input_file = "Sample.pptx"
output_file = "PowerPointToVideo.mp4"
# 指定 FFmpeg 可执行文件所在目录
ffmpeg_dir = r"E:\software\ffmpeg-9.0.1-essentials_build\bin"
# 加载 PowerPoint 演示文稿
presentation = Presentation()
presentation.LoadFromFile(input_file)
# 配置视频导出所需的 FFmpeg
presentation.SaveToVideoOption = SaveToVideoOption(ffmpeg_dir)
# 将演示文稿转换为 MP4
presentation.SaveToFile(output_file, FileFormat.MP4)
# 释放资源
presentation.Dispose()
使用 Python 将 PowerPoint 转换为 WMV
如果视频需要用于较旧的 Windows 工作流,或者目标应用程序明确要求使用 Windows Media Video,也可以将 PowerPoint 转换为 WMV。
该转换的实现方式与 MP4 基本相同,主要区别是 SaveToFile() 方法中指定的输出格式不同。
python
from spire.presentation import *
# 指定输入和输出文件
input_file = "Sample.pptx"
output_file = "PowerPointToVideo.wmv"
# 指定 FFmpeg 可执行文件所在目录
ffmpeg_dir = r"E:\software\ffmpeg-9.0.1-essentials_build\bin"
# 加载 PowerPoint 演示文稿
presentation = Presentation()
presentation.LoadFromFile(input_file)
# 配置视频导出所需的 FFmpeg
presentation.SaveToVideoOption = SaveToVideoOption(ffmpeg_dir)
# 将演示文稿转换为 WMV
presentation.SaveToFile(output_file, FileFormat.WMV)
# 释放资源
presentation.Dispose()
自定义视频帧率和幻灯片播放时长
默认的视频导出设置并不一定适合所有演示文稿。例如,培训类演示可能需要让每页幻灯片停留更长时间,而包含动画的演示文稿则可能需要使用更高的帧率,以获得更流畅的播放效果。
通过 SaveToVideoOption,可以分别设置视频帧率以及每页幻灯片的显示时长。
python
from spire.presentation import *
# 指定输入和输出文件
input_file = "Sample.pptx"
output_file = "CustomizedVideo.mp4"
# 指定 FFmpeg 目录
ffmpeg_dir = r"E:\software\ffmpeg-9.0.1-essentials_build\bin"
# 加载 PowerPoint 演示文稿
presentation = Presentation()
presentation.LoadFromFile(input_file)
# 创建视频导出选项
video_options = SaveToVideoOption(ffmpeg_dir)
# 设置视频帧率
video_options.Fps = 40
# 设置每页幻灯片显示 8 秒
video_options.DurationForEachSlide = 8
# 应用视频设置
presentation.SaveToVideoOption = video_options
# 导出为 MP4
presentation.SaveToFile(output_file, FileFormat.MP4)
# 释放资源
presentation.Dispose()
其中,Fps 用于设置每秒生成的帧数,DurationForEachSlide 用于设置每页幻灯片在视频中的显示时长。提高帧率或延长幻灯片播放时间,也会增加视频生成所需的处理时间和资源。
**注意:**Fps 最大可设置为 60。DurationForEachSlide 每页最长可设置为 300 秒,即 5 分钟,以避免视频生成时间过长。
使用 Python 将指定范围的幻灯片转换为视频
有时并不需要将整个演示文稿都转换为视频。例如,一个较长的培训文稿中可能只有部分幻灯片需要单独导出。
这种情况下,可以将指定范围内的幻灯片复制到一个新的演示文稿中,再将新的演示文稿导出为视频。
下面的示例将第 3 到第 6 页幻灯片转换为 MP4:
python
from spire.presentation import *
def convert_slide_range_to_video(input_file: str, output_file: str, start_index: int, end_index: int):
ppt = Presentation()
new_ppt = None
try:
# 加载源演示文稿
ppt.LoadFromFile(input_file)
# 验证幻灯片范围
if start_index < 0 or end_index >= ppt.Slides.Count or start_index > end_index:
raise ValueError("指定的幻灯片范围无效。")
# 创建新的演示文稿
new_ppt = Presentation()
# 删除默认创建的空白幻灯片
new_ppt.Slides.RemoveAt(0)
# 使用与源演示文稿相同的幻灯片尺寸
new_ppt.SlideSize.Type = SlideSizeType.Custom
new_ppt.SlideSize.Size = ppt.SlideSize.Size
# 将指定范围的幻灯片复制到新演示文稿
for i in range(start_index, end_index + 1):
new_ppt.Slides.AppendBySlide(ppt.Slides[i])
# 配置视频导出所需的 FFmpeg
new_ppt.SaveToVideoOption = SaveToVideoOption(
r"E:\software\ffmpeg-9.0.1-essentials_build\bin"
)
# 将选定的幻灯片导出为 MP4
new_ppt.SaveToFile(output_file, FileFormat.MP4)
finally:
if new_ppt is not None:
new_ppt.Dispose()
ppt.Dispose()
# 将第 3 到第 6 页幻灯片转换为视频
convert_slide_range_to_video("Sample.pptx", "SelectedSlides.mp4", 2, 5)
这里,start_index 和 end_index 都从 0 开始计数,并且包含起始和结束位置。因此,传入 2 和 5 时,对应的就是第 3 到第 6 页幻灯片。
支持的动画和幻灯片切换效果
PowerPoint 转视频时,可以保留部分常见的幻灯片切换效果以及进入和退出动画,使导出的视频尽可能接近原演示文稿的播放效果。
| 效果类型 | 支持的效果 |
|---|---|
| 幻灯片切换效果 | Fade、Push、Wipe(上、下、左、右)、Reveal、Cover、Split、Dissolve、Clockwise Clock |
| 进入动画 | Fly In、Float In、Appear、Fade、Split、Wipe |
| 退出动画 | Fly Out、Float Out、Disappear、Fade、Split、Wipe |
并非所有 PowerPoint 效果都受支持。对于较复杂的切换效果或动画组合,最终视频中的呈现效果可能与 Microsoft PowerPoint 中的原始播放效果存在差异。如果演示文稿大量使用动画,建议在导出后检查实际播放效果。
PowerPoint 转视频的注意事项
- 首先检查 FFmpeg 路径
SaveToVideoOption 需要传入 FFmpeg 可执行文件所在的目录。如果路径错误或当前程序无法访问该目录,视频将无法正常编码。较旧的 FFmpeg 版本也可能影响某些幻灯片切换效果。 - 确保所需字体已经安装
如果执行转换的计算机没有安装演示文稿中使用的字体,导出结果中的文字外观、换行或版式可能与原始幻灯片不同。 - 预留足够的处理时间和磁盘空间
更高的帧率、更长的幻灯片播放时长以及较大的演示文稿都会生成更多中间帧,因此转换过程中需要更多处理时间和临时存储空间。
总结
使用 Python 可以在不安装 Microsoft PowerPoint 的情况下,将 PowerPoint 演示文稿转换为 MP4 或 WMV 视频,并根据实际需要调整视频帧率、幻灯片播放时长以及需要导出的幻灯片范围。
对于包含复杂动画、切换效果或特殊字体的演示文稿,在进行批量转换之前,建议先检查少量文件的导出结果,确认最终视频的播放效果符合预期。