You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Matplotlib动画保存可用的Writer(ffmpeg/Pillow)

检查FFmpeg和Pillow可用性以实现Matplotlib动画降级保存

检查FFmpeg是否可用

直接检查系统环境中是否存在ffmpeg可执行文件,这种方式比依赖Matplotlib的注册列表更可靠,能避免ffmpeg已安装但Matplotlib未识别的情况:

import subprocess

def ffmpeg_available():
    try:
        # 尝试调用ffmpeg版本命令,不输出冗余内容
        subprocess.run(["ffmpeg", "-version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return True
    except (subprocess.CalledProcessError, FileNotFoundError):
        # 命令执行失败或找不到ffmpeg
        return False

检查Pillow是否可用

Pillow安装后通过PIL包名导入,直接尝试导入并捕获导入错误即可:

def pillow_available():
    try:
        import PIL
        return True
    except ImportError:
        return False

完整实现代码

将检查函数和你的保存逻辑整合:

import subprocess
import matplotlib.animation as animation

def ffmpeg_available():
    try:
        subprocess.run(["ffmpeg", "-version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return True
    except (subprocess.CalledProcessError, FileNotFoundError):
        return False

def pillow_available():
    try:
        import PIL
        return True
    except ImportError:
        return False

# 假设anim是你已创建好的Matplotlib动画对象
if ffmpeg_available():
    print("Saving system_evolution.mp4")
    anim.save(filename="system_evolution.mp4", writer="ffmpeg", fps=30)
elif pillow_available():
    print("Saving system_evolution.gif")
    anim.save(filename="system_evolution.gif", writer="pillow", fps=30)
else:
    print("Please install either ffmpeg to save a mp4 or pillow to save a gif.")

备选:用Matplotlib自带的writers检查FFmpeg

如果你更倾向于依赖Matplotlib的识别结果,可以用以下方式替代ffmpeg_available函数:

from matplotlib import animation

def ffmpeg_available():
    return "ffmpeg" in animation.writers.list()

内容的提问来源于stack exchange,提问作者Shai Avr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:43:24