Using FFmpeg and IPython
I came across the exact same error as I started working with animations using the exact same example to start with. First of all,
I am using Windows 7, Python 2.7.6, matplotlib 1.3.1
Short answer: Try to set up the FFMpegWriter yourself by
mywriter = animation.FFMpegWriter()
anim.save('mymovie.mp4',writer=mywriter)
Long answer: I am quite sure that there is a bug in matplotblib.animation.save
There is the following line
if is_string_like(writer):
to catch the case that the user defined writer is actually not a writer function but just its name. It then instanciates an instance of that writer if it's available
if writer in writers.avail:
writer = writers[writer](fps, codec, bitrate,
extra_args=extra_args,
metadata=metadata
However, and here is the bug, if the user defined writer is not in writers.avail
it just uses
writer = writers.list()[0]
which itself returns a string with the name of the writer to be used. However, this string is nowhere used to actually instanciate a writer object!
selimb
Updated on July 17, 2022Comments
-
selimb almost 2 years
I am relatively new to Python (I used MATLAB a lot more). I essentially want to be able to make and save animations. So I went and checked how it's done and found this : http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/
I straight up copied/pasted the code in an IPython Notebook.
I understand that ffmpeg must be installed, which I thought I did (according to http://www.wikihow.com/Install-FFmpeg-on-Windows). The path is C:/ffmpeg. It does work when I try ffmpeg -version in the command prompt. It also works in WinPython's command prompt. I don't know if it helps, but the path for Ipython is : C:\Users\Sal\WinPython-32bit-3.3.2.3\python-3.3.2\Scripts /
However, it still doesn't work. The error given is : AttributeError: 'str' object has no attribute 'saving' This error occurs at the .save command of course. I even tried to add what's below. Doesn't do anything extra. writer = 'ffmpeg'
I am using Windows 7, WinPython3.3.
Thank you very much
-
jorgeh over 10 yearsYour short answer worked for me. One minor comment: to be consistent with the example cited in the original question, it should be
animation.FFMpegWriter()
instead ofanimator.FFMpegWriter()
-
Admin about 10 years@Sascha Could you please specify which method is correct? I tried the short one (the two lines above) in one program to save an animation created in Python but I didn't succeed! Thanks
-
Sascha about 10 years@Strömungsmechanik If you have ffmpeg installed correctly, the short answer should work. However, reading your other posts about your animation problem, it doesn't seem that you have the problem discussed here. Have you tried the above tutorial example?
-
Stretch about 10 years@Sascha Is this bug listed on the matplotlib github site? (I looked and did not find it.) If not, please do report it, so that it gets fixed.
-
Sascha about 10 years@Stretch I reported the bug some months ago and a fix is on the way. However, it will be published in matplotlib version 1.4.0 for which no due date is set yet. Issue number is #2651. github.com/matplotlib/matplotlib/issues/2651
-
Chris Mueller almost 9 yearsAdding the first two lines solved my issue! The video isn't playing properly, but that is a separate hurdle. Thanks.