diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | youtube_dl/FileDownloader.py | 11 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 16 | 
3 files changed, 29 insertions, 0 deletions
| @@ -38,6 +38,8 @@ which means you can modify it, redistribute it or use it however you like.      --reject-title REGEX     skip download for matching titles (regex or                               caseless sub-string)      --max-downloads NUMBER   Abort after downloading NUMBER files +    --min-filesize SIZE      Do not download any videos smaller than SIZE (e.g. 50k or 44.6m) +    --max-filesize SIZE      Do not download any videos larger than SIZE (e.g. 50k or 44.6m)  ## Filesystem Options:      -t, --title              use title in file name diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index e3131bbe6..49b032a1b 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -82,6 +82,8 @@ class FileDownloader(object):      subtitleslang:     Language of the subtitles to download      test:              Download only first bytes to test the downloader.      keepvideo:         Keep the video file after post-processing +    min_filesize:      Skip files smaller than this size +    max_filesize:      Skip files larger than this size      """      params = None @@ -712,6 +714,15 @@ class FileDownloader(object):          data_len = data.info().get('Content-length', None)          if data_len is not None:              data_len = int(data_len) + resume_len +            min_data_len = self.params.get("min_filesize", None) +            max_data_len =  self.params.get("max_filesize", None) +            if min_data_len is not None and data_len < min_data_len: +                self.to_screen(u'\r[download] File is smaller than min-filesize (%s bytes < %s bytes). Aborting.' % (data_len, min_data_len)) +                return False +            if max_data_len is not None and data_len > max_data_len: +                self.to_screen(u'\r[download] File is larger than max-filesize (%s bytes > %s bytes). Aborting.' % (data_len, max_data_len)) +                return False +          data_len_str = self.format_bytes(data_len)          byte_counter = 0 + resume_len          block_size = self.params.get('buffersize', 1024) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 10e9c8b8c..bdab38a4e 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -151,6 +151,10 @@ def parseOpts():      selection.add_option('--reject-title', dest='rejecttitle', metavar='REGEX',help='skip download for matching titles (regex or caseless sub-string)')      selection.add_option('--max-downloads', metavar='NUMBER', dest='max_downloads', help='Abort after downloading NUMBER files', default=None) +    selection.add_option('--min-filesize', metavar='SIZE', dest='min_filesize', help="Skip files smaller than this size", default=None) +    selection.add_option('--max-filesize', metavar='SIZE', dest='max_filesize', help="Skip files larger than this size", default=None) + +      authentication.add_option('-u', '--username',              dest='username', metavar='USERNAME', help='account username')      authentication.add_option('-p', '--password', @@ -349,6 +353,16 @@ def _real_main():          if numeric_limit is None:              parser.error(u'invalid rate limit specified')          opts.ratelimit = numeric_limit +    if opts.min_filesize is not None: +        numeric_limit = FileDownloader.parse_bytes(opts.min_filesize) +        if numeric_limit is None: +            parser.error(u'invalid min_filesize specified') +        opts.min_filesize = numeric_limit +    if opts.max_filesize is not None: +        numeric_limit = FileDownloader.parse_bytes(opts.max_filesize) +        if numeric_limit is None: +            parser.error(u'invalid max_filesize specified') +        opts.max_filesize = numeric_limit      if opts.retries is not None:          try:              opts.retries = int(opts.retries) @@ -438,6 +452,8 @@ def _real_main():          'verbose': opts.verbose,          'test': opts.test,          'keepvideo': opts.keepvideo, +        'min_filesize': opts.min_filesize, +        'max_filesize': opts.max_filesize          })      if opts.verbose: | 
