Python 使用 OpenCV 将 MP4 转换为 GIF图

news2024/11/26 2:35:40

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

python

import cv2
import imageio

def 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 = 0
    while True:
        ret, img = cap.read()
        if not ret:
            break
        # 根据开始时间和结束时间截取帧
        if start_time is not None and frame_count < start_time * fps:
            frame_count += 1
            continue
        if 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.coloradmin.cn/o/2247598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…

TCP为什么需要三次握手?两次握手或四次握手可以吗?

&#xff08;1&#xff09;三次握手可以保证双方具有接收和发送的能力 第一次握手服务端可以确认客户端的发送能力和服务端的接收能力是正常的&#xff1b;第二次握手客户端可以确认客户端和服务端的收发能力是正常的&#xff0c;但是服务端无法确认客户端的接收能力是正常的&…

Python 获取微博用户信息及作品(完整版)

在当今的社交媒体时代&#xff0c;微博作为一个热门的社交平台&#xff0c;蕴含着海量的用户信息和丰富多样的内容。今天&#xff0c;我将带大家深入了解一段 Python 代码&#xff0c;它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材&#xff0c;比如图片等。…

vue面试题——描述一下vue

目录 1 vue是什么2 Vue的核心特性2.1 数据驱动&#xff08;MVVM&#xff09;2.2 组件化2.3 指令系统 3 Vue跟传统开发的区别 1 vue是什么 简单点说&#xff0c;vue就是一个用于创建用户界面的JavaScript框架&#xff0c;同时也是一个创建单页面应用的Web应用框架&#xff0c;Vu…

Large Spatial Model:End-to-end Unposed Images to Semantic 3D 论文解读

目录 一、概述 二、相关工作 1、SfM和可微神经表示 2、端到端的Image-to-3D 三、LSM 1、密集几何预测 2、2D信息特征提取 3、点特征融合 4、可微渲染 5、损失函数 四、实验 一、概述 该论文提出一种大型空间模型&#xff08;Larget Spatial Model,LSM&#xff09;…

A045-基于spring boot的个人博客系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

VMware17安装之VMware Workstation Pro 16升级到17详细教程

VMware17安装之VMware Workstation Pro 16升级到17详细教程 一、下载安装包二、开始安装三、升级成功 当前使用的是VMware Workstation 16 Pro版本&#xff0c;想用最新的17&#xff0c;但是又不想卸载原来的&#xff0c;所以想尝试下看看能不能直接升级&#xff0c;最终升级成…

nature communications论文 解读

题目《Transfer learning with graph neural networks for improved molecular property prediction in the multi-fidelity setting》 这篇文章主要讨论了如何在多保真数据环境&#xff08;multi-fidelity setting&#xff09;下&#xff0c;利用图神经网络&#xff08;GNNs&…

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录 认识RKNN Toolkit2 工程文件学习路线&#xff1a; Anaconda Miniconda安装.condarc 文件配置镜像源自定义conda虚拟环境路径创建Conda虚拟环境 本地训练环境本地转换环境安装 RKNN-Toolkit2&#xff1a;添加 lin…

07-SpringCloud-Gateway新一代网关

一、概述 1、Gateway介绍 官网&#xff1a;https://spring.io/projects/spring-cloud-gateway Spring Cloud Gateway组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防…

美创科技入选2024数字政府解决方案提供商TOP100!

11月19日&#xff0c;国内专业咨询机构DBC德本咨询发布“2024数字政府解决方案提供商TOP100”榜单。美创科技凭借在政府数据安全领域多年的项目经验、技术优势与创新能力&#xff0c;入选收录。 作为专业数据安全产品与服务提供商&#xff0c;美创科技一直致力于为政府、金融、…

Java编程,配置mongoUri连接mongodb时,需对特殊字符进行转义

一、背景 java程序连接mongo有两种方式&#xff1a; 用户名和密码方式uri方式 1、用户名和密码 以用户数据库为例&#xff0c;注意看它的密码 spring:data:mongodb:host: 192.168.10.17database: db_user_serviceport: 3717username: user_servicepassword: user_service3…

MySQL底层概述—1.InnoDB内存结构

大纲 1.InnoDB引擎架构 2.Buffer Pool 3.Page管理机制之Page页分类 4.Page管理机制之Page页管理 5.Change Buffer 6.Log Buffer 1.InnoDB引擎架构 (1)InnoDB引擎架构图 (2)InnoDB内存结构 (1)InnoDB引擎架构图 下面是InnoDB引擎架构图&#xff0c;主要分为内存结构和磁…

【Github】如何使用Git将本地项目上传到Github

【Github】如何使用Git将本地项目上传到Github 写在最前面1. 注册Github账号2. 安装Git工具配置用户名和邮箱仅为当前项目配置&#xff08;可选&#xff09; 3. 创建Github仓库4. 获取仓库地址5. 本地操作&#xff08;1&#xff09;进入项目文件夹&#xff08;2&#xff09;克隆…

大事件管理系统项目总结(上)

文章目录 大事件管理系统项目总结&#xff08;上&#xff09;Pinia - 配置仓库统一管理Vue3路由配置Vue3导航拦截 大事件管理系统项目总结&#xff08;上&#xff09; Pinia - 配置仓库统一管理 使用pinia多层文件夹嵌套时&#xff0c;导入某个文件的路径会很长&#xff0c;容…

鸿蒙征文|鸿蒙心路旅程:始于杭研所集训营,升华于横店

始于杭研所 在2024年7月&#xff0c;我踏上了一段全新的旅程&#xff0c;前往风景如画的杭州&#xff0c;参加华为杭研所举办的鲲鹏&昇腾集训营。这是一个专门为开发者设计的培训项目&#xff0c;中途深入学习HarmonyOS相关技术。对于我这样一个对技术充满热情的学生来说&…

flowable流程图详细绘制教程

文章目录 前言一、flowable是什么&#xff1f;回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西&#xff1a; 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…

【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行

文章目录&#xff1a; 【Linux 篇】Docker 的容器之海与镜像之岛&#xff1a;于 Linux 系统内探索容器化的奇妙航行前言安装docker-centos7 【Linux 篇】Docker 的容器之海与镜像之岛&#xff1a;于 Linux 系统内探索容器化的奇妙航行 &#x1f4ac;欢迎交流&#xff1a;在学习…

linux从0到1——shell编程9

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…