Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 33503a2

Browse files
authored
Merge pull request #18093 from dopplershift/fix-ffmpeg-gif
FIX: Improve saving animated GIF with ffmpeg
2 parents 97e525c + 1c02381 commit 33503a2

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/matplotlib/animation.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)