Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I overcome this key word error?

Tags:

python-3.4

enter code here

 # -*- coding: utf-8 -*-

import math
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig1=plt.figure()
ax=plt.axes(xlim=(-10,10), ylim=(-10,10))
line,=ax.plot([],[],lw=1)
"""def init ():
line.set_data([],[])
return line,"""

dt=0.001
X=[]
Y=[]
r=float(input("Enter the radius :: "))
w=float(input("Enter angular frequency :: "))
def run(data):
    t=0
    while w*t<=2*math.pi:
       x=r*math.cos(w*t)
       y=r*math.sin(w*t)
       X.append(x)
       Y.append(y)
       t=t+dt
    line.set_data(X,Y)
    return line,   
line,=ax.plot(X,Y,lw=2) 
FFMpegWriter = animation.writers['ffmpeg']
writer = FFMpegWriter(fps=15, metadata=dict(artist='Me'),        bitrate=1800)   
anim=animation.FuncAnimation(fig1,run,frames=200,interval=20,blit=True)
anim.save('amim.mp4',writer=writer)       

The error message shown is ::

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/tathagata/anaconda3/lib/python3.4/site-   packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "/home/tathagata/anaconda3/lib/python3.4/site-  packages/spyderlib/widgets/externalshell/sitecustomize.py", line 85, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "/home/tathagata/Documents/Python scripts/circleamim.py", line 35, in <module>
FFMpegWriter = animation.writers['ffmpeg']
File "/home/tathagata/anaconda3/lib/python3.4/site-packages/matplotlib/animation.py", line 81, in __getitem__
return self.avail[name]
KeyError: 'ffmpeg' 

I use anacoda distribution and SPYDER as my IDE. I have seen the many solutions related to key errors. But the movie wont run. How can I make the movie to run? I hope there are no other logical errors.

like image 315
Adam Jones Avatar asked Aug 16 '15 06:08

Adam Jones


3 Answers

First install ffmpeg and add path to ffmpeg

# on windows
plt.rcParams['animation.ffmpeg_path'] = 'C:\\ffmpeg\\bin\\ffmpeg.exe'
# on linux
plt.rcParams['animation.ffmpeg_path'] = u'/home/username/anaconda/envs/env_name/bin/ffmpeg'    

Note for linux users: The path for ffmpeg can be found by simply using which: which ffmpeg

Also instead of

FFMpegWriter = animation.writers['ffmpeg']
writer = FFMpegWriter(fps=15, metadata=dict(artist='Me'),        bitrate=1800)

I just used writer = animation.FFMpegWriter()

like image 177
varzik Avatar answered Jan 01 '23 21:01

varzik


It seems that ffmpegis not installed on your system. Try the following code:

import matplotlib.animation as animation
print(animation.writers.list())

It will print out a list of all available MovieWriters. If ffmpegis not among it, you need to install it first from the ffmpeg homepage.

like image 20
MaxPowers Avatar answered Jan 01 '23 21:01

MaxPowers


If you have Homebrew, literally just run the command

brew install ffmpeg

And Homebrew will take care of the rest (dependencies, etc). If you don't, I would recommend getting Homebrew or something like it (apt-get on Linux is built in, or an alternative on OS X would be Macports)

like image 20
cbartondock Avatar answered Jan 01 '23 23:01

cbartondock