yannis
yannis

Reputation: 926

Although ffmpeg installed, unable to save mp4 file on disk

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

Answers (1)

yannis
yannis

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

Related Questions