Python 使用 OpenCV 将 MP4 转换为 GIF图

server/2024/11/29 4:59:46/

以下是使用 Python 和 OpenCV 将 MP4 转换为 GIF 的示例代码:

python

python">import cv2
import imageiodef mp4_to_gif(mp4_path, gif_path, fps=10, start_time=None, end_time=None):"""将MP4视频转换为GIF动图。:param mp4_path: 输入MP4视频的路径。:param gif_path: 输出GIF文件的路径。:param fps: GIF的帧率,默认值为10。:param start_time: 开始时间(秒),默认值为None,表示从视频开头开始转换。:param end_time: 结束时间(秒),默认值为None,表示转换到视频结尾。"""cap = cv2.VideoCapture(mp4_path)all_images = []frame_count = 0while True:ret, img = cap.read()if not ret:break# 根据开始时间和结束时间截取帧if start_time is not None and frame_count < start_time * fps:frame_count += 1continueif end_time is not None and frame_count >= end_time * fps:break# 将BGR图像转换为RGB格式,以适应imageio保存GIF的要求img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)all_images.append(img)frame_count += 1# 将帧率转换为每帧之间的延迟时间(毫秒)duration = int(1000 / fps)imageio.mimsave(gif_path, all_images, duration=duration)print("转换完成!")if __name__ == "__main__":input_mp4_path = "your_input_mp4.mp4"  # 替换为实际的输入MP4视频路径output_gif_path = "output.gif"  # 替换为输出GIF文件的路径start_time = 0  # 开始时间,单位:秒,可根据需要修改end_time = 5  # 结束时间,单位:秒,可根据需要修改fps = 15  # GIF的帧率,可根据需要修改mp4_to_gif(input_mp4_path, output_gif_path, fps=fps, start_time=start_time, end_time=end_time)

在上述代码中:

读取视频帧

  • 首先使用cv2.VideoCapture函数打开指定的 MP4 视频文件,并创建一个视频捕获对象cap2.
  • 通过一个循环不断读取视频的帧,使用cap.read()函数读取视频的下一帧图像。如果读取失败(视频结束),则跳出循环2.

截取特定时间段的帧

  • 根据提供的start_timeend_time参数来控制要转换的帧范围。如果start_time不为None,并且当前帧索引小于start_time乘以帧率的值,则跳过该帧。如果end_time不为None,并且当前帧索引大于等于end_time乘以帧率的值,则跳出循环2.

转换图像格式

  • 使用cv2.cvtColor函数将读取的图像帧从 BGR 格式转换为 RGB 格式,以便后续生成 GIF 图片时颜色显示正确2.

保存为 GIF

  • 将转换后的图像帧添加到all_images列表中。
  • 根据提供的帧率fps计算每帧之间的延迟时间duration,以便生成的 GIF 图片播放时具有指定的帧率2.
  • 使用imageio.mimsave函数将all_images列表中的帧保存为 GIF 图片。指定参数duration为帧间延迟时间。保存的 GIF 图片文件名由提供的gif_path参数决定2.

在运行代码之前,需要先安装opencv-pythonimageio库,可以通过pip install opencv-python imageio命令进行安装1. 同时,要将代码中的输入 MP4 视频路径、输出 GIF 文件路径、开始时间、结束时间和帧率等参数按照实际需求进行替换 。

效果如下


http://www.ppmy.cn/server/145818.html

相关文章

【探寻密码的奥秘】-000:密码相关概念定义及介绍(持续更新~~)

密码相关概念 1、密码学 1、密码学 密码学是研究密码与密码活动本质和规律&#xff0c;以及指导密码实践的科学&#xff0c;主要探索密码编码和密码分析的一般规律&#xff0c;它是一门结合数学、计算机科学、信息通信系统等多门学科为一体的综合性学科。 密码学的常见应用场景…

算法篇:贪心算法

题目一&#xff1a;均分纸牌 有n堆纸牌&#xff0c;编号分别为 1&#xff0c;2&#xff0c;…,n1&#xff0c;2&#xff0c;…,n。每堆上有若干张&#xff0c;但纸牌总数必为nn的倍数。可以在任一堆上取若干张纸牌&#xff0c;然后移动。 移牌规则为&#xff1a;在编号为11的…

读书笔记_《创华为.任正非传》_精华书摘

人生经历 43岁&#xff0c;开始创建华为 爷爷:金华火腿乡间厨师 父亲: 1910年生&#xff0c;北平民大经济系读书->职业学校任教->国民党兵工厂会计&#xff0c;组织读书会(读书会后来有很多人在新中国成立后成为高级干部。) 母亲: 高中毕业&#xff0c;乡村教师&#xf…

MacBook上安装 Windows 10 后,System 进程 CPU 占用 100% 的问题

在 MacBook 2014 上安装 Windows 10 后&#xff0c;System 进程 CPU 占用 100% 的问题通常与以下因素有关&#xff1a; 1. 驱动程序问题 在 Mac 上运行 Windows 通常需要通过 Boot Camp 提供正确的驱动程序。不兼容或缺失的驱动可能导致 CPU 高占用。 解决方法 检查驱动程序是…

14、保存与加载PyTorch训练的模型和超参数

文章目录 1. state_dict2. 模型保存3. check_point4. 详细保存5. Docker6. 机器学习常用库 1. state_dict nn.Module 类是所有神经网络构建的基类&#xff0c;即自己构建一个深度神经网络也是需要继承自nn.Module类才行&#xff0c;并且nn.Module中的state_dict包含神经网络中…

【杂谈】-Linux中的GUI与图形栈

Linux中的GUI与图形栈 在本文中&#xff0c;我们将探讨基于Linux操作系统中使用的图形栈。我们将了解使图形应用程序成为可能的不同技术&#xff0c;以及它们是如何相互交互的。我们将从基础开始&#xff0c;逐步引导至高级的GUI工具包。 最后&#xff0c;我们将讨论这些技术…

使用 Go 语言封装 MinIO 相关操作

目录 使用 Go 语言封装 MinIO 相关操作背景介绍代码实现结构体定义初始化 MinIO 客户端上传文件下载文件列出文件删除文件获取文件的预签名 URL 使用示例总结 使用 Go 语言封装 MinIO 相关操作 背景介绍 MinIO 是一个高性能的对象存储服务&#xff0c;兼容 Amazon S3 API&…

鸿蒙进阶篇-状态管理之@Prop@Link

大家好啊&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习状态管理。 开始组件化开发之后&#xff0c;如何管理组件的状态会变得尤为重要&#xff0c;咱们接下来系统的学习一下这部分的内容 状态管理机制 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&a…