Kyle Douglass
2016-02-24 20:34:44 UTC
Hi all,
I would like to use matplotlib's animation API to create a movie that can
be embedded into an html5 video tag. To do this, I am following a couple
2012 blog posts from Jake VanderPlas:
http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ and
http://jakevdp.github.io/blog/2013/05/12/embedding-matplotlib-animations/
My understanding is that I need to use the x264 codec to do this.
Unfortunately, I get a Broken Pipe Error when running the basic example
below. I get the same error when calling the animation.to_html5_video()
method.
Does anyone have an idea about why I'm getting the Broken Pipe error? Do I
really need the x264 codec to embed matplotlib animations into html? Thanks!
Kyle
*Example code:*
*import numpy as np*
*import matplotlib.pyplot as plt*
*from matplotlib import animate*
*fig = plt.figure()ax = plt.axes(xlim = (0, 2), ylim = (-2, 2))line, =
ax.plot([], [], linewidth = 2)# initialization function: plot the
background of each framedef init(): line.set_data([], []) return
line,# animation function. This is called sequentiallydef 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 animatoranim =
animation.FuncAnimation(fig, animate,
init_func=init, frames=200, interval=20,
blit=True)myWriter = animation.FFMpegWriter(fps = 30,
extra_args=['-vcodec', 'libx264'])anim.save('basic_animation.mp4', writer =
myWriter)*
*plt.show()*
*Traceback:*
*Traceback (most recent call last): File "test.py", line 26, in
<module> anim.save('basic_animation.mp4', writer = myWriter) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py",
line 810, in save
writer.grab_frame(**savefig_kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py",
line 230, in grab_frame
dpi=self.dpi, **savefig_kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/figure.py",
line 1565, in savefig
self.canvas.print_figure(*args, **kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py",
line 196, in print_figure
FigureCanvasAgg.print_figure(self, *args, **kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backend_bases.py",
line 2232, in print_figure
**kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py",
line 519, in print_raw
fileobj.write(renderer._renderer.buffer_rgba())BrokenPipeError: [Errno 32]
Broken pipe*
I'm using Anaconda/Python 3.5 with matplotlib 1.5.1. I installed FFmpeg 3.0
in Debian Jessie by compiling FFmpeg from source into a dpkg according to
these instructions:
http://superuser.com/questions/286675/how-to-install-ffmpeg-on-debian I
also have Debian packages x264 and libx264-142 installed.
I would like to use matplotlib's animation API to create a movie that can
be embedded into an html5 video tag. To do this, I am following a couple
2012 blog posts from Jake VanderPlas:
http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ and
http://jakevdp.github.io/blog/2013/05/12/embedding-matplotlib-animations/
My understanding is that I need to use the x264 codec to do this.
Unfortunately, I get a Broken Pipe Error when running the basic example
below. I get the same error when calling the animation.to_html5_video()
method.
Does anyone have an idea about why I'm getting the Broken Pipe error? Do I
really need the x264 codec to embed matplotlib animations into html? Thanks!
Kyle
*Example code:*
*import numpy as np*
*import matplotlib.pyplot as plt*
*from matplotlib import animate*
*fig = plt.figure()ax = plt.axes(xlim = (0, 2), ylim = (-2, 2))line, =
ax.plot([], [], linewidth = 2)# initialization function: plot the
background of each framedef init(): line.set_data([], []) return
line,# animation function. This is called sequentiallydef 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 animatoranim =
animation.FuncAnimation(fig, animate,
init_func=init, frames=200, interval=20,
blit=True)myWriter = animation.FFMpegWriter(fps = 30,
extra_args=['-vcodec', 'libx264'])anim.save('basic_animation.mp4', writer =
myWriter)*
*plt.show()*
*Traceback:*
*Traceback (most recent call last): File "test.py", line 26, in
<module> anim.save('basic_animation.mp4', writer = myWriter) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py",
line 810, in save
writer.grab_frame(**savefig_kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py",
line 230, in grab_frame
dpi=self.dpi, **savefig_kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/figure.py",
line 1565, in savefig
self.canvas.print_figure(*args, **kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py",
line 196, in print_figure
FigureCanvasAgg.print_figure(self, *args, **kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backend_bases.py",
line 2232, in print_figure
**kwargs) File
"/home/kmdouglass/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py",
line 519, in print_raw
fileobj.write(renderer._renderer.buffer_rgba())BrokenPipeError: [Errno 32]
Broken pipe*
I'm using Anaconda/Python 3.5 with matplotlib 1.5.1. I installed FFmpeg 3.0
in Debian Jessie by compiling FFmpeg from source into a dpkg according to
these instructions:
http://superuser.com/questions/286675/how-to-install-ffmpeg-on-debian I
also have Debian packages x264 and libx264-142 installed.