Reputation: 926
Although I have installed ffmpeg
, matplotlib reports that MovieWriter ffmpeg is unavailable
and the MP4 file created is empty.
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
# initialization function: plot the background of each frame
def init():
line.set_data([], [])
return line,
# animation function. This is called sequentially
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,
# call the animator. blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)
# save the animation as an mp4. This requires ffmpeg or mencoder to be
# installed. The extra_args ensure that the x264 codec is used, so that
# the video can be embedded in html5. You may need to adjust this for
# your system: for more information, see
# http://matplotlib.sourceforge.net/api/animation_api.html
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()
I have even added the line plt.switch_backend('TkAgg')
proposed in another post, nothing changed. Here is my matplotlib:
Name: matplotlib
Version: 2.1.0
Summary: Python plotting package
Home-page: http://matplotlib.org
my ffmpeg:
Name: ffmpeg
Version: 1.4
Summary: ffmpeg python package url [https://github.com/jiashaokun/ffmpeg]
Home-page: https://github.com/jiashaokun/ffmpeg
and my Python version:
Python 3.6.5
The error I get is:
/usr/local/lib/python3.6/site-packages/matplotlib/animation.py:1218: UserWarning: MovieWriter ffmpeg unavailable
warnings.warn("MovieWriter %s unavailable" % writer)
This error has been reported many times on stackoverflow, each time the solution is either to install ffmpeg
(mine is installed) or to add that extra line about the backend, which hasn't changed anything for me.
Curiously enough the plt.show()
command works and I do preview an animation, but the only file format to save it is (nonanimated) PNG.
Upvotes: 1
Views: 577
Reputation: 926
I finally found the answer in an older stackoverflow post: those who say “install ffmpeg
” don't mean “install the Python package ffmpeg
” but rather “install the binary ffmpeg
” which one can get from the FFMPEG official site. Once I did this everything worked fine. For those on a Mac, and since there are no installation instructions on this site: download the latest version of ffmpeg
as a DMG, open the DMG, copy the file on your desktop and then do a sudo cp ~/Desktop/ffmpeg /usr/local/bin
, that's all you need.
Upvotes: 1