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

devtools/2025/3/17 9:35:31/

1. 安装三方库 moviepy

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

python">pip install moviepy

2. 代码实现:

python">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 的安装目录,可以通过以下命令查看路径:

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

问题二:

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

解决方法:

1. 降低分辨率

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

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

2. 降低帧率

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

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

3. 减少颜色数量

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

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

4. 减少播放时间

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

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

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

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


http://www.ppmy.cn/devtools/130333.html

相关文章

【论文精读】ID-like Prompt Learning for Few-Shot Out-of-Distribution Detection

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀论文精读_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 注:下文…

Netty学习——NIO基础与IO模型

导学 Socket和NIO的区别 Socket和NIO是Java中用于网络编程的两个不同的API,具有不同的设计理念和用途。以下是它们的主要区别: 1. 定义 Socket: Socket是Java中用于实现网络通信的传统API,通常被称为Java I/O(输入/输出&#…

基于C语言实现的UDP客户端

目录 一、UDP协议简介 二、基于C语言实现UDP客户端 1. 必要的头文件 2. 实现UDP客户端的核心代码 3. 代码解析 4. 编译和运行 5. 测试UDP客户端 三、总结 UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输层协议&a…

Linux 文件系统权限

文件的一般权限 文件详细信息 使用命令 ll 或 ls -l 查看 文件权限构成 权限针对三类对象定义 owner :所有者,缩写 u group :所属组,缩写 g other :其他人,缩写 o 访问者三种权限 组成模式分析 …

哈希——哈希表处理哈希冲突的方法

处理哈希冲突 实践中哈希表⼀般还是选择除法散列法作为哈希函数。 当然哈希表无论选择什么哈希函数也避免不了冲突(主要作用就是减少冲突),那么插入数据时,如何解决冲突呢?主要有两种两种方法,开放定址法和…

线程安全的集合类

目录 多线程下使用ArrayList 1.⾃⼰使⽤同步机制 (synchronized 或者 ReentrantLock)自行加锁(推荐) 2.使用Collections.synchronizedList(new ArrayList); 3.使⽤ CopyOnWriteArrayList 多线程使用哈希表 ConcurrentHashMap Concurre…

在Windows 10上安装Tesseract并用pytesseract运行OCR任务

诸神缄默不语-个人CSDN博文目录 文章目录 1. Tesseract安装2. pytesseract的安装与使用3. 手动安装其他语种并在pytesseract中调用4. 本文撰写过程中参考的其他网络资料 1. Tesseract安装 Tesseract官方GitHub项目链接:https://github.com/tesseract-ocr/tesseract…

Redis 目录

《Redis & 基础 & 源码》《Redis & 基础 & 总结》《Redis & 基础 & 问题》《Redis & 实战 & 源码》《Redis & 实战 & 总结》《Redis & 实战 & 问题》《Redis & 过期策略 & 源码》《Redis & 过期策略 & 总结》…