Can't save matplotlib animation

匿名 (未验证) 提交于 2019-12-03 01:14:02

问题:

I am trying to get a simple animation saved using ffmpeg. I followed a tutorial to install ffmpeg, and I can now access it from the command prompt.

Now I run this piece of code:

import numpy as np from matplotlib import pyplot as plt from matplotlib import animation  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)  mywriter = animation.FFMpegWriter() anim.save('mymovie.mp4',writer=mywriter)  plt.show() 

I get this error:

Traceback (most recent call last):   File "", line 1, in     File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 523, in runfile     execfile(filename, namespace)   File "C:\Users\Renger\.xy\startups\b.py", line 23, in      anim.save('mymovie.mp4',writer=mywriter)   File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 609, in save     with writer.saving(self._fig, filename, dpi):   File "C:\Python27\lib\contextlib.py", line 17, in __enter__     return self.gen.next()   File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 166, in saving     self.setup(*args)   File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 156, in setup     self._run()   File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 183, in _run     stdin=subprocess.PIPE)   File "C:\Python27\lib\subprocess.py", line 711, in __init__     errread, errwrite)   File "C:\Python27\lib\subprocess.py", line 948, in _execute_child     startupinfo) WindowsError: [Error 2] Het systeem kan het opgegeven bestand niet vinden 

The last dutch sentence does mean something like: The system can't find the specified file.

What do these errors mean, and how can I solve them?

回答1:

You need to specify your path to ffmpeg:

On linux I use:

import numpy as np from matplotlib import pyplot as plt from matplotlib import animation plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg' 

You will obviously have to point to your windows .exe instead of '/usr/bin/ffmpeg'

If you don't have ffmpeg installed, you can get it here



回答2:

for some animation "anim" i use on windows:

plt.rcParams['animation.ffmpeg_path'] ='E:\\Media\\ffmpeg\\bin\\ffmpeg.exe' FFwriter = animation.FFMpegWriter() anim.save('basic_animation.mp4', writer = FFwriter, fps=30) 

where path should be with \ \ and not with / or \ between folders



回答3:

Line 183 in animation.py is the subprocess.Popen call to ffmpeg. It seems that the ffmpeg exe is not where matplotlib expects it to be.

My first attempt would be to put the install path (directory) to ffmpeg into the windows Path environmental variable. I'm guessing that animation.py is expecting it to be available globally (as it would be under Linux).

If that doesn't work, I'd inspect the subprocess.Popen call in animation.py to see exactly what it is doing. You could break point it or adjust the verbose.report variable in your matplotlibrc file to spit it out. Line 179 there is:

verbose.report('MovieWriter.run: running command: %s' %                    ' '.join(command)) 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!