mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	This commit is contained in:
		| @@ -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 | ||||
|     the FileDownloader: | ||||
|     the downloader (see youtube_dl/downloader/common.py): | ||||
|     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, | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import codecs | ||||
| import io | ||||
| import os | ||||
| import random | ||||
| import shlex | ||||
| 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') | ||||
|     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)) | ||||
| @@ -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, | ||||
|         'external_downloader_args': external_downloader_args, | ||||
|     } | ||||
|  | ||||
|     with YoutubeDL(ydl_opts) as ydl: | ||||
|   | ||||
| @@ -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) | ||||
|     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. | ||||
|     """ | ||||
|   | ||||
| @@ -51,6 +51,13 @@ class ExternalFD(FileDownloader): | ||||
|             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) | ||||
| @@ -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') | ||||
|         cmd += self._configuration_args() | ||||
|         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') | ||||
|         cmd += self._configuration_args() | ||||
|         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] | ||||
|   | ||||
| @@ -435,8 +435,12 @@ def parseOpts(overrideArguments=None): | ||||
|     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())) | ||||
|     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( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user