Added a minimum video bitrate select feature

This commit is contained in:
chu23465 2025-04-09 11:57:44 +05:30
parent d7b3b4ff81
commit dffb6afec9
3 changed files with 13 additions and 4 deletions

View File

@ -83,7 +83,7 @@ Options:
| -cr, --closest-resolution | If resolution specified is not found, defaults to closest resolution available | False | | -cr, --closest-resolution | If resolution specified is not found, defaults to closest resolution available | False |
| -v, --vcodec | Video Codec | H264 | | -v, --vcodec | Video Codec | H264 |
| -a, --acodec | Audio Codec | None | | -a, --acodec | Audio Codec | None |
| -vb, --vbitrate | Video Bitrate | Max | | -vb, --vbitrate | Video Bitrate, "Min" or a number based on --list | Max |
| -ab, --abitrate | Audio Bitrate | Max | | -ab, --abitrate | Audio Bitrate | Max |
| -aa, --atmos | Prefer Atmos Audio | False | | -aa, --atmos | Prefer Atmos Audio | False |
| -r, --range | Video Color Range `HDR`, `HDR10`, `DV`, `SDR` | SDR | | -r, --range | Video Color Range `HDR`, `HDR10`, `DV`, `SDR` | SDR |

View File

@ -201,7 +201,7 @@ def get_credentials(service, profile="default"):
help="Video Codec, defaults to H264.") help="Video Codec, defaults to H264.")
@click.option("-a", "--acodec", callback=acodec_param, default=None, @click.option("-a", "--acodec", callback=acodec_param, default=None,
help="Audio Codec") help="Audio Codec")
@click.option("-vb", "--vbitrate", "vbitrate", type=int, @click.option("-vb", "--vbitrate", "vbitrate", type=str,
default=None, default=None,
help="Video Bitrate, defaults to Max.") help="Video Bitrate, defaults to Max.")
@click.option("-ab", "--abitrate", "abitrate", type=int, @click.option("-ab", "--abitrate", "abitrate", type=int,
@ -402,10 +402,19 @@ def result(ctx, service, quality, closest_resolution, range_, wanted, alang, sla
closest_res = min(available_resolutions, key=lambda x: abs(x - quality)) closest_res = min(available_resolutions, key=lambda x: abs(x - quality))
log.warning(f" - No {quality}p resolution available, using closest available: {closest_res}p") log.warning(f" - No {quality}p resolution available, using closest available: {closest_res}p")
quality = closest_res quality = closest_res
#title.tracks.select_videos(by_quality=quality, by_range=range_, one_only=True)
# Modified video track selection to choose lowest bitrate if vbitrate == min
if vbitrate.lower() == "min":
available_bitrate = [int(track.bitrate) for track in title.tracks.videos]
if not available_resolutions:
log.error(" - No video tracks available")
continue
vbitrate = min(available_bitrate)
log.warning(f" - Choosing minimum bitrate: {vbitrate}")
else:
vbitrate = int(vbitrate)
title.tracks.select_videos(by_quality=quality, by_vbitrate=vbitrate, by_range=range_, one_only=True) title.tracks.select_videos(by_quality=quality, by_vbitrate=vbitrate, by_range=range_, one_only=True)
title.tracks.select_audios(by_language=alang, by_bitrate=abitrate, with_descriptive=audio_description) title.tracks.select_audios(by_language=alang, by_bitrate=abitrate, with_descriptive=audio_description)
# title.tracks.select_audios(by_language=alang, with_descriptive=audio_description)
title.tracks.select_subtitles(by_language=slang, with_forced=True) title.tracks.select_subtitles(by_language=slang, with_forced=True)
except ValueError as e: except ValueError as e:
log.error(f" - {e}") log.error(f" - {e}")

Binary file not shown.