diff --git a/Tdarr_Plugin_gabehf_Make_First_Audio_In_Lang_Default.js b/Tdarr_Plugin_gabehf_Make_First_Audio_In_Lang_Default.js index 8e453a7..e8d1228 100644 --- a/Tdarr_Plugin_gabehf_Make_First_Audio_In_Lang_Default.js +++ b/Tdarr_Plugin_gabehf_Make_First_Audio_In_Lang_Default.js @@ -6,7 +6,7 @@ const details = () => ({ Type: 'Audio', Operation: 'Transcode', Description: - 'If no audio in the preferred language are made default already, this plugin sets the first audio stream in that language as default. \\n', + 'Sets the first audio stream in preferred language as default, removing all other defaults if processed. \\n', Version: '1.0', Tags: 'pre-processing,ffmpeg,audio only,configurable', Inputs: [{ @@ -55,23 +55,26 @@ const details = () => ({ // Set up required variables. let ffmpegCommandInsert = ''; let audioIdx = 0; + let firstAudioInLangIdx = -1; let convert = false; + let foundAudioInLang = false; let defaults = [] // list of tracks currently set as default + + // 1, 2 jpn (default), 3 eng (default) + // [0,1,1] + // firstAudioIdx = 2 + // convert = false for (let i = 0; i < file.ffProbeData.streams.length; i++) { try { if (file.ffProbeData.streams[i].codec_type.toLowerCase() === 'audio') { - defaults[audioIdx] = file.ffProbeData.streams[i].disposition.default === 1 - if (!convert && file.ffProbeData.streams[i].disposition.default === 0 && languages.includes(file.ffProbeData.streams[i].tags.language)) { - convert = true; - ffmpegCommandInsert += `-disposition:a:${audioIdx} default `; - response.infoLog += `☒Audio stream 0:a:${audioIdx} is the first track in preferred language and not currently default; setting as default. \n`; - } else if (file.ffProbeData.streams[i].disposition.default === 1 && languages.includes(file.ffProbeData.streams[i].tags.language)) { - // if any audio with the preferred language is marked default, no action is needed. - convert = false; - response.infoLog = ''; - break; - } + defaults[audioIdx] = file.ffProbeData.streams[i].disposition.default === 1 + // if we find an audio in the lang + if (languages.includes(file.ffProbeData.streams[i].tags.language)) { + // mark the id and break + firstAudioInLangIdx = audioIdx; + break; + } audioIdx += 1; } } catch (err) { @@ -79,15 +82,23 @@ const details = () => ({ } } - if (convert) { - // remove previous default(s) - for (let i = 0; i < defaults.length; i++) { - if (defaults[i]) { - ffmpegCommandInsert += `-disposition:a:${i} 0 `; - response.infoLog += `☒Audio stream 0:a:${i} was default but not in preferred language; removing disposition. \n`; - } - } - } + // remove overlapping default(s) + for (let i = 0; i < defaults.length; i++) { + if (firstAudioInLangIdx === -1) { + // we never found an audio track in lang, just break + break; + } else if (firstAudioInLangIdx === i && defaults[i] === 0) { + convert = true; + ffmpegCommandInsert += `-disposition:a:${i} default `; + response.infoLog += `☒Audio stream 0:a:${i} is the first track in preferred language and not currently default; setting as default. \n`; + } else if (firstAudioInLangIdx === i && defaults[i] === 1) { + response.infoLog += `☒Audio stream 0:a:${i} is the first track in preferred language and alrady default. \n`; + } else if (defaults[i] === 1) { + convert = true; + ffmpegCommandInsert += `-disposition:a:${i} 0 `; + response.infoLog += `☒Audio stream 0:a:${i} is overlapping with new default audio track; removing disposition. \n`; + } + } // Convert file if convert variable is set to true. if (convert === true) {