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

1. 安装三方库 moviepy

将视频转换成gif,需要使用 moviepy库

确保已经安装了moviepy库

python 复制代码
pip install moviepy

2. 代码实现:

python 复制代码
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 属性依然存在:
bash 复制代码
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方法可以有效减少生成文件的大小

相关推荐
星寂樱易李42 分钟前
pycharm 使用
ide·python·pycharm
萧鼎1 小时前
【Python】强大的正则表达式工具:re模块详解与应用
开发语言·python·正则表达式
engchina1 小时前
Python代码解析:处理JSON数据并导入Neo4j数据库
数据库·python·json
小馒头学python1 小时前
【机器学习】机器学习回归模型全解析:线性回归、多项式回归、过拟合与泛化、向量相关性与岭回归的理论与实践
人工智能·python·机器学习·回归·线性回归
煎饼果子呀1 小时前
css-flex布局属性
开发语言·前端·css·html5
_清豆°1 小时前
机器学习(四)——神经网络(神经元、感知机、BP神经网络、梯度下降、多层神经网络、Python源码)
python·神经网络·机器学习·感知机·梯度下降·神经元·多层神经网络
Liquor14191 小时前
vim 编辑器
java·linux·c语言·开发语言·python·编辑器·vim
kevin_tech1 小时前
Go API 多种响应的规范化处理和简化策略
开发语言·后端·golang·状态模式
skywalk81631 小时前
三周精通FastAPI:33 在编辑器中调试
python·编辑器·fastapi
千里码aicood1 小时前
[含文档+PPT+源码等]精品基于Python实现的django房屋出租系统的设计与实现
开发语言·python·django