@@ -424,7 +424,7 @@ def __init__(self, *args, **kwargs):
424
424
self .frame_format = rcParams ['animation.frame_format' ]
425
425
426
426
def setup (self , fig , outfile , dpi = None , frame_prefix = '_tmp' ,
427
- clear_temp = True ):
427
+ clear_temp = True , frame_dir = None ):
428
428
'''Perform setup for writing the movie file.
429
429
430
430
Parameters
@@ -444,17 +444,24 @@ def setup(self, fig, outfile, dpi=None, frame_prefix='_tmp',
444
444
If the temporary files should be deleted after stitching
445
445
the final result. Setting this to ``False`` can be useful for
446
446
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.
448
450
'''
449
451
self .fig = fig
450
452
self .outfile = outfile
451
453
if dpi is None :
452
454
dpi = self .fig .dpi
453
455
self .dpi = dpi
454
456
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 )
455
463
456
464
self .clear_temp = clear_temp
457
- self .temp_prefix = frame_prefix
458
465
self ._frame_counter = 0 # used for generating sequential file names
459
466
self ._temp_names = list ()
460
467
self .fname_format_str = '%s%%07d.%s'
@@ -542,6 +549,9 @@ def cleanup(self):
542
549
self ._temp_names )
543
550
for fname in self ._temp_names :
544
551
os .remove (fname )
552
+ folder = os .path .split (fname )[0 ]
553
+ if folder is not '' :
554
+ os .rmdir (folder )
545
555
546
556
547
557
@writers .register ('pillow' )
@@ -597,7 +607,10 @@ class FFMpegBase(object):
597
607
598
608
@property
599
609
def output_args (self ):
600
- args = ['-vcodec' , self .codec ]
610
+ if self .codec is not '' :
611
+ args = ['-vcodec' , self .codec ]
612
+ else :
613
+ args = []
601
614
# For h264, the default format is yuv444p, which is not compatible
602
615
# with quicktime (and others). Specifying yuv420p fixes playback on
603
616
# iOS,as well as HTML5 video in firefox and safari (on both Win and
@@ -665,8 +678,7 @@ def _args(self):
665
678
# Returns the command line parameters for subprocess to use
666
679
# ffmpeg to create a movie using a collection of temp images
667
680
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
670
682
671
683
672
684
# Base class of avconv information. AVConv has identical arguments to FFMpeg.
@@ -855,13 +867,13 @@ def setup(self, fig, outfile, dpi, frame_dir=None):
855
867
if not self .embed_frames :
856
868
if frame_dir is None :
857
869
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'
861
871
else :
862
- frame_prefix = None
872
+ frame_dir = ''
873
+ frame_prefix = 'None'
863
874
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 )
865
877
866
878
def grab_frame (self , ** savefig_kwargs ):
867
879
if self .embed_frames :
0 commit comments