title: Save Matplotlib Animation
body: <p>I am trying to make an Animation of a wave package and save it as a movie. Everything except the saving is working. Can you please tell me what I am doing wrong? When going into the line <code>ani.save('MovWave.mp4')</code> he tells me:</p>
  
  <pre><code>    writer = writers.list()[0]
  IndexError: list index out of range
  </code></pre>
  
  <p>I tried googling it of course, but I don't even know what it means.</p>
  
  <p><strong>UPDATE:</strong> I can call <code>ffmpeg</code> in console now. It says I have ffmpeg version <code>0.10.7-6:0.10.7-0jon1~precise</code> installed. I updated the code and ran the program, but now I get the following error:</p>
  
  <pre><code>Traceback (most recent call last):
    ani.save('MovWave.mpeg', writer="ffmpeg")
    writer.grab_frame()
    dpi=self.dpi)
    self.canvas.print_figure(*args, **kwargs)
    self.figure.dpi = origDPI
    self.dpi_scale_trans.clear().scale(dpi, dpi)
    self._mtx = np.identity(3)
    from numpy import eye
    File "&lt;frozen importlib._bootstrap&gt;", line 1609, in _handle_fromlist
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
  </code></pre>
  
  <p><strong>Update 2:</strong> Apparently there is a bug when using python 3.3 as doctorlove pointed out. I am now trying to use python 2.7 instead. Now it creates an mpeg-file but it cannot be played and it is only about ~150 kB big.</p>
  
  <p><strong>Update 3:</strong> Okay, so I tried the exact same code on my Win7 machine and it also works in python 3.3. But I have the same problem, I had earlier with python 2.7. The mpeg-file created cannot be played and is only a few hundred kB.</p>
  
  <pre><code>#! coding=utf-8
  import numpy as np
  import matplotlib.pyplot as plt
  import matplotlib.animation as animation
  import time
  time.clock()
  
  def FFT(x,y):
      X = (x[-1]-x[0])/len(y)
      f = np.linspace(-2*np.pi/X/2,2*np.pi/X/2,len(y))
      F = np.fft.fftshift(np.fft.fft(y))/np.sqrt(len(y))
      return(f,F)
  
  def FUNCTION(k_0,dx,c,t):
      y = np.exp(1j*k_0*(x-c*t))*np.exp(-((x-c*t)/(2*dx))**2 )*(2/np.pi/dx**2)**(1/4)
      k,F = FFT((x-c*t),y)
      return(x,y,k,F)
  
  #Parameter
  N = 1000
  x   = np.linspace(0,30,N)
  k_0 = 5
  dx  = 1
  c   = 1
  
  l = [k_0,c,dx]
  
  fig = plt.figure("Moving Wavepackage and it's FFT")
  sub1 = plt.subplot(211)
  sub2 = plt.subplot(212)
  sub2.set_xlim([-10,10])
  sub1.set_title("Moving Wavepackage and it's FFT")
  sub1.set_ylabel("$Re[\psi(x,t)]$")
  sub1.set_xlabel("$t$")
  sub2.set_ylabel("$Re[\psi(k_x,t)]$")
  sub2.set_xlabel("$k_x$")
  
  
  n = 50
  t = np.linspace(0,30,n)
  img = []
  for i in range(n):
      x,y,k,F = FUNCTION(k_0,dx,c,t[i]) 
  
      img.append(plt.plot(x,np.real(y),color="red", axes=plt.subplot(211)))
      img.append(plt.plot(k,np.real(F),color="red", axes=plt.subplot(212)))
  
  ani = animation.ArtistAnimation(fig, img, interval=20, blit=True, repeat_delay=0)
  
  ani.save('MovWave.mpeg', writer="ffmpeg")
  
  print(time.clock())
  plt.show()
  </code></pre>