@@ -310,7 +310,8 @@ def __init__(self, fps=5, codec=None, bitrate=None, extra_args=None,
310
310
'MovieWriter cannot be instantiated directly. Please use one '
311
311
'of its subclasses.' )
312
312
313
- super ().__init__ (fps = fps , metadata = metadata )
313
+ super ().__init__ (fps = fps , metadata = metadata , codec = codec ,
314
+ bitrate = bitrate )
314
315
315
316
self .frame_format = 'rgba'
316
317
self .extra_args = extra_args
@@ -571,7 +572,9 @@ class FFMpegBase:
571
572
@property
572
573
def output_args (self ):
573
574
args = []
574
- if not Path (self .outfile ).suffix == '.gif' :
575
+ if Path (self .outfile ).suffix == '.gif' :
576
+ self .codec = 'gif'
577
+ else :
575
578
args .extend (['-vcodec' , self .codec ])
576
579
extra_args = (self .extra_args if self .extra_args is not None
577
580
else mpl .rcParams [self ._args_key ])
@@ -581,6 +584,11 @@ def output_args(self):
581
584
# OSX). Also fixes internet explorer. This is as of 2015/10/29.
582
585
if self .codec == 'h264' and '-pix_fmt' not in extra_args :
583
586
args .extend (['-pix_fmt' , 'yuv420p' ])
587
+ # For GIF, we're telling FFMPEG to split the video stream, to generate
588
+ # a palette, and then use it for encoding.
589
+ elif self .codec == 'gif' and '-filter_complex' not in extra_args :
590
+ args .extend (['-filter_complex' ,
591
+ 'split [a][b];[a] palettegen [p];[b][p] paletteuse' ])
584
592
if self .bitrate > 0 :
585
593
args .extend (['-b' , '%dk' % self .bitrate ]) # %dk: bitrate in kbps.
586
594
args .extend (extra_args )
0 commit comments