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

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

1. 安装三方库 moviepy

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

pip install moviepy

2. 代码实现:

from moviepy.editor import VideoFileClip

myclip = 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.kler.cn/a/374322.html

相关文章:

  • 机器学习算法深度解析:以支持向量机(SVM)为例的实践应用
  • 全面了解 SQL Server:功能、优势与最佳实践
  • 一文读懂变分自编码(VAE)
  • 底层解析v-modle和v-bind在绑定数据时的内存模型上的区别
  • Leetcode 3403. Find the Lexicographically Largest String From the Box I
  • 目标检测文献阅读-YOLO:统一的实时目标检测(12.23-12.29)
  • Python爬虫之urllib库详解
  • 【论文阅读笔记】VLP: A Survey on Vision-language Pre-training
  • 基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发
  • mac-ubuntu虚拟机(扩容-共享-vmtools)
  • Oracle视频基础1.3.3练习
  • sql题库中常见问答
  • 【青牛科技】GC4921替代BD6921/罗姆在水泵、筋膜枪、吸尘器和电动工具中的应用
  • Django中分组查询(annotate 和 aggregate 使用)
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(六)RestTemplate调用第三方接口
  • fastGPT添加知识库文本索引模型m3e一直处于索引中怎么解决
  • 练习LabVIEW第二十八题
  • SSM复习——M(MyBatis)二
  • VR动捕数据手套如何配合头显装置进行机器臂遥操作?
  • 阳振坤:云时代数据库的思考 | OceanBase发布会实录
  • [Java基础] Integer和int使用注意点
  • SpringBoot3集成Swagger接口文档功能、接口排序以及如何设置接口页面的title/keyword/description?
  • Ubuntu22.04采用pyenv安装管理多版本python
  • ros2 humble 华硕rgbd xtion驱动
  • git入门教程10:git性能优化
  • 图文深入介绍Oracle DB link(一)