From bb85ac2767c45db84ed75347d7d885cc33fe5c56 Mon Sep 17 00:00:00 2001 From: kenzuyaa Date: Sat, 30 Aug 2025 01:14:34 +0700 Subject: [PATCH] fix(dl): add bitrate tolerance for video track selection - Implement bitrate selection with a tolerance of +100 kbps and -800 kbps - Ensure minimum bitrate does not go below 0 when calculating lower bound - Update error message to reflect bitrate range instead of exact value - Enhance logging for cases with no matching video tracks within tolerance range --- unshackle/commands/dl.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/unshackle/commands/dl.py b/unshackle/commands/dl.py index 91300ca..791cc09 100644 --- a/unshackle/commands/dl.py +++ b/unshackle/commands/dl.py @@ -640,9 +640,12 @@ class dl: self.log.warning(f"Skipping {color_range.name} video tracks as none are available.") if vbitrate: - title.tracks.select_video(lambda x: x.bitrate and x.bitrate // 1000 == vbitrate) + # Tolerance: +100 kbps (upper), -800 kbps (lower) + min_bitrate = max(0, vbitrate - 800) # Don't go below 0 + max_bitrate = vbitrate + 100 + title.tracks.select_video(lambda x: x.bitrate and min_bitrate <= x.bitrate // 1000 <= max_bitrate) if not title.tracks.videos: - self.log.error(f"There's no {vbitrate}kbps Video Track...") + self.log.error(f"There's no Video Track with bitrate between {min_bitrate}-{max_bitrate}kbps (requested {vbitrate}kbps)...") sys.exit(1) video_languages = [lang for lang in (v_lang or lang) if lang != "best"]