呈现视觉妙技:使用Python将MP4视频转化为迷人的GIF图像

news/2024/5/20 13:55:11/文章来源:https://blog.csdn.net/m0_62919535/article/details/131077184

前言

GIF图片对于我来说是一个很好的展示方式,GIF 图片能够展示动态的图像效果,对于展示计算机视觉算法或结果非常有用。例如,我可以使用 GIF 图片来展示运动跟踪、姿势识别、图像分割、目标检测等任务的结果,以更生动和直观的方式向读者展示算法的效果。

与静态图像相比,动态的 GIF 图片更能吸引各位读者的注意力,使用 GIF 图片就可以提供更生动、有趣和引人入胜的内容,帮助大家更好地理解和吸收相关的概念和技术。

不仅如此,通过在动态图像中展示关键步骤和变化,我可以更清晰地传达我想表达的信息。

MP4文件转GIF图片

安装moviepy

正常使用pip install moviepy,但却如下报错。

在这里插入图片描述

解决方案:pip3 install moviepy -i http://pypi.douban.com/simple–trusted-host=pypi.douban.com

最后安装成功。

import moviepy.editor as mpeGIF = mpe.VideoFileClip("01.mp4")
print(GIF.fps)
new_clip = GIF.subclip(1, 6)
new_clip.write_gif("output.gif", fps=2)

我查到大家都说的是通过moviepy,三行就能进行转化,但我却发现无论我怎么修改,保存的GIF图片始终只有一帧的画面。

如果有人知道问题所在,还望评论指正!

使用Opencv转化为GIF图

上面修改查询了一点时间未能解决这个问题,我就手写来实现MP4文件转化为GIF图片。

"""
author : Auorui(夏天是冰红茶)
time : 2023-6-7
function: mp4——>GIF
"""
import cv2
import imageiodef Mp4toGif(mp4, name='result.gif', fps=10, start=None, end=None):cap = cv2.VideoCapture(mp4)all_images = []frame_count = 0while True:ret, img = cap.read()if ret is False:breakif start is not None and frame_count < start:frame_count += 1continueif end is not None and frame_count >= end:breakimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)all_images.append(img)frame_count += 1duration = int(1000 / fps)  # 将帧率转换为每帧之间的延迟时间(毫秒)gif = imageio.mimsave(name, all_images, duration=duration)print("转换完成!")# 转换整个视频为 GIF
Mp4toGif(mp4="04.mp4", fps=10)# 转换指定帧范围的视频为 GIF
Mp4toGif(mp4="04.mp4", fps=10, start=0, end=75)

参数简介:

  • mp4:要转换为 GIF 的 MP4 视频文件的路径。
  • name:生成的 GIF 文件的名称。默认值为 “result.gif”。
  • fps:生成的 GIF 的帧率(每秒播放的帧数)。默认值为 10。
  • start:指定要转换的起始帧索引。默认值为 None,表示从视频的第一帧开始转换。
  • end:指定要转换的结束帧索引。默认值为 None,表示转换到视频的最后一帧。

实现思路:
(1)使用 OpenCV 的 cv2.VideoCapture 函数打开指定的 MP4 视频文件,并创建一个视频捕获对象 cap。

(2)创建变量 all_images 来存储所有的图像帧,创建变量 frame_count 来记录当前帧的索引。

(3)通过一个循环不断读取视频的帧,使用 cap.read() 函数读取视频的下一帧图像。如果读取失败(视频结束),则跳出循环。

(4)根据提供的 start 和 end 参数来控制要转换的帧范围。如果 start 不为 None,并且当前帧索引小于 start,则跳过该帧。如果 end 不为 None,并且当前帧索引大于等于 end,则跳出循环。

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

(6)将转换后的图像帧添加到 all_images 列表中。

(7)根据提供的帧率 fps 计算每帧之间的延迟时间 duration,以便生成的 GIF 图片播放时具有指定的帧率。

