Skip to content

Commit 22a9d12

Browse files
committed
Let MovieFileWriter save the files in a new dir
1 parent b9b02f1 commit 22a9d12

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

lib/matplotlib/animation.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ def __init__(self, *args, **kwargs):
424424
self.frame_format = rcParams['animation.frame_format']
425425

426426
def setup(self, fig, outfile, dpi=None, frame_prefix='_tmp',
427-
clear_temp=True):
427+
clear_temp=True, frame_dir=None):
428428
'''Perform setup for writing the movie file.
429429
430430
Parameters
@@ -444,17 +444,24 @@ def setup(self, fig, outfile, dpi=None, frame_prefix='_tmp',
444444
If the temporary files should be deleted after stitching
445445
the final result. Setting this to ``False`` can be useful for
446446
debugging. Defaults to ``True``.
447-
447+
frame_dir : str or None, optional
448+
Directory where the temporary files are saved. None means the
449+
default and '' means no temporary directory.
448450
'''
449451
self.fig = fig
450452
self.outfile = outfile
451453
if dpi is None:
452454
dpi = self.fig.dpi
453455
self.dpi = dpi
454456
self._adjust_frame_size()
457+
root, _ = os.path.splitext(outfile)
458+
if frame_dir is None:
459+
frame_dir = '_' + root + '_frames'
460+
if not os.path.exists(frame_dir) and frame_dir is not '':
461+
os.makedirs(frame_dir)
462+
self.temp_prefix = os.path.join(frame_dir, frame_prefix)
455463

456464
self.clear_temp = clear_temp
457-
self.temp_prefix = frame_prefix
458465
self._frame_counter = 0 # used for generating sequential file names
459466
self._temp_names = list()
460467
self.fname_format_str = '%s%%07d.%s'
@@ -542,6 +549,9 @@ def cleanup(self):
542549
self._temp_names)
543550
for fname in self._temp_names:
544551
os.remove(fname)
552+
folder = os.path.split(fname)[0]
553+
if folder is not '':
554+
os.rmdir(folder)
545555

546556

547557
@writers.register('pillow')
@@ -597,7 +607,10 @@ class FFMpegBase(object):
597607

598608
@property
599609
def output_args(self):
600-
args = ['-vcodec', self.codec]
610+
if self.codec is not '':
611+
args = ['-vcodec', self.codec]
612+
else:
613+
args = []
601614
# For h264, the default format is yuv444p, which is not compatible
602615
# with quicktime (and others). Specifying yuv420p fixes playback on
603616
# iOS,as well as HTML5 video in firefox and safari (on both Win and
@@ -665,8 +678,7 @@ def _args(self):
665678
# Returns the command line parameters for subprocess to use
666679
# ffmpeg to create a movie using a collection of temp images
667680
return [self.bin_path(), '-r', str(self.fps),
668-
'-i', self._base_temp_name(),
669-
'-vframes', str(self._frame_counter)] + self.output_args
681+
'-i', self._base_temp_name()] + self.output_args
670682

671683

672684
# Base class of avconv information. AVConv has identical arguments to FFMpeg.
@@ -855,13 +867,13 @@ def setup(self, fig, outfile, dpi, frame_dir=None):
855867
if not self.embed_frames:
856868
if frame_dir is None:
857869
frame_dir = root + '_frames'
858-
if not os.path.exists(frame_dir):
859-
os.makedirs(frame_dir)
860-
frame_prefix = os.path.join(frame_dir, 'frame')
870+
frame_prefix = 'frame'
861871
else:
862-
frame_prefix = None
872+
frame_dir = ''
873+
frame_prefix = 'None'
863874

864-
super().setup(fig, outfile, dpi, frame_prefix, clear_temp=False)
875+
super().setup(fig, outfile, dpi, frame_prefix, clear_temp=False,
876+
frame_dir=frame_dir)
865877

866878
def grab_frame(self, **savefig_kwargs):
867879
if self.embed_frames:

0 commit comments

Comments
 (0)