使用 Python 将 MP4视频 转换为GIF动画

本文介绍如何使用Python的OpenCV和Pillow库将MP4视频转换为GIF动画,包括提取帧、创建GIF及构建GUI界面的详细步骤。适合编程初学者和后端开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Python 将 MP4视频 转换为GIF动画

Python 可用于读取常见的 MP4 视频格式并将其转换为 GIF动画。当然,如果你愿意,你可以使用预先构建的软件,但是自己做很有趣(并且是一种很好的学习体验)。

在本教程中,你将学习以下内容:

  • 如何从 MP4 视频中提取帧
  • 将帧转换为 GIF
  • 创建 MP4 到 GIF GUI

让我们开始吧!

运行环境

你需要安装 OpenCV 绑定以读取 MP4 文件并将视频中的每一帧转换为 JPG 文件。安装教程:

python3 -m pip install opencv-python

你还需要Pillow从你从视频中提取的 JPG 创建动画 GIF。也可以用pip安装:

python3 -m pip install Pillow

要创建 GUI,我这里会用到PySimpleGUI。要安装该库,请使用以下命令:

python3 -m pip install PySimpleGUI

如果你使用的是 Anaconda,则包含 opencv-python 和 Pillow。你只需要单独安装 PySimpleGUI。

如何从 MP4 视频中提取帧

从 MP4 视频中提取帧的第一步是找到要转换为 GIF 的视频。

要从上面的视频中提取单个帧,你需要编写一些 Python。创建一个新文件并将其命名为mp4_converter.py。然后输入以下代码:

import cv2


def convert_mp4_to_jpgs(path):
    video_capture = cv2.VideoCapture(path)
    still_reading, image = video_capture.read()
    frame_count = 0
    while still_reading:
        cv2.imwrite(f"output/frame_{
     frame_count:03d}.jpg", image)
        
        # read next image
        still_reading, image = video_capture.read()
        frame_count += 1


if __name__ == "__main__":
    convert_mp4_to_jpgs("flask_demo.mp4")

此代码采用 MP4 视频文件的路径。然后使用cv2.VideoCapture(path)打开视频。你可以使用此方法通读整个视频并提取每一帧。提取帧时,可以使用cv2.imwrite()将其写出。

当你运行这段代码时,你会发现这个 7 秒的视频产生了 235 帧!

现在准备好拍摄这些帧并将它们转换为动画 GIF。

将帧变成 GIF

该过程的下一步是将使用 OpenCV 从 MP4 文件中提取的帧转换为动画 GIF。

这就是 Pillow 包的用武之地。你可以使用它来接收图像文件夹并创建你的 GIF。打开一个新文件并将其命名为gif_maker.py。然后输入以下代码:

import glob

from PIL import Image


def make_gif(frame_folder):
    images = glob.glob(f"{
     frame_folder}/*.jpg")
    images.sort()
    frames = [Image.open(image) for image in images]
    frame_one = frames[0]
    frame_one.save("flask_demo.gif", format="GIF", append_images=frames,
                   save_all=True, duration=50, loop=0)
    

if __name__ == "__main__":
    make_gif("output")

在这里,你使用 Python 的glob模块在输出文件夹中搜索 JPG 文件。然后对帧进行排序,使它们按正确的顺序排列。最后,你将它们保存为 GIF.

创建 MP4 到 GIF GUI

PySimpleGUI 是一个跨平台的 GUI 框架,可在 Linux、Mac 和 Windows 上运行。它封装了 TkinterwxPythonPyQt 和其他几个 GUI 工具包,为它们提供了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值