Trying to animate a string in python, i think my code is fine but just having difficulties with the file writer. My code is (based off https://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/):
import numpy as np
import scipy as sci
import matplotlib.pyplot as plt
import matplotlib.animation as animation
plt.rcParams['animation.ffmpeg_path'] = 'C:\FFMPEG\bin\ffmpeg'
s1=10.15
gamma=(np.pi*np.sqrt(2))/2
gamma=sci.special.jn_zeros(0,10)
gamma1=gamma[9]
gamma2=gamma[8]
print gamma1,gamma2
sigma=np.linspace(0,2*s1,10000)
def xprime(sigma,t):
alpha = gamma1*(np.cos(np.pi*t/s1)*np.cos((np.pi*sigma)/s1))
beta = gamma1*(np.sin(np.pi*t/s1)*np.sin((np.pi*sigma)/s1))
xprime=np.cos(alpha)*np.cos(beta)
return xprime
def yprime(sigma,t):
alpha = gamma2*(np.cos(np.pi*t/s1)*np.cos((np.pi*sigma)/s1))
beta = gamma2*(np.sin(np.pi*t/s1)*np.sin((np.pi*sigma)/s1))
yprime=np.cos(alpha)*np.sin(beta)
return yprime
fig = plt.figure()
ax = plt.axes(xlim=(-0.4, 0.4), ylim=(-3, 3))
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
sigma=np.linspace(0,2*s1,10000)
t = (i*2*s1)/200
yint=sci.integrate.cumtrapz(yprime(sigma,t),sigma)
xint=sci.integrate.cumtrapz(xprime(sigma,t),sigma)
line.set_data(xint, yint)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)
FFwriter=animation.FFMpegWriter()
anim.save('basic_animation.mp4', writer=FFwriter, fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()
Currently getting the error message
RuntimeError: Passing in values for arguments for arguments fps, codec, bitrate, extra_args, or metadata is not supported when writer is an existing MovieWriter instance. These should instead be passed as arguments when creating the MovieWriter instance.'
I think my error is in the calling or placement of the FFMpeg file but i'm unsure what i'm doing wrong. Probably very obvious but can't see it at the moment / unsure what the error message actually means.