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

用python生成GIF动图—用于博客插图或封面等

生成GIF动图🚀

由于目前自己是在做大模型,还有一些树莓派硬件之类的东西,一是大模型的流式输出的例子需要用到GIF,二是做单片机的时候例如一些灯的闪烁和变化需要用到,所以之前也是一直有这个打算所以就记录一下这个生成GIF的这个过程,我自己是先用录屏软件先把视频录好,然后再用python程序将视频转换成GIF图的这样一个过程。


文章目录

  • 生成GIF动图🚀
  • 1.录屏工具OBS(我自己用的其他的也行)
    • 1.1 下载OBS
    • 1.2 安装OBS
    • 1.3 配置OBS(基础设置/输出路径/输出格式等)
      • 1.3.1 首次安装初始化设置
      • 1.3.2 视频输出格式设置
      • 1.3.3 更改录制视频的保存路径
      • 1.3.4 设置视频源(录哪个软件或显示器的视频)
      • 1.3.5 设置开始录制和结束录制的快捷键
    • 1.4 录制视频
  • 2.使用python将MP4文件转换为GIF动图
    • 2.1 基础转换代码
    • 2.2 压缩转换代码
  • 结束

1.录屏工具OBS(我自己用的其他的也行)


OBS (Open Broadcaster Software) 是一个免费且开源的视频录制和直播软件。它广泛应用于游戏直播、网络研讨会、教育培训等场景,支持多平台操作系统(如Windows、macOS和Linux)。OBS具有强大的功能,包括实时视频和音频捕获、场景切换、视频编码、以及与流媒体平台的无缝集成。其高度可定制的用户界面和插件支持,使用户能够根据需求调整设置,满足各种复杂的录制和直播需求。

1.1 下载OBS

我自己的话是比较喜欢使用OBS进行录屏的,而且视频的清晰度质量上也有一定的保证,当然如果有其他录屏软件也是可以的,不管是QQ的快捷键录屏,还是腾讯会议的是录屏其实都是可以用的,然后这里我自己是Windows所以就点了windows,点完之后就自动下载了。
在这里插入图片描述
电玩Download之后就会自动下载然后进入到这个页面(我自己是用谷歌浏览器下载的)。
在这里插入图片描述
然后双击下载的安装包就可以了。

1.2 安装OBS

在这里插入图片描述
然后安装的时候也没什么特殊的到这里愿意换个安装路径就换个安装路径就行。
在这里插入图片描述
然后点Install等待安装。
在这里插入图片描述
然后出现这个界面就算安装完成了。
在这里插入图片描述

1.3 配置OBS(基础设置/输出路径/输出格式等)

1.3.1 首次安装初始化设置

在这里插入图片描述
然后下一步选择基础画布的分辨率和帧率,因为我自己的是4K 144HZ的屏幕所以直接就给拉满了,之后也方便我自己录制一些教程。
在这里插入图片描述
然后点下一步就行,之后还会跳出一个测试完成的界面,直接点击取消就可以。
之后进入到这个页面就是
在这里插入图片描述

1.3.2 视频输出格式设置

OBS默认的录制获得的格式是Matroska模式(.mkv)格式,是一个可以存储多种数据的很优秀的格式,但是为了之后在程序中,或者我们自己打开查看视频的时候,不会出现格式原因打不开的情况,所以这里我们把输出的格式转换成MP4格式。点击右下角的设置。
在这里插入图片描述
然后左侧菜单栏选择输出,然后再输出菜单栏的录像菜单栏里选择录像格式。
在这里插入图片描述
在这里插入图片描述
选择MP4格式,简简单单才是真!
在这里插入图片描述
设置完成之后提示如果要录制多个音轨还是要用MKV格式,我们一个音轨都不录,我们只录视频我们什么都不怕!
在这里插入图片描述

1.3.3 更改录制视频的保存路径

因为我们后续可能要录很多素材,而OBS录制视频的保存路径是C盘下用户下的的Video路径,而且我还要录制4K的视频为了防止之后C盘爆满,所以要对这个路径进行一下修改。
在这里插入图片描述
首先在D盘下新建一个OBSvedio文件夹,当然这里位置和文件夹名字都可以自己选。
在这里插入图片描述
在设置的左侧菜单栏的输出选项卡内找到录像中的录像路径设置,然后顺手把录像路径设置下面的生成没有空格的文件名的对号给打上,避免之后生成视频名字里面用于python程度读取的时候有非法字符。
在这里插入图片描述
找到录像路径,然后给生成没有空格的文件名打上对号之后,点击录像路径后面的浏览。
在这里插入图片描述
然后找到D盘下之前新建的OBSvideo文件夹,点开文件夹。
在这里插入图片描述
里面是空白的,然后点击右下角的选择文件夹。
在这里插入图片描述
然后录像路径就设置完成了,然后点击应用。
在这里插入图片描述
应用按键变按被锁定之后再点击确定即可退出设置回到主页面。
在这里插入图片描述

1.3.4 设置视频源(录哪个软件或显示器的视频)

之后需要设置我们录制的视频的源头,也是录制哪个应用或者哪个显示器的视频。
点击来源中的加号。
在这里插入图片描述
然后点击显示器采集
在这里插入图片描述
然后点击确认就行。
在这里插入图片描述
再然后在这里选择你要录制的显示器之后点击确定
在这里插入图片描述

1.3.5 设置开始录制和结束录制的快捷键

为啥要设置快捷键,因为如果不设置的话就需要在软件中点击开始录制,会把软件录上,即使是可以通过设置将软件隐藏掉,则开始录制之后也会需要先把软件给关掉自己才能看见想录的内容。
设置快捷键就在设置的快捷键部分,然后分别选中开始录制和结束录制,选中之后按下你想使用的快捷键即可,我这里开始录制设置Ctrl+NUM 1(Ctrl 加小键盘的数字1不然我发现其他快捷键好多都冲突)。然后点击应用,点击确定就行了,之后将OBS缩在后台的时候就可以直接点击按键开始录制和结束录制了。
在这里插入图片描述

1.4 录制视频

全部配置好之后后点击右上角的最小化缩到底部菜单栏。
在这里插入图片描述
之后可以将界面打开到准备开始录制的页面,准备开始录制的时候安装快捷键开始录制ctrl+NUM 1 (Ctrl 加小键盘的数字1),开始录制之后屏幕下放的OBS图标会出现一个红点。
在这里插入图片描述
然后再按快捷键ctrl+NUM 1 (Ctrl 加小键盘的数字1)结束录制的时候,红点会消失。

在这里插入图片描述
之后就会在1.3.3中设置的视频保存文件夹下生成一个格式为mp4的视频文件。
在这里插入图片描述

2.使用python将MP4文件转换为GIF动图


在得到了录制的视频MP4文件之后,可以直接用python的moviepy库,将MP4的视频转成gif,输入下面的命令安装moviepy库,然后新建项目,选解释器这个就不说了,不会的同学找一下周围会的同学帮助一下。

pip install moviepy

将视频转换成GIF的基础代码如下,之后这个库还可以进行裁减抽帧等一系列操作,我们先直接转换成GIF。

2.1 基础转换代码

from moviepy.editor import VideoFileClip# 加载MP4视频文件 视频路径换成自己的
clip = VideoFileClip("视频文件.mp4")# 将视频转换为GIF并保存
clip.write_gif("output.gif")

运行之后出现如下进度条。
在这里插入图片描述
再之后出现使用imageio构建output.gif的图片的提示,这个过程时间略长,我转了一个5秒的视频,用了差不多50s。
在这里插入图片描述
进入到项目路径文件夹下查看差不多两2500KM多一点,但GIF图像如果过大的话CSDN是不允许插入的,但是要插到博客里需要给降到1500KB以下基本就可以,不然会提示插入失败。
在这里插入图片描述
一般双击图片就可以双击查看动图了,我这边的动图查看默认使用WPS打开了,然后Pycharm默认是不能打开GIF文件的,所以智能从外部查看,之前也稍微找了有没有Pycharm查看GIF的插件,没找到比较好的。
这里的GIF图片是一个跑深度学习例子代码的一个动图。
在这里插入图片描述

2.2 压缩转换代码

为了压缩GIF的大小我们主要使用两招,裁剪视频和降低帧率,虽然还有缩小视频尺寸,但是变糊的话显然是最不希望看到的情况。
裁剪视频就是在使用VideoFileClip读取视频的时候调用subclip方法,降低帧率就是在保存的时候使用一个fps参数,我记得我们录制的视频在默认开始的时候我调成了60fps,所以下面的代码设置成15之后,会缩小生成的GIF文件的大小。

from moviepy.editor import VideoFileClip# 裁剪视频
clip = VideoFileClip("2024-08-19_16-02-11.mp4").subclip(3, 6)# 降低帧数并保存
clip.write_gif("output.gif", fps=15)  # 设置帧率为15帧每秒

在这里插入图片描述

结束

转换的代码很简单,基本流程就是录屏加转换,而且GIF还可以设置成博客的封面,转成GIF没啥难度,就自己录个屏就行了。

相关文章:

用python生成GIF动图—用于博客插图或封面等

生成GIF动图🚀 由于目前自己是在做大模型,还有一些树莓派硬件之类的东西,一是大模型的流式输出的例子需要用到GIF,二是做单片机的时候例如一些灯的闪烁和变化需要用到,所以之前也是一直有这个打算所以就记录一下这个生…...

[RCTF2019]draw

下载是一个文本文档,百度AI cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ] repeat 18[fd 5 rt 10] rt 90 fd 60 rt 90 bk 30 rt 90 fd 60 pu lt 90 f…...

设计模式 - 责任链模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

jpg怎么转换成pdf?6个简单方法,实现jpg转换成pdf

你是否也曾想将jpg图片转换为pdf格式文档呢?亦或者在处理文档或制作报告时,不知道怎么才能更快地将多张图片整合成一个pdf文件呢?如果你正在寻找简单快速的方法,又有哪些工具可以帮助您完成图片转pdf呢?别着急&#xf…...

ptrade排坑笔记——使用量化交易的时候有报错提示!

前言 今天要和大家分享一个遇见的问题,有客户反馈,自己在使用量化交易的时候,会有报错!会在后文分享我们是如何解决这个问腿的! 一、问题描述 客户主要遇见的问题是,量化在进行交易的过程中,…...

C#-MemoryMarshal

MemoryMarshal 类是 .NET 中用于处理内存的工具类,它提供了一组静态方法,用于在托管代码中以安全和高效的方式操作内存块。MemoryMarshal 类主要用于处理原始内存数据而不需要进行复制,这对于性能关键的操作非常有用。 MemoryMarshal 类包含…...

Java并发编程的艺术

Java作为一门面向对象的编程语言,自1995年推出以来,一直以其稳定性、跨平台性和丰富的API受到广大开发者的喜爱。在Java的发展历程中,并发编程一直是其重要的特性之一。本文将探讨Java并发编程的艺术,解析其核心概念和常用并发工具…...

华为 OLT 添加 ONU 配置 (SNMP管理模式)

上网业务数据规划 OLT PON口 0/8/0 ONU_ID 0 ONU 序列号 4857544323BE233B 外层 VLAN ID 2012 内层VLAN ID 35 用户 FE 端口 ONU 0/1/1 用户VLAN 35 DBA带宽类型 Type 2 流量模板编号 10 DBA 模板编号 30 ONU线路模板编号 40 T-CONT (网管) 0 T-CONT(业务_ 2 GEM (网管) 0 …...

【JavaScript】[]和{} 的转换

背景 ([])? true:false ({})? true:false ([] true)? true:false ({} true)? true:false ([] true)? true:false ({} true)? true:false分析 [ ]和{ } 都是复杂类型,以上都是三目运算符判断 1.判断[ ]和{ } 是否存在 声明了这些已经分配了内存&#xf…...

C#关于多线程的线程问题

using System.Text; ​ namespace 平时练习8._19day06 {internal class Program{static async Task Main(string[] args){Console.WriteLine(Thread.CurrentThread.ManagedThreadId );StringBuilder sb new StringBuilder();for (int i 0; i < 10000; i){sb.Append("…...

eclipse打开失败 java was started but returned exit code=13

报错详细信息如下 原因&#xff1a;eclipse版本和jdk版本不一致。系统之前jdk是1.6&#xff0c;然后安装1.8之后默认修改了环境变量。导致eclipse启动失败 解决方案&#xff1a;修改eclipse目录下的eclipse.ini文件增加一下内容。文档说明&#xff1a;eclipse.ini - Eclipsepe…...

【计算机网络】应用层自定义协议与序列化

记得在上一节我们说过TCP中的读取时需要改进&#xff0c;这节就可以解决读取问题了。 目录 应用层再谈 "协议"网络版计算机方案一方案二 序列化 和 反序列化 重新理解 read、write、recv、send 和 tcp 为什么支持全双工 应用层 再谈 “协议” 我们在UDP与TCP中写的…...

企业级无线局域网(WLAN)架构:高效部署策略与技术指南

前言&#xff1a;无线网络直接影响整体网络性能&#xff0c;在当今企业网环境中&#xff0c;已有超过一半的数据流量通过无线信道传输&#xff0c;随着物联网技术的普及&#xff0c;无线网将承载更多的关键业务流量。企业/园区场景的无线网络值得考虑的关键因素有很多&#xff…...

【Python-办公自动化】1秒筛选12个月指定逻辑数值

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。 自我介绍: 我热衷于将复杂的技术概念以简单易懂…...

Linux:进程替换

什么是进程替换&#xff1f; 我们的可执行程序&#xff0c;在运行起来的时候就上一个进程 一个进程就会有他的内核数据结构代码和数据 把一个已经成型的进程的代码和数据替换掉&#xff0c;这就叫进程替换 也就是可以通过系统调用把当前进程替换位我们需要的进程 那么替换…...

带你认识:数据仓库宽表~~~浅显易懂

1. 构建宽表的目的 讲宽表我想从为什么需要宽表入手&#xff0c;而不是一上来就抠概念。因为我觉得一门知识叫什么名字并不是最核心的&#xff0c;关键是搞清楚它的诞生背景以及如何在特定场景用好它。 构建宽表的目的很简单,就是为了"一站式"尽可能多的展示我们需要…...

记录|MessageBox.Show()的使用

目录 前言一、解析1.1 代码1.2 具体图片解析 更新时间 前言 遇到了其他人写的MessageBox.Show()的用法&#xff0c;有点懵&#xff0c;特此记录。 一、解析 1.1 代码 MessageBox.Show("登录失败!", "用户登录", MessageBoxButtons.OK, MessageBoxIcon.E…...

LabVIEW软件定制开发公司的前景如何?

LabVIEW软件定制开发公司的前景在当前的技术发展环境下展现出一定的潜力与挑战。这一领域的市场前景主要受到工业自动化、物联网、智能制造等技术趋势的推动&#xff0c;同时也受到行业竞争、技术更新以及人才市场的制约。 ​ 市场需求与增长潜力 随着工业4.0、物联网和智能制…...

vue3列表页搜索条件封装

搜索框组件 封装常用搜索框组件&#xff0c;类型有&#xff1a; input&#xff08;默认值)selectselectV2 (value/label键值对数组)datePickeryear 集成新增、修改、删除、导入、导出按钮&#xff0c;支持slot自定义其他按钮封装搜索、重置按钮封装按钮权限封装导入弹框 本例仅…...

十三、切片的复制

1、使用函数copy 注意点&#xff1a;复制前必须再声明一个与要复制对象类型相同的切片 var cheeses make([]int, 5)cheeses[0] 1cheeses[1] 2cheeses[2] 3cheeses[3] 4cheeses[4] 5var myCheeses make([]int, 5)copy(myCheeses, cheeses) 使用copy函数将cheeses的数据…...

Java Stream API 的应用:提取并处理多属性集合

Java Stream API 是一个功能强大的工具&#xff0c;可以帮助开发者高效地处理集合数据。本篇博客将专注于一个具体的应用示例&#xff0c;即如何使用 Java Stream API 从一个对象列表中提取多个属性值&#xff0c;并进行过滤和去重。这种技术在处理需要从多个字段中提取数据的情…...

【技术方案】智慧城市大数据平台技术方案(Doc原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…...

vue项目中引入字体文件样式

需求:关于一些样式需要自定义的,所以需要ui提供字体文件,然后引入项目中,就可实现自定义 首先看一下实现效果图: 第一步:新建一个字体样式文件用于放字体文件和css样式 font.css文件: /* 数字特殊字体 */ font-face {/*给字体命名*/font-family: DINCondBold;/*引入字体文件*…...

Android 11强制App固定user_rotation方向显示

Android11 强制App按照user_rotation方向显示。 diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index b1d349d8e93d..f7fd2983c668 100644 --- a/services/core/java/com/an…...

Harbor仓库push显示

背景&#xff1a; 在做测试时发现harbor仓库端口开放这&#xff0c;却一直登录不上去&#xff0c;重启harbor资源包docker-compose还是不行&#xff0c;修改了docker.service文件不行&#xff0c;json文件也不行&#xff0c;以下是涉及到的命令和报错&#xff08;好像是这个&am…...

Windows 上设置 MySQL 的主从复制

Windows 上设置 MySQL 的主从复制 一、前言1. 环境准备2. 主服务器配置3. 从服务器配置6. 测试复制7. 注意事项 一、前言 在 Windows 上设置 MySQL 的主从复制涉及几个步骤。下面是一个详细的指南&#xff0c;帮助你实现这一过程。 1. 环境准备 安装 MySQL&#xff1a; 确保你…...

鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航

基本概念 在支持多任务的操作系统中&#xff0c;修改一块内存区域的数据需要“读取-修改-写入”三个步骤。然而同一内存区域的数据可能同时被多个任务访问&#xff0c;如果在修改数据的过程中被其他任务打断&#xff0c;就会造成该操作的执行结果无法预知。 使用开关中断的方…...

vue3+ts封装axios以及解决跨域问题

目录 一、前言二、封装axios三、 解决跨域四、调用接口五、运行结果 一、前言 前端请求后端数据时&#xff0c;会用到axios&#xff0c;但是如果不将axios封装好&#xff0c;会导致代码冗余 二次封装的好处如下&#xff1a; 求头能统一处理便于接口的统一管理解决回调地狱配置…...

各厂家BI对比

帆软BI、奥威BI、永洪BI、思迈特BI、亿信华辰BI是国内知名的BI产品&#xff0c;不少企业在选型BI软件时都需要对这些BI软件进行了解&#xff0c;从中选择适合自己的一款。经过过年的发展&#xff0c;这些BI&#xff08;商业智能&#xff09;软件各自在多个行业中都有广泛的应用…...

SQL - 触发器

触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码&#xff0c;但是触发器被触发后只会执行一次&#xff0c;通常我们使用触发器增强数据的一致性。创建触发器 -- 创建触发器 drop trigger if exists payments_after_insert; delimiter $$ -- 在 payments表 insert 之后…...