使用 Python 将 PowerPoint 转换为视频(无需安装 Microsoft PowerPoint)

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

  1. 打开 FFmpeg 官方下载页面,将鼠标移到 Windows 图标上。
  2. 点击 Windows builds from gyan.dev ,也可以选择 Windows builds by BtbN
  3. release builds 部分下载 release essentials 版本,例如 ffmpeg-release-essentials.7z 或对应的 .zip 压缩包。
  4. 解压文件并找到其中的 bin 目录,例如:
    E:\software\ffmpeg-9.0.1-essentials_build\bin

Linux (Ubuntu/Debian ):

  1. 更新软件包索引并安装 FFmpeg:
    sudo apt update
    sudo apt install ffmpeg
  2. 查看 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 视频,并根据实际需要调整视频帧率、幻灯片播放时长以及需要导出的幻灯片范围。

对于包含复杂动画、切换效果或特殊字体的演示文稿,在进行批量转换之前,建议先检查少量文件的导出结果,确认最终视频的播放效果符合预期。

相关推荐
飞Link1 小时前
零基础:离散数据积分与 Python 实现保姆级教程
python·算法
用户0332126663671 小时前
使用 Python 将 PDF 转换为 Word(转换单个与多个文件)
python
troy1281 小时前
Visual Studio Code 详细教程:从入门到高效开发
开发语言·python
夜雪一千1 小时前
Python ASR音频转文本 完整代码示例
python
JarmanYuo2 小时前
YOLO 涨点研究(十二):具身 CV 进阶篇——Sim2Real 域随机化与真机部署
人工智能·pytorch·python·yolo·计算机视觉
小蒜学长2 小时前
基于Python的微博热搜话题可视化分析系统的设计与实现(代码+数据库+LW)
后端·python·django·数据可视化·情感分析·微博热搜
梦帮科技2 小时前
从提示词到可复现音乐工作流:RNOISE 2.0 的 Prompt Engineering 架构
人工智能·python·mysql·ci/cd·架构·node.js·numpy
飞Link2 小时前
【Numpy】 第三部分:矩阵运算与线性代数(计算篇)
python·numpy
电商API_180079052472 小时前
电商平台数据分析实战_帖子
开发语言·爬虫·python·数据采集·京东