python读取视频并转换成gif图片

1. 安装三方库 moviepy

将视频转换成gif,需要使用 moviepy库
确保已经安装了moviepy库

pip install moviepy

2. 代码实现:

from moviepy.editor import VideoFileClipmyclip = VideoFileClip("video.mp4")
myclip2 = myclip.subclip(0, 10).resize(width=300)
# save gif
myclip2.write_gif("video.gif")

出现的问题1:

直接运行发现报错
错误
提示module 'PIL.Image' has no attribute 'ANTIALIAS'
原因是因为 我安装的PIL版本是 10.4.0,而 ANTIALIAS方法已经在新的版本中移除了,替换成了Image.LANCZOS
Image.Resampling.LANCZOS 所以我们可以把pillow降级或修改源代码

解决办法:

  • 方法 1:降级 Pillow 版本
    你可以将 Pillow 降级到 9.4.0 或更早的版本,这些版本中 ANTIALIAS 属性依然存在:
pip uninstall -y Pillow
pip install Pillow==9.4.0
  • 方法 2:修改 moviepy 源代码
    如果不想降级 Pillow,你也可以修改 moviepy 的源码,替换 ANTIALIASLANCZOS。具体步骤如下:
  1. 找到 moviepy 的安装目录,可以通过以下命令查看路径:

    import moviepy
    print(moviepy.__file__)
    
  2. 通过上述报错可以发现 方法调用是在 moviepy 源码中的 moviepy/video/fx/resize.py文件中,找到 ANTIALIAS 并替换为 LANCZOS
    替换
    替换完成之后就可以生成gif格式的动图了

问题二:

生成gif 后发现大小比原视频还大。所以要接着减少大小

解决方法:

1. 降低分辨率

降低 GIF 的分辨率可以显著减少文件大小。在 resize 中指定更小的宽度(或高度):

myclip2 = myclip.subclip(0, 10).resize(width=150)  # 适当减小宽度

2. 降低帧率

GIF 不需要太高的帧率,通常 10-15 fps 就足够了。使用 moviepyset_fps 函数来降低帧率:

myclip2 = myclip.subclip(0, 10).resize(width=150).set_fps(10)

3. 减少颜色数量

GIF 支持的颜色最多是 256 色,减少颜色数量可以减小文件大小。可以使用 moviepywrite_gif 函数的 colors 参数:

myclip2.write_gif("output.gif", fps=10, colors=128)  # 降低颜色数量

4. 减少播放时间

如果可以,将 GIF 的时长尽量缩短,例如:

myclip2 = myclip.subclip(0, 5)  # 只截取前5秒

通过以上方法,可以有效减少生成gif的大小。

总结:通过moviepy可以生成gif图片,通过resize方法可以有效减少生成文件的大小

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

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

相关文章

k8s部署redis远程连接示例

一、环境 节点 IP 服务 master 192.168.126.46 docker、kubeadm、kubelet、kubectl、flannel、telnet node1 192.168.126.47 docker、kubeadm、kubelet、kubectl、flannel、telnet node2 192.168.126.48 docker、kubeadm、kubelet、kubectl、flannel、telnet ubunt…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中,通过特定的方法或策略来准确识别和定位页面上的元素,以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

【含开通报告+文档+源码】基于SpringBoot的新能源充电桩管理系统的设计与实现

开题报告 近年来,随着全球对环境问题的关注和新能源汽车的普及,新能源充电桩的需求显著增加[1]。为了满足大量新能源车辆的充电需求,各地纷纷建设新能源充电桩站点。然而,随着充电桩数量的增加,管理和运营充电桩也面临…

Unity引擎材质球残留贴图引用的处理

大家好,我是阿赵。   这次来分享一下Unity引擎材质球残留贴图引用的处理 一、 问题 在使用Unity调整美术效果的时候,我们很经常会有这样的操作,比如: 1、 同一个材质球切换不同的Shader、 比如我现在有2个Shader,…

一行代码实现垂直居中

实现元素垂直居中的方案有很多&#xff0c;比如定位、伸缩盒子、行高等等。 但在 2024 年的Chrome 123 版本中&#xff0c; CSS 原生可以使用 1 个 CSS 属性 align-content: center进行垂直居中。 如何使用 <!DOCTYPE html> <html lang"en"> <head&…

云计算作业一

目录 0. 前置准备 0.1 安装虚拟机 0.2 Linux统一设置 1. Hadoop安装配置 1.1 环境准备 1.2 Hadoop伪分布式安装 1.3 Hadoop集群安装 2. HDFS实验&#xff0c;包括Shell命令操作和Java接口访问 2.1 HDFS操作命令 2.2 通过Java项目访问HDFS 2.3 使用winutils解决警告信…

C# 结构型设计模式----适配器模式

1、简介 简单的说就是将一个类的接口转换成客户希望的另一个接口。 举例理解: 你买了一个苹果手机&#xff0c;但是家里的数据线都是安卓的&#xff0c;你想用安卓的线充你的苹果手机&#xff0c;那你就需要一个转接头。适配器模式就是适用于这种情况。 适配的本质就是转换…

感受野是什么?有什么用?从感受野的角度理解,FCN要堆叠卷积层

