Python中如何将mp4等短视频转换为gif?使用moviepy库遇到问题需要修复

video 笔误 抱歉~~~
Python中如何将mp4等短视频转换为gif?使用moviepy库遇到问题需要修复

24 回复

你这个 vedio 我看了半天


用moviepy把mp4转gif确实挺方便的,但有时候会遇到些坑。最常见的问题是没装好依赖或者版本不对。

先确保你装对了:

pip install moviepy imageio[ffmpeg]

如果遇到'NoneType' object has no attribute 'stdout'这种错误,通常是FFmpeg没装。Windows用户可以直接下载ffmpeg.exe放到项目目录,或者设置环境变量:

import os
os.environ["IMAGEIO_FFMPEG_EXE"] = "你的ffmpeg路径"

一个完整的转换示例:

from moviepy.editor import VideoFileClip

def convert_mp4_to_gif(input_path, output_path, fps=10, resize_factor=0.5):
    try:
        clip = VideoFileClip(input_path)
        # 调整大小和帧率
        clip = clip.resize(resize_factor).set_fps(fps)
        # 写入gif
        clip.write_gif(output_path, program='ffmpeg')
        clip.close()
        print(f"转换成功: {output_path}")
    except Exception as e:
        print(f"转换失败: {e}")

# 使用
convert_mp4_to_gif("input.mp4", "output.gif")

如果还是报错,检查下视频路径对不对,或者试试用绝对路径。有时候视频编码格式太新也会有问题,可以先用其他工具转成标准H.264编码的mp4再试。

总结:装好依赖,检查路径,调整参数。

我 research 下;再 answer 你的 question 。

moviepy 用的 ffmpeg, imagemagick 为底层, 可以直接在 py 中调用它们的命令行.
moviepy 有啥问题捏?

我调研一番后, 是直接 python 调 ffmpeg 命令行~

sorry 写错了。。。

把 write_gif 的 program 参数改成’ffmpeg’或者’ImageMagick’试试, 默认的的 imageio 不好用, 兼容性似乎也有问题. 不过要另外去下 ffmpeg 或者 imagemagick 安装

恩 感谢 program 使用 ffmpeg 可以正常

我这儿试了下, 两个都可以用. 转化成 gif imagemagick 要比 ffmpeg 好很多, ffmpeg 的输出有时很诡异, 画面会花, 使用 imagemagick 的时候要把参数 opt 设置为 optimizeplus 或 OptimizeTransparency, 不然 py 可能卡死. 虽然生成的图会大点, 但是效果很好. 想要精确控制的话还是直接调用相应命令行, 传一摞参数进去, moviepy 只提供了简单功能.

直接用 ffmpeg ?根据我的经验,凡是视频的东西找它就对了……

刚刚随手测试了下, ffmpeg 先视频转 dpx 序列帧,再从序列帧转成 gif ,这样 OK 的。

69M h264 1080p 30fps 视频,转 dpx 序列帧 6.6GB ,转 480p 10fps gif , 88M

ffmpeg -i IMG_.MOV dpx/t_%06d.dpx
ffmpeg -y -i dpx/t_%06d.dpx -vf scale=-1:480 -r 10 t.gif

Orz

ffmpeg 直接视频转 480p 10fps gif , gif 74MB
ffmpeg -i IMG.MOV -vf scale=-1:400 -r 10 t.gif

ffmpeg 直接视频转成 100p 10fps gif , gif 2.1MB
ffmpeg -y -i IMG.MOV -vf scale=-1:100 -r 10 t.gif

$ file t.gif
t.gif: GIF image data, version 89a, 178 x 100

$ du -sh t.gif
2.1M t.gif

ffmpeg 真是音视频处理的瑞士军刀

又拍云可以定制此功能,需要的话可联系 https://www.upyun.com/index.html 客服:)

用 imagemagick 看来要设置参数,直接用的话 会一直卡在 0%。。。

这个视频转 gif ,一般会选择 10 fps 么,选的过大,造成 gif 太大 无法展示,选择太小又容易失真

这个得自己测试了,得看画面动态幅度大小吧… 我尝试用 mediainfo 来检查 gif 文件,发现并无 fps 这个属性。

奇怪 我这用 clip.write_gif(“dog.gif”, program=‘imagemagick’, opt=“OptimizeTransparency”) 或者 clip.write_gif(“dog.gif”, program=‘imagemagick’, opt=“optimizeplus”) python 都会卡死。。。转换的进度一直在 0%

不对 是用 ImageMagick

使用 ImageMagick 清晰 不过压缩后太大了。。。

回到顶部