Using FFmpeg and IPython

18,449

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!

Share:
18,449
selimb
Author by

selimb

Updated on July 17, 2022

Comments

  • selimb
    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
    jorgeh over 10 years
    Your 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 of animator.FFMpegWriter()
  • Admin
    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
    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
    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
    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
    Chris Mueller almost 9 years
    Adding the first two lines solved my issue! The video isn't playing properly, but that is a separate hurdle. Thanks.