@@ -293,7 +293,8 @@ def __init__(self, fps=5, codec=None, bitrate=None, extra_args=None,
293
293
'MovieWriter cannot be instantiated directly. Please use one '
294
294
'of its subclasses.' )
295
295
296
- super ().__init__ (fps = fps , metadata = metadata )
296
+ super ().__init__ (fps = fps , metadata = metadata , codec = codec ,
297
+ bitrate = bitrate )
297
298
298
299
self .frame_format = 'rgba'
299
300
self .extra_args = extra_args
@@ -554,7 +555,9 @@ class FFMpegBase:
554
555
@property
555
556
def output_args (self ):
556
557
args = []
557
- if not Path (self .outfile ).suffix == '.gif' :
558
+ if Path (self .outfile ).suffix == '.gif' :
559
+ self .codec = 'gif'
560
+ else :
558
561
args .extend (['-vcodec' , self .codec ])
559
562
extra_args = (self .extra_args if self .extra_args is not None
560
563
else mpl .rcParams [self ._args_key ])
@@ -564,6 +567,11 @@ def output_args(self):
564
567
# OSX). Also fixes internet explorer. This is as of 2015/10/29.
565
568
if self .codec == 'h264' and '-pix_fmt' not in extra_args :
566
569
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' ])
567
575
if self .bitrate > 0 :
568
576
args .extend (['-b' , '%dk' % self .bitrate ]) # %dk: bitrate in kbps.
569
577
args .extend (extra_args )
0 commit comments