8000 Let MovieFileWriter save the files in a new dir · matplotlib/matplotlib@22a9d12 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

8000
Appearance settings

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)
0