(8)使用 imageio.mimsave 函数将 all_images 列表中的帧保存为 GIF 图片。指定参数 duration 为帧间延迟时间。保存的 GIF 图片文件名由提供的 name 参数决定。

(9)在转换完成后,输出提示信息表示转换过程已完成。

小结

最近在准备期末考试,所以没有更新博客。而又由于我在为我的专栏写《Opencv项目实战:00 专栏介绍》,而项目的介绍,效果图,GIF图都需要再整理一下。今天突然想到python第三方库这么多,应该是有办法实现的吧!所以这就是本篇的初衷。这比起我平常mp4转GIF的网站还有使用ps转换都要轻松。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_690761.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20230606夏新(Amoi)的4K显示器D320B2000的亮点检测

20230606夏新&#xff08;Amoi&#xff09;的4K显示器D320B2000的亮点检测 2023/6/7 0:14 https://item.jd.com/63690000655.html 夏新&#xff08;Amoi&#xff09;电脑显示器高清家用办公电竞吃鸡游戏液晶监控直播大屏便携显示屏幕 32英寸【直面 4k/144hz双模式 全面屏】黑 …

总结891

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲1遍&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化1讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff…

Day_40关于图的总结

一. 实际问题的抽象与建模 如果我们需要研究一个实际问题&#xff0c;首先第一步就是对这个实际问题进行抽象&#xff0c;抽象是从众多的事物中抽取出共同的、本质性的特征&#xff0c;而舍弃其非本质的特征的过程。具体地说&#xff0c;抽象就是人们在实践的基础上&#xff0c…

chatgpt赋能python:Python如何自动换行

Python如何自动换行 在Python编程中&#xff0c;有时候我们需要输出很长的文本或字符串&#xff0c;这时候就需要自动换行的功能。本文将介绍Python中实现自动换行的几种方法。 方法一&#xff1a;使用字符拼接 在Python中&#xff0c;我们可以使用"“来拼接字符串。如…

Internal error. Please report to https://jb.gg/ide/critical-startup-errors

大佬的解决方式&#xff1a;PyCharm 2023 启动报错的处理 部分同学&#xff0c;发现在安装 PyCharm 2023.1.2 以及 PyCharm 2023.2 的抢先体验版之后&#xff0c;运行的时候愣是直接弹出了类似上面的报错。 反正&#xff0c;别慌&#xff01; 是的&#xff0c;他们有 bug。 …

【Java】深入理解Java虚拟机 | 垃圾收集器GC

《深入理解Java虚拟机》的阅读笔记——第三章 垃圾收集器与内存分配策略。 参考了JavaGuide网站的相关内容&#xff1a;https://javaguide.cn/ Q&#xff1a;哪些内存需要回收&#xff1f;什么时候回收&#xff1f;如何回收&#xff1f; 2 对象已死吗&#xff1f; 2.1 引用…

剪映自动打关键帧

牙叔教程 简单易懂 这是给单张图片打关键帧的教程, 给图片打关键帧有四个步骤 鼠标点选图片打起始帧跳转到图片末尾打结束帧 打帧是一件很费手的事情, 所以我写了个自动化的代码, 专门用来打关键帧, 使用的软件是 AutoHotkey 关键帧参数的详细解释 剪映 自动打关键帧 AutoH…

Azure Log Analytics:与Power BI集成

注&#xff1a;本文最初发布于https://d-bi.gitee.io, 2023年6月迁移至CSDN 前述 Azure Log Analytics是Azure Monitor中的一项分析服务。本文将讲述通过Log Analytics与Power BI集成的方式&#xff0c;获取Power BI工作区内的日志信息&#xff0c;包括各PBI数据集的CPU消耗&a…

Web安全总结

目录 网站架构一般web服务器结构相比于传统的网络攻击&#xff0c;基于web的攻击有什么不同&#xff1f;HTTP协议HTTP响应拆分攻击HTTPS针对HTTPS协议的攻击那么如何保证证书的唯一性&#xff1f; HTTP会话Cookie和Session的关系HTTP会话攻击解决方案 Web访问中的隐私问题Web应…

