如何检查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
相关产品推荐
相关产品推荐

