aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/YoutubeDL.py8
-rw-r--r--yt_dlp/__init__.py1
-rw-r--r--yt_dlp/options.py8
3 files changed, 16 insertions, 1 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index ea4c5ae2d..29c9ecd16 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -310,6 +310,8 @@ class YoutubeDL(object):
file that is in the archive.
break_on_reject: Stop the download process when encountering a video that
has been filtered out.
+ break_per_url: Whether break_on_reject and break_on_existing
+ should act on each input URL as opposed to for the entire queue
cookiefile: File name where cookies should be read from and dumped to
cookiesfrombrowser: A tuple containing the name of the browser and the profile
name/path from where cookies are loaded.
@@ -2968,9 +2970,13 @@ class YoutubeDL(object):
res = func(*args, **kwargs)
except UnavailableVideoError as e:
self.report_error(e)
- except DownloadCancelled as e:
+ except MaxDownloadsReached as e:
self.to_screen(f'[info] {e}')
raise
+ except DownloadCancelled as e:
+ self.to_screen(f'[info] {e}')
+ if not self.params.get('break_per_url'):
+ raise
else:
if self.params.get('dump_single_json', False):
self.post_extract(res)
diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py
index 38959d930..d56c55b56 100644
--- a/yt_dlp/__init__.py
+++ b/yt_dlp/__init__.py
@@ -701,6 +701,7 @@ def _real_main(argv=None):
'download_archive': download_archive_fn,
'break_on_existing': opts.break_on_existing,
'break_on_reject': opts.break_on_reject,
+ 'break_per_url': opts.break_per_url,
'skip_playlist_after_errors': opts.skip_playlist_after_errors,
'cookiefile': opts.cookiefile,
'cookiesfrombrowser': opts.cookiesfrombrowser,
diff --git a/yt_dlp/options.py b/yt_dlp/options.py
index 0843d5ff7..4c1920404 100644
--- a/yt_dlp/options.py
+++ b/yt_dlp/options.py
@@ -450,6 +450,14 @@ def parseOpts(overrideArguments=None):
action='store_true', dest='break_on_reject', default=False,
help='Stop the download process when encountering a file that has been filtered out')
selection.add_option(
+ '--break-per-input',
+ action='store_true', dest='break_per_url', default=False,
+ help='Make --break-on-existing and --break-on-reject act only on the current input URL')
+ selection.add_option(
+ '--no-break-per-input',
+ action='store_false', dest='break_per_url',
+ help='--break-on-existing and --break-on-reject terminates the entire download queue')
+ selection.add_option(
'--skip-playlist-after-errors', metavar='N',
dest='skip_playlist_after_errors', default=None, type=int,
help='Number of allowed failures until the rest of the playlist is skipped')