projects
/
youtube-dl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
295df4e
)
[downloader/external] Add support for custom options (Fixes #4885, closes #5098)
author
Philipp Hagemeister
<phihag@phihag.de>
Mon, 2 Mar 2015 14:06:09 +0000
(15:06 +0100)
committer
Philipp Hagemeister
<phihag@phihag.de>
Mon, 2 Mar 2015 17:21:31 +0000
(18:21 +0100)
youtube_dl/YoutubeDL.py
patch
|
blob
|
history
youtube_dl/__init__.py
patch
|
blob
|
history
youtube_dl/downloader/common.py
patch
|
blob
|
history
youtube_dl/downloader/external.py
patch
|
blob
|
history
youtube_dl/options.py
patch
|
blob
|
history
diff --git
a/youtube_dl/YoutubeDL.py
b/youtube_dl/YoutubeDL.py
index 15367c4e36edbdd52c2fbf2096913dc7bb08b658..e0baa98727b758538bfb66ee47d3207b02f1bc8e 100755
(executable)
--- a/
youtube_dl/YoutubeDL.py
+++ b/
youtube_dl/YoutubeDL.py
@@
-249,10
+249,10
@@
class YoutubeDL(object):
hls_prefer_native: Use the native HLS downloader instead of ffmpeg/avconv.
The following parameters are not used by YoutubeDL itself, they are used by
hls_prefer_native: Use the native HLS downloader instead of ffmpeg/avconv.
The following parameters are not used by YoutubeDL itself, they are used by
- the
FileDownloader
:
+ the
downloader (see youtube_dl/downloader/common.py)
:
nopart, updatetime, buffersize, ratelimit, min_filesize, max_filesize, test,
noresizebuffer, retries, continuedl, noprogress, consoletitle,
nopart, updatetime, buffersize, ratelimit, min_filesize, max_filesize, test,
noresizebuffer, retries, continuedl, noprogress, consoletitle,
- xattr_set_filesize.
+ xattr_set_filesize
, external_downloader_args
.
The following options are used by the post processors:
prefer_ffmpeg: If True, use ffmpeg instead of avconv if both are available,
The following options are used by the post processors:
prefer_ffmpeg: If True, use ffmpeg instead of avconv if both are available,
diff --git
a/youtube_dl/__init__.py
b/youtube_dl/__init__.py
index 49f382695d478acad6892cbec3079d41eba64685..6056da1be873284f696f651d24da1043a9f1d304 100644
(file)
--- a/
youtube_dl/__init__.py
+++ b/
youtube_dl/__init__.py
@@
-9,6
+9,7
@@
import codecs
import io
import os
import random
import io
import os
import random
+import shlex
import sys
import sys
@@
-255,6
+256,9
@@
def _real_main(argv=None):
xattr # Confuse flake8
except ImportError:
parser.error('setting filesize xattr requested but python-xattr is not available')
xattr # Confuse flake8
except ImportError:
parser.error('setting filesize xattr requested but python-xattr is not available')
+ external_downloader_args = None
+ if opts.external_downloader_args:
+ external_downloader_args = shlex.split(opts.external_downloader_args)
match_filter = (
None if opts.match_filter is None
else match_filter_func(opts.match_filter))
match_filter = (
None if opts.match_filter is None
else match_filter_func(opts.match_filter))
@@
-359,6
+363,7
@@
def _real_main(argv=None):
'no_color': opts.no_color,
'ffmpeg_location': opts.ffmpeg_location,
'hls_prefer_native': opts.hls_prefer_native,
'no_color': opts.no_color,
'ffmpeg_location': opts.ffmpeg_location,
'hls_prefer_native': opts.hls_prefer_native,
+ 'external_downloader_args': external_downloader_args,
}
with YoutubeDL(ydl_opts) as ydl:
}
with YoutubeDL(ydl_opts) as ydl:
diff --git
a/youtube_dl/downloader/common.py
b/youtube_dl/downloader/common.py
index 3ae90021a28e661ab532a2d42a7c4e0826d1f46f..8ed5c19a6b8079c9807faa4fa7a505a398974975 100644
(file)
--- a/
youtube_dl/downloader/common.py
+++ b/
youtube_dl/downloader/common.py
@@
-42,6
+42,8
@@
class FileDownloader(object):
max_filesize: Skip files larger than this size
xattr_set_filesize: Set ytdl.filesize user xattribute with expected size.
(experimenatal)
max_filesize: Skip files larger than this size
xattr_set_filesize: Set ytdl.filesize user xattribute with expected size.
(experimenatal)
+ external_downloader_args: A list of additional command-line arguments for the
+ external downloader.
Subclasses of this one must re-define the real_download method.
"""
Subclasses of this one must re-define the real_download method.
"""
diff --git
a/youtube_dl/downloader/external.py
b/youtube_dl/downloader/external.py
index 51c41c70462674ee3a07aae6f645c06ae7c88c71..1673b2382af545e1ec8f4ef81bc8656555e388fb 100644
(file)
--- a/
youtube_dl/downloader/external.py
+++ b/
youtube_dl/downloader/external.py
@@
-51,6
+51,13
@@
class ExternalFD(FileDownloader):
return []
return [command_option, source_address]
return []
return [command_option, source_address]
+ def _configuration_args(self, default=[]):
+ ex_args = self.params.get('external_downloader_args')
+ if ex_args is None:
+ return default
+ assert isinstance(ex_args, list)
+ return ex_args
+
def _call_downloader(self, tmpfilename, info_dict):
""" Either overwrite this or implement _make_cmd """
cmd = self._make_cmd(tmpfilename, info_dict)
def _call_downloader(self, tmpfilename, info_dict):
""" Either overwrite this or implement _make_cmd """
cmd = self._make_cmd(tmpfilename, info_dict)
@@
-79,6
+86,7
@@
class CurlFD(ExternalFD):
for key, val in info_dict['http_headers'].items():
cmd += ['--header', '%s: %s' % (key, val)]
cmd += self._source_address('--interface')
for key, val in info_dict['http_headers'].items():
cmd += ['--header', '%s: %s' % (key, val)]
cmd += self._source_address('--interface')
+ cmd += self._configuration_args()
cmd += ['--', info_dict['url']]
return cmd
cmd += ['--', info_dict['url']]
return cmd
@@
-89,15
+97,16
@@
class WgetFD(ExternalFD):
for key, val in info_dict['http_headers'].items():
cmd += ['--header', '%s: %s' % (key, val)]
cmd += self._source_address('--bind-address')
for key, val in info_dict['http_headers'].items():
cmd += ['--header', '%s: %s' % (key, val)]
cmd += self._source_address('--bind-address')
+ cmd += self._configuration_args()
cmd += ['--', info_dict['url']]
return cmd
class Aria2cFD(ExternalFD):
def _make_cmd(self, tmpfilename, info_dict):
cmd += ['--', info_dict['url']]
return cmd
class Aria2cFD(ExternalFD):
def _make_cmd(self, tmpfilename, info_dict):
- cmd = [
- self.exe, '-c',
- '--min-split-size', '1M', '--max-connection-per-server', '4']
+ cmd = [
self.exe, '-c']
+ cmd += self._configuration_args([
+ '--min-split-size', '1M', '--max-connection-per-server', '4']
)
dn = os.path.dirname(tmpfilename)
if dn:
cmd += ['--dir', dn]
dn = os.path.dirname(tmpfilename)
if dn:
cmd += ['--dir', dn]
diff --git
a/youtube_dl/options.py
b/youtube_dl/options.py
index a2ffe96bcfc6973ef2e31e5012e3ddbf0f63fe55..df2be7b74fe9d534459d8929e49de7195f132a62 100644
(file)
--- a/
youtube_dl/options.py
+++ b/
youtube_dl/options.py
@@
-435,8
+435,12
@@
def parseOpts(overrideArguments=None):
downloader.add_option(
'--external-downloader',
dest='external_downloader', metavar='COMMAND',
downloader.add_option(
'--external-downloader',
dest='external_downloader', metavar='COMMAND',
- help='
(experimental)
Use the specified external downloader. '
+ 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.')
workarounds = optparse.OptionGroup(parser, 'Workarounds')
workarounds.add_option(
workarounds = optparse.OptionGroup(parser, 'Workarounds')
workarounds.add_option(