api/youtube: fix dubbed audio track matching

This commit is contained in:
wukko
2024-10-28 23:05:56 +06:00
parent 3a0b0fed8b
commit e081751c59

View File

@ -203,7 +203,7 @@ export default async function(o) {
return resolution.height > resolution.width ? resolution.width : resolution.height; return resolution.height > resolution.width ? resolution.width : resolution.height;
} }
let video, audio, isDubbed, let video, audio, dubbedLanguage,
format = o.format || "h264"; format = o.format || "h264";
if (o.youtubeHLS) { if (o.youtubeHLS) {
@ -271,11 +271,11 @@ export default async function(o) {
if (o.dubLang) { if (o.dubLang) {
const dubbedAudio = selected.audio.find(i => const dubbedAudio = selected.audio.find(i =>
i.language === o.dubLang i.language.startsWith(o.dubLang)
); );
if (dubbedAudio && !dubbedAudio.isDefault) { if (dubbedAudio && !dubbedAudio.isDefault) {
isDubbed = true; dubbedLanguage = dubbedAudio.language;
audio = dubbedAudio; audio = dubbedAudio;
} }
} }
@ -297,7 +297,7 @@ export default async function(o) {
let adaptive_formats = filterByCodec(info.streaming_data.adaptive_formats); let adaptive_formats = filterByCodec(info.streaming_data.adaptive_formats);
const checkBestVideo = (i) => (i.has_video && i.content_length); const checkBestVideo = (i) => (i.has_video && i.content_length);
const checkBestAudio = (i) => (i.has_audio && i.content_length && i.is_original); const checkBestAudio = (i) => (i.has_audio && i.content_length);
const checkNoMedia = (vid, aud) => (!vid && !o.isAudioOnly) || (!aud && o.isAudioOnly); const checkNoMedia = (vid, aud) => (!vid && !o.isAudioOnly) || (!aud && o.isAudioOnly);
const earlyBestVideo = adaptive_formats.find(i => checkBestVideo(i)); const earlyBestVideo = adaptive_formats.find(i => checkBestVideo(i));
@ -319,14 +319,20 @@ export default async function(o) {
audio = bestAudio; audio = bestAudio;
if (audio?.audio_track && !audio?.audio_track?.audio_is_default) {
audio = adaptive_formats.find(i =>
checkBestAudio(i) && i?.audio_track?.audio_is_default
);
}
if (o.dubLang) { if (o.dubLang) {
const dubbedAudio = adaptive_formats.find(i => const dubbedAudio = adaptive_formats.find(i =>
checkBestAudio(i) && i.language === o.dubLang && i.audio_track checkBestAudio(i) && i.language?.startsWith(o.dubLang) && i.audio_track
) )
if (dubbedAudio && !dubbedAudio?.audio_track?.audio_is_default) { if (dubbedAudio && !dubbedAudio?.audio_track?.audio_is_default) {
audio = dubbedAudio; audio = dubbedAudio;
isDubbed = true; dubbedLanguage = dubbedAudio.language;
} }
} }
@ -369,7 +375,7 @@ export default async function(o) {
id: o.id, id: o.id,
title: fileMetadata.title, title: fileMetadata.title,
author: fileMetadata.artist, author: fileMetadata.artist,
youtubeDubName: isDubbed ? o.dubLang : false youtubeDubName: dubbedLanguage || false,
} }
if (audio && o.isAudioOnly) { if (audio && o.isAudioOnly) {