参考&#xff1a;感受野 1.感受野是什么 感受野(receptive field)这一概念来自于生物神经科学&#xff0c;是指感觉系统中的任一神经元&#xff0c;其所受到的感受器神经元的支配范围。感受器神经元就是指接收感觉信号的最初级神经元。 而在卷积神经网络中&#xff0c;感受野…

C++基础三(构造函数,形参默认值,函数重载,单例模式,析构函数,内联函数,拷贝构造函数)

C有六个默认函数&#xff0c;分别是&#xff1a; 1、默认构造函数; 2、默认拷贝构造函数; 3、默认析构函数; 4、赋值运算符; 5、取址运算符; 6、取址运算符const; 构造函数 构造函数(初始化类成员变量)&#xff1a; 1、属于类的成员函数之一 …

LEADTOOLS 版本 23 现已发布,引入了 Excel API等众多新功能!

LEADTOOLS 以其在全世界主要国家中占有的市场领导地位&#xff0c;在数码图象开发工具领域中已成为既定的全球领导者&#xff0c;其不断发展和扩展功能&#xff0c;以帮助开发人员构建更好、更强大的应用程序。最新发布的 LEADTOOLS 版本 23引入了许多新功能&#xff0c;包括新…

鸿蒙系统的优势 不足以及兼容性与未来发展前景分析

2024 年 10 月 22 日&#xff1a;华为正式发布原生鸿蒙操作系统 HarmonyOS next&#xff0c;并正式命名为 HarmonyOS 5&#xff0c;这是鸿蒙系统史上最大的升级&#xff0c;实现了国产操作系统从底层架构到应用生态的全面自主可控。 鸿蒙系统与安卓、iOS 相比&#xff0c;具有…

Hive 2.x 的安装与配置

Hive 2.x 的安装与配置 1 简介 基于Hadoop的一个数据仓库工具&#xff0c;可将结构化数据文件映射为一张数据库表&#xff0c;并提供简单[SQL]查询&#xff0c;可将SQL语句转换为MapReduce任务进行运行。 优点 学习成本低&#xff0c;可通过类SQL语句快速实现简单的MapReduce统…

关于图像客观指标的调试总结

1、问题背景 工作中经常有调试图像客观指标的需求&#xff0c;很容易遇到我们自己的环境测试是过的&#xff0c; 但客户那边的环境就是测不过&#xff0c;这时候该怎么办呢&#xff1f; 2、问题分析 首先要改变以往的工作思路&#xff0c;在调试的过程中不能说指标过了就完了&a…

VulkanTutorial(14·descriptor,uniform buffer)

Uniform buffers Descriptor layout and buffer 我们将继续学习3D图形&#xff0c;这需要一个模型-视图-投影矩阵&#xff0c;因此我们要更改向vertex shader传输的数据&#xff0c;也就是通过vertex buffer 但是当实时渲染&#xff0c;每一帧这些数据都有可能变化&#xff0…

Kafka存储机制大揭秘:从日志结构到清理策略的全面解析

文章目录 一、前言二、日志存储结构1.日志文件结构2.topic3.partition4.segment索引文件5.message结构6.message查找过程 三、存储策略1.顺序写2.页缓存3.零拷贝4.缓存机制 四、日志格式演变1.V0 版本2.V1 版本3.V0/V1消息集合4.V2 版本消息格式5.V2版本消息集合 五、偏移量维护…

基于OSS搭建在线教育视频课程分享网站

OSS对象存储服务是海量、安全、低成本、高持久的存储服务。适合于存储大规模非结构化数据&#xff0c;如图片、视频、备份文件和容器/虚拟机镜像等。 安装nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz yum -y install zlib zlib-devel gcc-c pcre-devel open…

HCIA笔记整合

第一部分&#xff1a; OSI七层模型 应用层&#xff1a;人机交互 抽象语言--------编码 表示层&#xff1a;编码------二进制 会话层&#xff1a;提供会话号 传输层&#xff1a;TCP/UDP 分段&#xff08;收到MTU值的限制&#xff09; MTU&#xff1a;最大传输单元&#xff…

如何选择到印尼的海运代理

如何选择到印尼的海运代理 选择合适的海运代理的重要性 海运代理负责安排货物从发货地到目的地的整个运输过程&#xff0c;包括装运、清关、仓储等服务。一个可靠的海运代理能确保货物安全准时到达&#xff0c;并帮助企业节省时间和成本。 选择海运代理需考虑的主要因素 公司…

RK3588的QT交叉编译环境搭建

主要参考为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版_rk3568交叉编译-CSDN博客 先说一下&#xff0c;使用的Ubuntu20.04.5版本&#xff0c;qt源码用的5.14.2版本&#xff0c;交叉编译器使用RK3588…

【Linux】一些Shell脚本编程基础题

目录 一、比较两个数的大小 二、求1-100的素数和 三、编写shell脚本&#xff0c;输入一个数字n并计算1~n的和&#xff0c;同时要求如果输入的数字小于1&#xff0c;则重新输入&#xff0c;直到输入正确的数字为止。 四、编写一个shell脚本用来进行成绩等级评定&#xff0c;…