[postprocessor/ffmpeg] Add `can_merge` method
authorSergey M․ <dstftw@gmail.com>
Sun, 10 May 2015 20:00:31 +0000 (02:00 +0600)
committerSergey M․ <dstftw@gmail.com>
Sun, 10 May 2015 20:00:31 +0000 (02:00 +0600)
youtube_dl/postprocessor/ffmpeg.py

index 211faf69a6cfd6135416fb524ffb13e199cc4941..cc65b34e71a28cfb0947b9441d5dcc006baf47ba 100644 (file)
@@ -36,9 +36,7 @@ class FFmpegPostProcessor(PostProcessor):
     def check_version(self):
         if not self.available:
             raise FFmpegPostProcessorError('ffmpeg or avconv not found. Please install one.')
-        self.check_outdated()
 
-    def check_outdated(self):
         required_version = '10-0' if self.basename == 'avconv' else '1.0'
         if is_outdated_version(
                 self._versions[self.basename], required_version):
@@ -46,8 +44,6 @@ class FFmpegPostProcessor(PostProcessor):
                 self.basename, self.basename, required_version)
             if self._downloader:
                 self._downloader.report_warning(warning)
-            return True
-        return False
 
     @staticmethod
     def get_versions(downloader=None):
@@ -595,6 +591,23 @@ class FFmpegMergerPP(FFmpegPostProcessor):
         os.rename(encodeFilename(temp_filename), encodeFilename(filename))
         return info['__files_to_merge'], info
 
+    def can_merge(self):
+        # TODO: figure out merge-capable ffmpeg version
+        if self.basename != 'avconv':
+            return True
+
+        required_version = '10-0'
+        if is_outdated_version(
+                self._versions[self.basename], required_version):
+            warning = ('Your copy of %s is outdated and unable to properly mux separate video and audio files, '
+                       'youtube-dl will download single file media. '
+                       'Update %s to version %s or newer to fix this.') % (
+                           self.basename, self.basename, required_version)
+            if self._downloader:
+                self._downloader.report_warning(warning)
+            return False
+        return True
+
 
 class FFmpegFixupStretchedPP(FFmpegPostProcessor):
     def run(self, info):