Added --closest-resolution flag
This commit is contained in:
parent
35dfeb8f7d
commit
49d2dcffd2
@ -126,7 +126,7 @@ def get_cdm(log, service, profile=None, cdm_name=None):
|
||||
|
||||
def get_service_config(service):
|
||||
"""Get both service config and service secrets as one merged dictionary."""
|
||||
print(filenames.service_config.format(service=service.lower()))
|
||||
#print(filenames.service_config.format(service=service.lower())) # This line is probably where the error while loading config under Linux originates #TO-DO
|
||||
service_config = load_yaml(filenames.service_config.format(service=service.lower()))
|
||||
|
||||
user_config = (load_yaml(filenames.user_service_config.format(service=service.lower())) or load_yaml(filenames.user_service_config.format(service=service)))
|
||||
@ -195,6 +195,8 @@ def get_credentials(service, profile="default"):
|
||||
help="Profile to use when multiple profiles are defined for a service.")
|
||||
@click.option("-q", "--quality", callback=quality_param, default=None,
|
||||
help="Download Resolution, defaults to best available.")
|
||||
@click.option("-cr", "--closest-resolution", is_flag=True, default=False,
|
||||
help="If resolution specified not found, defaults to closest resolution available")
|
||||
@click.option("-v", "--vcodec", callback=vcodec_param, default="H264",
|
||||
help="Video Codec, defaults to H264.")
|
||||
@click.option("-a", "--acodec", callback=acodec_param, default=None,
|
||||
@ -306,7 +308,7 @@ def dl(ctx, profile, cdm, *_, **__):
|
||||
|
||||
@dl.result_callback()
|
||||
@click.pass_context
|
||||
def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs_only, chapters_only, audio_description,
|
||||
def result(ctx, service, quality, closest_resolution, range_, wanted, alang, slang, audio_only, subs_only, chapters_only, audio_description,
|
||||
list_, keys, cache, no_cache, no_subs, no_audio, no_video, no_chapters, atmos, vbitrate: int, abitrate: int, no_mux, mux, selected, latest_episode, *_, **__):
|
||||
def ccextractor():
|
||||
log.info("Extracting EIA-608 captions from stream with CCExtractor")
|
||||
@ -390,6 +392,16 @@ def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs
|
||||
title.tracks.print()
|
||||
|
||||
try:
|
||||
# Modified video track selection to choose closest resolution if exact match not found
|
||||
if quality and closest_resolution:
|
||||
available_resolutions = [int(track.height) for track in title.tracks.videos]
|
||||
if not available_resolutions:
|
||||
log.error(" - No video tracks available")
|
||||
continue
|
||||
if quality not in available_resolutions:
|
||||
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")
|
||||
quality = closest_res
|
||||
#title.tracks.select_videos(by_quality=quality, 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)
|
||||
@ -507,6 +519,9 @@ def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs
|
||||
session_id=session_id
|
||||
)
|
||||
assert license
|
||||
# Convert bytes to string if necessary
|
||||
if isinstance(license, bytes):
|
||||
license_response = license_response.decode('utf-8')
|
||||
ctx.obj.cdm.parse_license(
|
||||
session_id,
|
||||
license
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user