Не удается сохранить анимацию matplotlib
Я пытаюсь получить простую анимацию, сохраненную с помощью ffmpeg. Я следовал учебнику по установке ffmpeg, и теперь я могу получить к нему доступ из командной строки.
теперь я запускаю этот кусок кода:
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()
Я получаю эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py", line 523, in runfile
execfile(filename, namespace)
File "C:UsersRenger.xystartupsb.py", line 23, in <module>
anim.save('mymovie.mp4',writer=mywriter)
File "C:Python27libsite-packagesmatplotlibanimation.py", line 609, in save
with writer.saving(self._fig, filename, dpi):
File "C:Python27libcontextlib.py", line 17, in __enter__
return self.gen.next()
File "C:Python27libsite-packagesmatplotlibanimation.py", line 166, in saving
self.setup(*args)
File "C:Python27libsite-packagesmatplotlibanimation.py", line 156, in setup
self._run()
File "C:Python27libsite-packagesmatplotlibanimation.py", line 183, in _run
stdin=subprocess.PIPE)
File "C:Python27libsubprocess.py", line 711, in __init__
errread, errwrite)
File "C:Python27libsubprocess.py", line 948, in _execute_child
startupinfo)
WindowsError: [Error 2] Het systeem kan het opgegeven bestand niet vinden
последнее голландское предложение означает что-то вроде: система не может найти указанный файл.
Что означают эти ошибки и как я могу их решить?
3 ответов
вам нужно указать свой путь к ffmpeg
:
в linux я использую:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'
Вам, очевидно, придется указать на ваши окна .exe вместо '/ usr/bin / ffmpeg'
Если у вас нет ffmpeg
установлен, вы можете сделать это здесь
для некоторой анимации "anim" я использую в windows:
plt.rcParams['animation.ffmpeg_path'] ='E:\Media\ffmpeg\bin\ffmpeg.exe'
FFwriter = animation.FFMpegWriter()
anim.save('basic_animation.mp4', writer = FFwriter, fps=30)
где путь должен быть с \ \ , а не с / или \ между папками
строка 183 in animation.py это subprocess.Popen
вызов ffmpeg
. Кажется, что ffmpeg
exe не там, где ожидает matplotlib.
моей первой попыткой было бы поместить путь установки (каталог) в ffmpeg
в окна Path
переменные среды. Я предполагаю, что animation.py ожидает, что он будет доступен глобально (как это было бы под Linux).
если это не сработает, я бы осмотрите subprocess.Popen
вызов animation.py чтобы увидеть, что именно это делающий. Вы можете сломать его или настроить многословие.переменная отчета в вашем matplotlibrc выплюнуть. Строка 179 есть:
verbose.report('MovieWriter.run: running command: %s' %
' '.join(command))