forked from kenzuya/unshackle
fix(dl): keep descriptive and standard audio for requested langs
When --audio-description is set, keep standard selections and include descriptive tracks for requested languages, including --a-lang with orig and best selection paths. Fixes #72
This commit is contained in:
@@ -1462,27 +1462,40 @@ class dl:
|
||||
if "best" in processed_lang:
|
||||
unique_languages = {track.language for track in title.tracks.audio}
|
||||
selected_audio = []
|
||||
if acodec and len(acodec) > 1:
|
||||
for language in unique_languages:
|
||||
for codec in acodec:
|
||||
candidates = [
|
||||
track
|
||||
for track in title.tracks.audio
|
||||
if track.language == language and track.codec == codec
|
||||
codecs_to_check = acodec if (acodec and len(acodec) > 1) else [None]
|
||||
for codec in codecs_to_check:
|
||||
base_candidates = [
|
||||
t
|
||||
for t in title.tracks.audio
|
||||
if t.language == language and (codec is None or t.codec == codec)
|
||||
]
|
||||
if not candidates:
|
||||
if not base_candidates:
|
||||
continue
|
||||
selected_audio.append(max(candidates, key=lambda x: x.bitrate or 0))
|
||||
if audio_description:
|
||||
standards = [t for t in base_candidates if not t.descriptive]
|
||||
if standards:
|
||||
selected_audio.append(max(standards, key=lambda x: x.bitrate or 0))
|
||||
descs = [t for t in base_candidates if t.descriptive]
|
||||
if descs:
|
||||
selected_audio.append(max(descs, key=lambda x: x.bitrate or 0))
|
||||
else:
|
||||
for language in unique_languages:
|
||||
highest_quality = max(
|
||||
(track for track in title.tracks.audio if track.language == language),
|
||||
key=lambda x: x.bitrate or 0,
|
||||
)
|
||||
selected_audio.append(highest_quality)
|
||||
selected_audio.append(max(base_candidates, key=lambda x: x.bitrate or 0))
|
||||
title.tracks.audio = selected_audio
|
||||
elif "all" not in processed_lang:
|
||||
per_language = 0 if acodec and len(acodec) > 1 else 1
|
||||
if audio_description:
|
||||
standard_audio = [a for a in title.tracks.audio if not a.descriptive]
|
||||
selected_standards = title.tracks.by_language(
|
||||
standard_audio, processed_lang, per_language=per_language, exact_match=exact_lang
|
||||
)
|
||||
desc_audio = [a for a in title.tracks.audio if a.descriptive]
|
||||
# Include all descriptive tracks for the requested languages.
|
||||
selected_descs = title.tracks.by_language(
|
||||
desc_audio, processed_lang, per_language=0, exact_match=exact_lang
|
||||
)
|
||||
title.tracks.audio = selected_standards + selected_descs
|
||||
else:
|
||||
title.tracks.audio = title.tracks.by_language(
|
||||
title.tracks.audio, processed_lang, per_language=per_language, exact_match=exact_lang
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user