当前位置: 首页 > article >正文

使用Python和`moviepy`库从输入的图片、动图和音频生成幻灯片式视频的示例代码

下面是一个使用Python和moviepy库从输入的图片、动图和音频生成幻灯片式视频的示例代码。在这个示例中,我们将依次展示每张图片或动图,同时播放音频。

from moviepy.editor import ImageClip, VideoFileClip, AudioFileClip, concatenate_videoclips

def create_slideshow_video(image_paths, audio_path, output_path, duration_per_image=5):
    """
    从输入的图片、动图和音频生成幻灯片式的视频。

    :param image_paths: 图片和动图的文件路径列表
    :param audio_path: 音频文件的路径
    :param output_path: 输出视频的路径
    :param duration_per_image: 每张静态图片显示的时长(秒),默认为5秒
    """
    clips = []

    for image_path in image_paths:
        try:
            # 尝试将文件作为动图处理
            clip = VideoFileClip(image_path)
        except:
            # 如果不是动图,将其作为静态图片处理
            clip = ImageClip(image_path).set_duration(duration_per_image)

        clips.append(clip)

    # 拼接所有的视频片段
    final_clip = concatenate_videoclips(clips, method="compose")

    # 加载音频文件
    audio = AudioFileClip(audio_path)

    # 将音频添加到视频中
    final_clip = final_clip.set_audio(audio)

    # 保存最终的视频
    final_clip.write_videofile(output_path, fps=24)

    # 关闭所有的剪辑对象
    for clip in clips:
        clip.close()
    final_clip.close()
    audio.close()

if __name__ == "__main__":
    # 图片和动图的文件路径列表
    image_paths = ["image1.jpg", "image2.gif", "image3.jpg"]
    # 音频文件的路径
    audio_path = "audio.mp3"
    # 输出视频的路径
    output_path = "output_video.mp4"

    create_slideshow_video(image_paths, audio_path, output_path)

代码说明:

  1. 导入必要的库:从moviepy.editor导入所需的类,包括ImageClip用于处理静态图片,VideoFileClip用于处理动图和视频,AudioFileClip用于处理音频,concatenate_videoclips用于拼接视频片段。
  2. 定义create_slideshow_video函数:该函数接受图片和动图的文件路径列表、音频文件的路径、输出视频的路径以及每张静态图片显示的时长作为参数。
  3. 处理图片和动图:遍历图片和动图的文件路径列表,尝试将每个文件作为动图处理。如果失败,则将其作为静态图片处理,并设置显示时长。
  4. 拼接视频片段:使用concatenate_videoclips函数将所有的视频片段拼接成一个最终的视频。
  5. 添加音频:加载音频文件,并将其添加到最终的视频中。
  6. 保存视频:使用write_videofile方法将最终的视频保存到指定的输出路径。
  7. 关闭剪辑对象:关闭所有的剪辑对象,释放资源。

使用方法:

image_paths列表中的文件路径替换为你实际的图片和动图文件路径,将audio_path替换为你实际的音频文件路径,将output_path替换为你想要保存的输出视频的路径,然后运行代码即可生成幻灯片式的视频。


http://www.kler.cn/a/537682.html

相关文章:

  • 星网锐捷 DMB-BS LED屏信息发布系统taskexport接口处存在敏感信息泄露
  • MySQL的理解
  • 利用 IMU 估计人体关节轴向和位置 —— 论文推导
  • 【数据采集】基于Selenium采集豆瓣电影Top250的详细数据
  • STM32的HAL库开发---高级定时器---输出比较模式实验
  • Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
  • 盘姬工具箱:完全免费的电脑工具箱
  • DeepSeek从入门到精通:全面掌握AI大模型的核心能力
  • 【Outlook】如何将特定邮件显示在Outlook的重点收件箱中
  • 机器学习数学基础:19.线性相关与线性无关
  • TaskBuilder项目实战:创建项目
  • 为AI聊天工具添加一个知识系统 之90 详细设计之31 Derivation 之5-- 神经元变元用它衍生神经网络
  • 动手写ORM框架 - GeeORM第一天 database/sql 基础
  • IDEA查看项目依赖包及其版本
  • AIGC-微头条爆款文案创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)
  • 2025.2.8总结
  • 使用Postman创建Mock Server
  • .NET周刊【1月第4期 2025-01-26】
  • Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)
  • [渗透测试]热门搜索引擎推荐— — shodan篇
  • 本地缓存 Caffeine 中的时间轮(TimeWheel)是什么?
  • 机器学习之心的创作纪念日
  • move_base全局路径规划震荡之参数调优
  • Spring Boot常见面试题总结
  • SVN 提交与原有文件类型不一样的文件时的操作
  • [权限提升] Linux 提权 维持 — 系统错误配置提权 - PATH 环境变量劫持提权