Browse Source

YoutubeDL: Make the decision about removing the original file after each postprocessor is run (fixes #2261)

If one of the processors said the file should be kept, it wouldn't pay
attention to the response from the following processors. This was wrong if the
'keep_video' option was False, if the first extractor modifies the original file
and then we extract its audio we don't want to keep the original video file.
Jaime Marquínez Ferrándiz 11 years ago
parent
commit
f3ff1a3696
1 changed files with 9 additions and 8 deletions
  1. 9 8
      youtube_dl/YoutubeDL.py

+ 9 - 8
youtube_dl/YoutubeDL.py

@@ -1235,14 +1235,15 @@ class YoutubeDL(object):
         """Run all the postprocessors on the given file."""
         """Run all the postprocessors on the given file."""
         info = dict(ie_info)
         info = dict(ie_info)
         info['filepath'] = filename
         info['filepath'] = filename
-        keep_video = None
         pps_chain = []
         pps_chain = []
         if ie_info.get('__postprocessors') is not None:
         if ie_info.get('__postprocessors') is not None:
             pps_chain.extend(ie_info['__postprocessors'])
             pps_chain.extend(ie_info['__postprocessors'])
         pps_chain.extend(self._pps)
         pps_chain.extend(self._pps)
         for pp in pps_chain:
         for pp in pps_chain:
+            keep_video = None
+            old_filename = info['filepath']
             try:
             try:
-                keep_video_wish, new_info = pp.run(info)
+                keep_video_wish, info = pp.run(info)
                 if keep_video_wish is not None:
                 if keep_video_wish is not None:
                     if keep_video_wish:
                     if keep_video_wish:
                         keep_video = keep_video_wish
                         keep_video = keep_video_wish
@@ -1251,12 +1252,12 @@ class YoutubeDL(object):
                         keep_video = keep_video_wish
                         keep_video = keep_video_wish
             except PostProcessingError as e:
             except PostProcessingError as e:
                 self.report_error(e.msg)
                 self.report_error(e.msg)
-        if keep_video is False and not self.params.get('keepvideo', False):
-            try:
-                self.to_screen('Deleting original file %s (pass -k to keep)' % filename)
-                os.remove(encodeFilename(filename))
-            except (IOError, OSError):
-                self.report_warning('Unable to remove downloaded video file')
+            if keep_video is False and not self.params.get('keepvideo', False):
+                try:
+                    self.to_screen('Deleting original file %s (pass -k to keep)' % old_filename)
+                    os.remove(encodeFilename(old_filename))
+                except (IOError, OSError):
+                    self.report_warning('Unable to remove downloaded video file')
 
 
     def _make_archive_id(self, info_dict):
     def _make_archive_id(self, info_dict):
         # Future-proof against any change in case
         # Future-proof against any change in case