chatgpt赋能python:Python如何空一行:介绍

Python如何空一行&#xff1a;介绍 在Python编程中&#xff0c;经常需要在输出文字或代码时进行空行分隔。一个常用的场景就是在代码中加入注释&#xff0c;将注释与代码分开&#xff0c;使代码逻辑更加清晰易懂。在某些情况下&#xff0c;也需要在输出文字时进行空行分割&…

ChatGPT-Plugins-Searchable

ChatGPT Plus 用户应该都知道Plus已经开放了插件功能&#xff0c;但是在插件商店里存在一个较大的问题插件数量超过100款&#xff0c;却没有便捷的搜索功能。 而我们在查找一款插件时&#xff0c;需要从插件商店的第一页点击到最后一页一个个找&#xff0c;显然这非常的麻烦。 …

JUC基础-0606

9.ReentrantReadWriteLock读写锁 9.1 锁的基本概念 悲观锁&#xff1a;不支持并发&#xff0c;效率低&#xff0c;但是可以解决所有并发安全问题 乐观锁&#xff1a;支持并发读&#xff0c;维护一个版本号&#xff0c;写的时候比较版本号进行控制&#xff0c;先提交的版本号…

【Vue】三:Vue组件: 组件使用和组件嵌套

文章目录 1.第一个组件1.1不使用组件前1.2创建组件1.3注册组件1.4使用组件1.5 细节 2.组件嵌套 1.第一个组件 1.1不使用组件前 1.2创建组件 Vue.extends({该配置项和new Vue的配置项几乎相同})区别&#xff1a; &#xff08;1&#xff09;创建Vue组件的时候&#xff0c;不能使…

Kubernetes之pod

Kubernetes之pod 在通过docker运行程序时&#xff0c;我们通常会制作Dockerfile文件构建镜像。也可以基于某个镜像运行容器在容器中安装组件之后&#xff0c;再基于容器生成镜像 使用如下命令可生成镜像&#xff0c;想了解更多参数请添加–help docker build -f Dockerfile路…

【Leetcode -138.复制带随机指针的链表 -2130.链表最大孪生和】

Leetcode Leetcode -138.复制带随机指针的链表Leetcode -2130.链表最大孪生和 Leetcode -138.复制带随机指针的链表 题目&#xff1a;给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构…

4种普遍的机器学习分类算法

朴素贝叶斯分类 朴素贝叶斯分类是基于贝叶斯定理与特征条件独立假设的分类方法&#xff0c;发源于古典数学理论&#xff0c;拥有稳定的数学基础和分类效率。它是一种十分简单的分类算法&#xff0c;当然简单并不一定不好用。通过对给出的待分类项求解各项类别的出现概率大小&a…

企业应该如何选择适合自己的直播平台?

企业应该如何选择适合自己的直播平台&#xff1f;本文将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑&#xff0c;帮助您做出明智的决策&#xff0c;或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因素&#xff1a; 1. 企…

【链表的分类】

链表是一种常用的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据元素和指向下一个节点的指针。根据节点的连接方式和节点的性质&#xff0c;链表可以分为多种类型。 单向链表&#xff08;Singly Linked List&#xff09; 单向链表是最基本的链表类…

PyGame游戏编程

Python非常受欢迎的一个原因是它的应用领域非常广泛&#xff0c;其中就包括游戏开发。而是用Python进行游戏开发的首选模块就是PyGame。 1. 初识Pygame PyGame是跨平台Python模块&#xff0c;专为电子游戏设计&#xff0c;包含图像、声音等&#xff0c;创建在SDL&#xff08;…

sms开发文档

sms系统设计参考毕业设计-----------学生选课管理系统的设计 一、使用axios 来实现网页中ajax请求 首先说到axios&#xff0c;是一个类库&#xff0c;他的底层基于ajax库&#xff0c;通常用于ajax请求 ajax又是什么 ajax是一种创建快速动态网页的技术&#xff0c; 传统的页…