@@ -293,7 +293,8 @@ def __init__(self, fps=5, codec=None, bitrate=None, extra_args=None,
293293 'MovieWriter cannot be instantiated directly. Please use one '
294294 'of its subclasses.' )
295295
296- super ().__init__ (fps = fps , metadata = metadata )
296+ super ().__init__ (fps = fps , metadata = metadata , codec = codec ,
297+ bitrate = bitrate )
297298
298299 self .frame_format = 'rgba'
299300 self .extra_args = extra_args
@@ -554,7 +555,9 @@ class FFMpegBase:
554555 @property
555556 def output_args (self ):
556557 args = []
557- if not Path (self .outfile ).suffix == '.gif' :
558+ if Path (self .outfile ).suffix == '.gif' :
559+ self .codec = 'gif'
560+ else :
558561 args .extend (['-vcodec' , self .codec ])
559562 extra_args = (self .extra_args if self .extra_args is not None
560563 else mpl .rcParams [self ._args_key ])
@@ -564,6 +567,11 @@ def output_args(self):
564567 # OSX). Also fixes internet explorer. This is as of 2015/10/29.
565568 if self .codec == 'h264' and '-pix_fmt' not in extra_args :
566569 args .extend (['-pix_fmt' , 'yuv420p' ])
570+ # For GIF, we're telling FFMPEG to split the video stream, to generate
571+ # a palette, and then use it for encoding.
572+ elif self .codec == 'gif' and '-filter_complex' not in extra_args :
573+ args .extend (['-filter_complex' ,
574+ 'split [a][b];[a] palettegen [p];[b][p] paletteuse' ])
567575 if self .bitrate > 0 :
568576 args .extend (['-b' , '%dk' % self .bitrate ]) # %dk: bitrate in kbps.
569577 args .extend (extra_args )
0 commit comments