aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan@gmail.com>2021-01-23 11:29:20 +0530
committerpukkandan <pukkandan@gmail.com>2021-01-23 17:00:10 +0530
commit46ee996e39a38f912b81829ecdba5834910cd157 (patch)
treefbe3942505c5ae291e056a83ea6a2b8538fbb9d5
parent45016689fa9fe53418dcf5ce0431eb3b34426d28 (diff)
downloadhypervideo-pre-46ee996e39a38f912b81829ecdba5834910cd157.tar.lz
hypervideo-pre-46ee996e39a38f912b81829ecdba5834910cd157.tar.xz
hypervideo-pre-46ee996e39a38f912b81829ecdba5834910cd157.zip
Allow passing different arguments to different external downloaders
* Now similar to --post-processor-args * Also added `--downloader-args` as alias to `--external-downloader-args`
-rw-r--r--README.md13
-rw-r--r--youtube_dlc/__init__.py5
-rw-r--r--youtube_dlc/downloader/external.py14
-rw-r--r--youtube_dlc/options.py15
4 files changed, 32 insertions, 15 deletions
diff --git a/README.md b/README.md
index ebfad3781..2da25b200 100644
--- a/README.md
+++ b/README.md
@@ -303,11 +303,14 @@ Then simply type this
allowing to play the video while
downloading (some players may not be able
to play it)
- --external-downloader COMMAND Use the specified external downloader.
- Currently supports
- aria2c,avconv,axel,curl,ffmpeg,httpie,wget
- --external-downloader-args ARGS Give these arguments to the external
- downloader
+ --external-downloader NAME Use the specified external downloader.
+ Currently supports aria2c, avconv, axel,
+ curl, ffmpeg, httpie, wget
+ --downloader-args NAME:ARGS Give these arguments to the external
+ downloader. Specify the downloader name and
+ the arguments separated by a colon ":". You
+ can use this option multiple times (Alias:
+ --external-downloader-args)
## Filesystem Options:
-a, --batch-file FILE File containing URLs to download ('-' for
diff --git a/youtube_dlc/__init__.py b/youtube_dlc/__init__.py
index 01b1a347b..c58fb7563 100644
--- a/youtube_dlc/__init__.py
+++ b/youtube_dlc/__init__.py
@@ -326,9 +326,6 @@ def _real_main(argv=None):
'key': 'ExecAfterDownload',
'exec_cmd': opts.exec_cmd,
})
- external_downloader_args = None
- if opts.external_downloader_args:
- external_downloader_args = compat_shlex_split(opts.external_downloader_args)
if 'default-compat' in opts.postprocessor_args and 'default' not in opts.postprocessor_args:
opts.postprocessor_args.setdefault('sponskrub', [])
@@ -466,7 +463,7 @@ def _real_main(argv=None):
'ffmpeg_location': opts.ffmpeg_location,
'hls_prefer_native': opts.hls_prefer_native,
'hls_use_mpegts': opts.hls_use_mpegts,
- 'external_downloader_args': external_downloader_args,
+ 'external_downloader_args': opts.external_downloader_args,
'postprocessor_args': opts.postprocessor_args,
'cn_verification_proxy': opts.cn_verification_proxy,
'geo_verification_proxy': opts.geo_verification_proxy,
diff --git a/youtube_dlc/downloader/external.py b/youtube_dlc/downloader/external.py
index 8cd0511fc..2ae153f4a 100644
--- a/youtube_dlc/downloader/external.py
+++ b/youtube_dlc/downloader/external.py
@@ -95,7 +95,19 @@ class ExternalFD(FileDownloader):
return cli_valueless_option(self.params, command_option, param, expected_value)
def _configuration_args(self, default=[]):
- return cli_configuration_args(self.params, 'external_downloader_args', default)
+ args = self.params.get('external_downloader_args', {})
+ if isinstance(args, (list, tuple)): # for backward compatibility
+ return args
+ if args is None:
+ return default
+ assert isinstance(args, dict)
+
+ dl_args = args.get(self.get_basename().lower())
+ if dl_args is None:
+ dl_args = args.get('default', default)
+ assert isinstance(dl_args, (list, tuple))
+ return dl_args
+
def _call_downloader(self, tmpfilename, info_dict):
""" Either overwrite this or implement _make_cmd """
diff --git a/youtube_dlc/options.py b/youtube_dlc/options.py
index 3e7be1451..cb8e8c06d 100644
--- a/youtube_dlc/options.py
+++ b/youtube_dlc/options.py
@@ -632,14 +632,19 @@ def parseOpts(overrideArguments=None):
'video while downloading (some players may not be able to play it)'))
downloader.add_option(
'--external-downloader',
- dest='external_downloader', metavar='COMMAND',
+ dest='external_downloader', metavar='NAME',
help=(
'Use the specified external downloader. '
- 'Currently supports %s' % ','.join(list_external_downloaders())))
+ 'Currently supports %s' % ', '.join(list_external_downloaders())))
downloader.add_option(
- '--external-downloader-args',
- dest='external_downloader_args', metavar='ARGS',
- help='Give these arguments to the external downloader')
+ '--downloader-args', '--external-downloader-args',
+ metavar='NAME:ARGS', dest='external_downloader_args', default={}, type='str',
+ action='callback', callback=_dict_from_multiple_values_options_callback,
+ callback_kwargs={'default_key': 'default', 'process': compat_shlex_split},
+ help=(
+ 'Give these arguments to the external downloader. '
+ 'Specify the downloader name and the arguments separated by a colon ":". '
+ 'You can use this option multiple times (Alias: --external-downloader-args)'))
workarounds = optparse.OptionGroup(parser, 'Workarounds')
workarounds.add_option(