[FEATURE] resolution_assert_ignore_titles to ignore specific low-resolution videos
This commit is contained in:
parent
0c34f819de
commit
4e81116fb6
4 changed files with 83 additions and 1 deletions
|
|
@ -287,3 +287,8 @@ tell yt-dlp to explicitly download English metadata using.
|
||||||
:alt:
|
:alt:
|
||||||
The Plex Agents settings page has Local Media Assets enabled for Personal Media
|
The Plex Agents settings page has Local Media Assets enabled for Personal Media
|
||||||
Shows and Movies tabs.
|
Shows and Movies tabs.
|
||||||
|
|
||||||
|
...ytdl-sub errors when downloading a 360p video with resolution assert
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
:ref:`See how to either ignore this specific video or disable resolution assertion entirely here. <resolution assert handling>`
|
||||||
|
|
|
||||||
|
|
@ -176,3 +176,21 @@ following overrides:
|
||||||
enable_resolution_assert: false
|
enable_resolution_assert: false
|
||||||
# Change the resolution below which to assume downloading is throttled:
|
# Change the resolution below which to assume downloading is throttled:
|
||||||
resolution_assert_height_gte: 720
|
resolution_assert_height_gte: 720
|
||||||
|
|
||||||
|
.. _resolution assert handling:
|
||||||
|
|
||||||
|
Handling Low Quality Videos
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A side effect from throttle protection's resolution assert is, if the only resolution available is 360p or lower, it will
|
||||||
|
error. You can either disable resolution assert entirely (see above), or ignore specific titles in the subscription
|
||||||
|
using the ``resolution_assert_ignore_titles`` variable. Add a subset of the title (case-sensitive) as a list entry
|
||||||
|
to your subscription, like so:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
# use tilda mode to set override variables to the subscription
|
||||||
|
"~My Subscription":
|
||||||
|
url: "https://youtube.com/@channel"
|
||||||
|
resolution_assert_ignore_titles:
|
||||||
|
- "This 360p Video Title"
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,16 @@ presets:
|
||||||
-1
|
-1
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
# list variable that contains partial titles to ignore
|
||||||
|
resolution_assert_ignore_titles: "{ [] }"
|
||||||
|
resolution_assert_is_ignored: >-
|
||||||
|
{
|
||||||
|
%print_if_true(
|
||||||
|
%concat(title, " has a match in resolution_assert_ignore_titles, skipping resolution assert."),
|
||||||
|
%contains_any(title, resolution_assert_ignore_titles)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
resolution_readable: "{width}x{height}"
|
resolution_readable: "{width}x{height}"
|
||||||
# height is not a guaranteed populated variable, do not assert if it's missing (which defaults to 0)
|
# height is not a guaranteed populated variable, do not assert if it's missing (which defaults to 0)
|
||||||
resolution_assert: >-
|
resolution_assert: >-
|
||||||
|
|
@ -54,7 +64,8 @@ presets:
|
||||||
%if(
|
%if(
|
||||||
%and(
|
%and(
|
||||||
enable_resolution_assert,
|
enable_resolution_assert,
|
||||||
%ne( height, 0 )
|
%ne( height, 0 ),
|
||||||
|
%not(resolution_assert_is_ignored)
|
||||||
),
|
),
|
||||||
%assert(
|
%assert(
|
||||||
%gte( height, resolution_assert_height_gte ),
|
%gte( height, resolution_assert_height_gte ),
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,54 @@ class TestResolutionAssert:
|
||||||
):
|
):
|
||||||
_ = subscription.download(dry_run=True)
|
_ = subscription.download(dry_run=True)
|
||||||
|
|
||||||
|
def test_ignore_title_low_resolution(
|
||||||
|
self,
|
||||||
|
config,
|
||||||
|
subscription_name,
|
||||||
|
throttle_subscription_dict,
|
||||||
|
output_directory,
|
||||||
|
mock_download_collection_entries,
|
||||||
|
):
|
||||||
|
throttle_subscription_dict["throttle_protection"]["max_downloads_per_subscription"] = {
|
||||||
|
"max": 1,
|
||||||
|
"min": 1,
|
||||||
|
}
|
||||||
|
throttle_subscription_dict["overrides"]["resolution_assert_ignore_titles"] = [
|
||||||
|
"Entry 20-3",
|
||||||
|
]
|
||||||
|
subscription = Subscription.from_dict(
|
||||||
|
config=config,
|
||||||
|
preset_name=subscription_name,
|
||||||
|
preset_dict=throttle_subscription_dict,
|
||||||
|
)
|
||||||
|
|
||||||
|
# expected_message = (
|
||||||
|
# "Entry Mock Entry 20-3 downloaded at a low resolution (640x360), "
|
||||||
|
# "you've probably been throttled. "
|
||||||
|
# "Stopping further downloads, wait a few hours and try again. "
|
||||||
|
# "Disable using the override variable `enable_resolution_assert: False`"
|
||||||
|
# )
|
||||||
|
|
||||||
|
with (
|
||||||
|
mock_download_collection_entries(
|
||||||
|
is_youtube_channel=False,
|
||||||
|
num_urls=1,
|
||||||
|
is_extracted_audio=False,
|
||||||
|
is_dry_run=True,
|
||||||
|
mock_entry_kwargs={"height": 360, "width": 640},
|
||||||
|
),
|
||||||
|
assert_logs(
|
||||||
|
logger=script_print_logger,
|
||||||
|
expected_message=(
|
||||||
|
"Mock Entry 20-3 has a match in resolution_assert_ignore_titles, "
|
||||||
|
"skipping resolution assert."
|
||||||
|
),
|
||||||
|
log_level="info",
|
||||||
|
expected_occurrences=1,
|
||||||
|
),
|
||||||
|
):
|
||||||
|
_ = subscription.download(dry_run=True)
|
||||||
|
|
||||||
def test_sleep_per_download_supports_entry_variables(
|
def test_sleep_per_download_supports_entry_variables(
|
||||||
self,
|
self,
|
||||||
config,
|
config,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue