Не удается сохранить анимацию 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))