title: How can fix CalledProcessError: in ffmpeg
body: <p>I hope someone can help to troubleshoot this problem. I'm trying to save the loss plots out of Keras in the form of the following animation.</p>
  
  <p><img src="https://i.stack.imgur.com/UaEXI.gif" alt="img"></p>
  
  <p>but I have been facing the following error, and ultimately I can't save the animation:</p>
  
  <pre class="lang-py prettyprint-override"><code>MovieWriter stderr:
  [h264_v4l2m2m @ 0x55a67176f430] Could not find a valid device
  [h264_v4l2m2m @ 0x55a67176f430] can't configure encoder
  Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
  
  ---------------------------------------------------------------------------
  BrokenPipeError                           Traceback (most recent call last)
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
      229         try:
  --&gt; 230             yield self
      231         finally:
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs, progress_callback)
     1155                             frame_number += 1
  -&gt; 1156                     writer.grab_frame(**savefig_kwargs)
     1157 
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in grab_frame(self, **savefig_kwargs)
      383         self.fig.savefig(self._frame_sink(), format=self.frame_format,
  --&gt; 384                          dpi=self.dpi, **savefig_kwargs)
      385 
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/figure.py in savefig(self, fname, transparent, **kwargs)
     2179 
  -&gt; 2180         self.canvas.print_figure(fname, **kwargs)
     2181 
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, **kwargs)
     2081                     bbox_inches_restore=_bbox_inches_restore,
  -&gt; 2082                     **kwargs)
     2083             finally:
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py in print_raw(self, filename_or_obj, *args, **kwargs)
      445                 cbook.open_file_cm(filename_or_obj, "wb") as fh:
  --&gt; 446             fh.write(renderer._renderer.buffer_rgba())
      447 
  
  BrokenPipeError: [Errno 32] Broken pipe
  
  During handling of the above exception, another exception occurred:
  
  CalledProcessError                        Traceback (most recent call last)
  &lt;ipython-input-23-13442cbf583d&gt; in &lt;module&gt;
       17 print(f'{model_type.upper()} Train Time: {Timer} sec')
       18 
  ---&gt; 19 create_loss_animation(model_type, hist.history['loss'], hist.history['val_loss'], epoch)
       20 
       21 evaluate(model, trainX, trainY, testX, testY, scores_train, scores_test)
  
  &lt;ipython-input-22-199228cd4989&gt; in create_loss_animation(model_type, loss_hist, val_loss_hist, epoch)
       34 
       35     ani = matplotlib.animation.FuncAnimation(fig, animate, fargs=(l1, l2, loss, val_loss, title), repeat=True, interval=1000, repeat_delay=1000)
  ---&gt; 36     ani.save(f'loss_animation_{model_type}_oneDataset.mp4', writer=writer)
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs, progress_callback)
     1154                             progress_callback(frame_number, total_frames)
     1155                             frame_number += 1
  -&gt; 1156                     writer.grab_frame(**savefig_kwargs)
     1157 
     1158         # Reconnect signal for first draw if necessary
  
  ~/anaconda3/envs/CR7/lib/python3.6/contextlib.py in __exit__(self, type, value, traceback)
       97                 value = type()
       98             try:
  ---&gt; 99                 self.gen.throw(type, value, traceback)
      100             except StopIteration as exc:
      101                 # Suppress StopIteration *unless* it's the same exception that
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
      230             yield self
      231         finally:
  --&gt; 232             self.finish()
      233 
      234 
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in finish(self)
      365     def finish(self):
      366         '''Finish any processing for writing the movie.'''
  --&gt; 367         self.cleanup()
      368 
      369     def grab_frame(self, **savefig_kwargs):
  
  ~/anaconda3/envs/CR7/lib/python3.6/site-packages/matplotlib/animation.py in cleanup(self)
      409         if self._proc.returncode:
      410             raise subprocess.CalledProcessError(
  --&gt; 411                 self._proc.returncode, self._proc.args, out, err)
      412 
      413     @classmethod
  
  CalledProcessError: Command '['/usr/bin/ffmpeg', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-s', '720x720', '-pix_fmt', 
  'rgba', '-r', '5', '-loglevel', 'error', '-i', 'pipe:', '-vcodec', 'h264', '-pix_fmt', 'yuv420p', '-b', '800k', '-y', 
  'loss_animation_CNN_oneDataset.mp4']' returned non-zero exit status 1.
  </code></pre>
  
  <p>I tried to ignore the error by this <a href="https://stackoverflow.com/a/12015857/10452700">answer</a> but it seems it's not the case. I also checked similar case but its answer for getting a static git binary is not my cas as well since not especial converting PNG to MP4!</p>
  
  <p><strong>My code is as follows:</strong></p>
  
  <pre class="lang-py prettyprint-override"><code>plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'
  
  def animate(i, data1, data2, line1, line2):
      temp1 = data1.iloc[:int(i+1)]
      temp2 = data2.iloc[:int(i+1)]
  
      line1.set_data(temp1.index, temp1.value)
      line2.set_data(temp2.index, temp2.value)
  
      return (line1, line2)
  
  
  def create_loss_animation(model_type, data1, data2):
      fig = plt.figure()
      plt.title(f'Loss on Train &amp; Test', fontsize=25)
      plt.xlabel('Epoch', fontsize=20)
      plt.ylabel('Loss MSE for Sx-Sy &amp; Sxy', fontsize=20)
      plt.xlim(min(data1.index.min(), data2.index.min()), max(data1.index.max(), data2.index.max()))
      plt.ylim(min(data1.value.min(), data2.value.min()), max(data1.value.max(), data2.value.max()))
  
      l1, = plt.plot([], [], 'o-', label='Train Loss', color='b', markevery=[-1])
      l2, = plt.plot([], [], 'o-', label='Test Loss', color='r', markevery=[-1])
      plt.legend(loc='center right', fontsize='xx-large')
  
      Writer = animation.writers['ffmpeg']
      writer = Writer(fps=5, bitrate=1800)
  
      ani = matplotlib.animation.FuncAnimation(fig, animate, fargs=(data1, data2, l1, l2), repeat=True, interval=1000, repeat_delay=1000)
      ani.save(f'{model_type}.mp4', writer=writer)
  
  # create datasets
  x = np.linspace(0,150,50)
  y1 = 41*np.exp(-x/20)
  y2 = 35*np.exp(-x/50)
  
  my_data_number_1 = pd.DataFrame({'x':x, 'value':y1}).set_index('x')
  my_data_number_2 = pd.DataFrame({'x':x, 'value':y2}).set_index('x')
  
  create_loss_animation('test', my_data_number_1, my_data_number_2)
  </code></pre>