matplotlib FFMpegWriter保存动画报rawvideo未知输入格式错误
LinuxMint环境PyCharm保存matplotlib动画报
Unknown input format: 'rawvideo'解决 问题现象
使用matplotlib.animation.FuncAnimation生成动画后,调用FFMpegWriter导出mp4文件时触发报错:
MovieWriter stderr: Unknown input format: 'rawvideo'
后续依次抛出BrokenPipeError,最终触发subprocess.CalledProcessError,提示ffmpeg调用命令返回非0退出状态1,报错栈涉及matplotlib的animation、figure、backend_agg模块。
复现方式
该问题与动画承载的业务数据无关,使用最简正弦波测试代码可稳定复现:
import numpy as np from matplotlib import pyplot as plt from matplotlib import animation # plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg' fig = plt.figure() ax = plt.axes(xlim=(0, 2), ylim=(-2, 2)) line, = ax.plot([], [], lw=2) def init(): line.set_data([], []) return line, def animate(i): x = np.linspace(0, 2, 1000) y = np.sin(2 * np.pi * (x - 0.01 * i)) line.set_data(x, y) return line, anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True) FFwriter = animation.FFMpegWriter() anim.save('basic_animation.mp4', writer=FFwriter)
已排除的错误方向
- 系统原生安装的FFmpeg版本为4.2.4,系统终端执行
ffmpeg -formats可查询到rawvideo格式支持,排除FFmpeg本身缺失rawvideo支持的问题 - 手动配置
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'指定系统FFmpeg路径,问题未解决 - 分别搭建venv、anaconda虚拟环境测试,报错完全一致,排除虚拟环境依赖冲突问题
- 相同代码在原生Ubuntu系统、同配置的其他Ubuntu设备上可正常运行,本地使用的fish shell与该问题无关联
根因定位
在PyCharm内置终端执行ffmpeg -formats,可发现当前PyCharm环境下调用的是4.3.4版本的裁剪编译版FFmpeg,其编译参数未启用rawvideo解封装支持,格式列表中无rawvideo项。
核心原因:通过Flatpak安装的PyCharm默认运行在沙箱隔离环境中,沙箱内优先调用Flatpak runtime内置的裁剪版FFmpeg,功能不全无法识别rawvideo格式;受沙箱权限隔离限制,手动配置的系统FFmpeg路径无法被正常映射调用,因此指定系统路径的方案无效。
解决方案
- 推荐方案:卸载Flatpak/Snap版本的PyCharm,通过官方二进制压缩包、系统原生包管理器或JetBrains Toolbox安装非沙箱版PyCharm,可直接调用系统原生完整功能FFmpeg,从根源规避沙箱隔离带来的依赖、路径调用异常
- 临时方案:在代码中手动将
plt.rcParams['animation.ffmpeg_path']配置为虚拟环境内安装的完整功能FFmpeg的绝对路径(例如conda环境下路径为/home/j/.conda/envs/venvtest/bin/ffmpeg),配置后动画可正常导出。
内容的提问来源于stack exchange,提问作者John Klint
相关产品推荐
相关产品推荐

