Răsfoiți Sursa

Added "min-filesize" and "max-filesize" options

Jeff Crouse 12 ani în urmă
părinte
comite
9e982f9e4e
3 a modificat fișierele cu 29 adăugiri și 0 ștergeri
  1. 2 0
      README.md
  2. 11 0
      youtube_dl/FileDownloader.py
  3. 16 0
      youtube_dl/__init__.py

+ 2 - 0
README.md

@@ -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
     --reject-title REGEX     skip download for matching titles (regex or
                              caseless sub-string)
                              caseless sub-string)
     --max-downloads NUMBER   Abort after downloading NUMBER files
     --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:
 ## Filesystem Options:
     -t, --title              use title in file name
     -t, --title              use title in file name

+ 11 - 0
youtube_dl/FileDownloader.py

@@ -82,6 +82,8 @@ class FileDownloader(object):
     subtitleslang:     Language of the subtitles to download
     subtitleslang:     Language of the subtitles to download
     test:              Download only first bytes to test the downloader.
     test:              Download only first bytes to test the downloader.
     keepvideo:         Keep the video file after post-processing
     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
     params = None
@@ -712,6 +714,15 @@ class FileDownloader(object):
         data_len = data.info().get('Content-length', None)
         data_len = data.info().get('Content-length', None)
         if data_len is not None:
         if data_len is not None:
             data_len = int(data_len) + resume_len
             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)
         data_len_str = self.format_bytes(data_len)
         byte_counter = 0 + resume_len
         byte_counter = 0 + resume_len
         block_size = self.params.get('buffersize', 1024)
         block_size = self.params.get('buffersize', 1024)

+ 16 - 0
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('--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('--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',
     authentication.add_option('-u', '--username',
             dest='username', metavar='USERNAME', help='account username')
             dest='username', metavar='USERNAME', help='account username')
     authentication.add_option('-p', '--password',
     authentication.add_option('-p', '--password',
@@ -349,6 +353,16 @@ def _real_main():
         if numeric_limit is None:
         if numeric_limit is None:
             parser.error(u'invalid rate limit specified')
             parser.error(u'invalid rate limit specified')
         opts.ratelimit = numeric_limit
         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:
     if opts.retries is not None:
         try:
         try:
             opts.retries = int(opts.retries)
             opts.retries = int(opts.retries)
@@ -438,6 +452,8 @@ def _real_main():
         'verbose': opts.verbose,
         'verbose': opts.verbose,
         'test': opts.test,
         'test': opts.test,
         'keepvideo': opts.keepvideo,
         'keepvideo': opts.keepvideo,
+        'min_filesize': opts.min_filesize,
+        'max_filesize': opts.max_filesize
         })
         })
 
 
     if opts.verbose:
     if opts.verbose: