[downloader/external] wrap available_opt in a list
[youtube-dl] / youtube_dl / downloader / external.py
index a4fdf1af8053a2d3215cdbcc2f2333ba61d7807c..daedf66de0016076a579ce15d53ca71b39cfceb6 100644 (file)
@@ -6,7 +6,7 @@ import sys
 import re
 
 from .common import FileDownloader
-from ..postprocessor.ffmpeg import FFmpegPostProcessor
+from ..postprocessor.ffmpeg import FFmpegPostProcessor, EXT_TO_OUT_FORMATS
 from ..compat import compat_str
 from ..utils import (
     cli_option,
@@ -53,7 +53,7 @@ class ExternalFD(FileDownloader):
 
     @classmethod
     def available(cls):
-        return check_executable(cls.get_basename(), cls.available_opt)
+        return check_executable(cls.get_basename(), [cls.AVAILABLE_OPT])
 
     @classmethod
     def supports(cls, info_dict):
@@ -86,7 +86,7 @@ class ExternalFD(FileDownloader):
 
 
 class CurlFD(ExternalFD):
-    available_opt = ['-V']
+    AVAILABLE_OPT = '-V'
 
     def _make_cmd(self, tmpfilename, info_dict):
         cmd = [self.exe, '--location', '-o', tmpfilename]
@@ -101,7 +101,7 @@ class CurlFD(ExternalFD):
 
 
 class AxelFD(ExternalFD):
-    available_opt = ['-V']
+    AVAILABLE_OPT = '-V'
 
     def _make_cmd(self, tmpfilename, info_dict):
         cmd = [self.exe, '-o', tmpfilename]
@@ -113,7 +113,7 @@ class AxelFD(ExternalFD):
 
 
 class WgetFD(ExternalFD):
-    available_opt = ['--version']
+    AVAILABLE_OPT = '--version'
 
     def _make_cmd(self, tmpfilename, info_dict):
         cmd = [self.exe, '-O', tmpfilename, '-nv', '--no-cookies']
@@ -128,7 +128,7 @@ class WgetFD(ExternalFD):
 
 
 class Aria2cFD(ExternalFD):
-    available_opt = ['-v']
+    AVAILABLE_OPT = '-v'
 
     def _make_cmd(self, tmpfilename, info_dict):
         cmd = [self.exe, '-c']
@@ -162,7 +162,7 @@ class HttpieFD(ExternalFD):
 class FFmpegFD(ExternalFD):
     @classmethod
     def supports(cls, info_dict):
-        return info_dict['protocol'] in ('http', 'https', 'ftp', 'ftps', 'm3u8', 'rtsp', 'rtmp', 'mms')
+        return info_dict['protocol'] in ('http', 'https', 'ftp', 'ftps', 'm3u8', 'rtsp', 'rtmp', 'mms') and not info_dict.get('requested_formats')
 
     @classmethod
     def available(cls):
@@ -197,7 +197,7 @@ class FFmpegFD(ExternalFD):
             else:
                 args += ['-f', 'mp4', '-bsf:a', 'aac_adtstoasc']
         else:
-            args += ['-f', info_dict['ext']]
+            args += ['-f', EXT_TO_OUT_FORMATS.get(info_dict['ext'], info_dict['ext'])]
 
         args = [encodeArgument(opt) for opt in args]
         args.append(encodeFilename(ffpp._ffmpeg_filename_argument(tmpfilename), True))