fix set first audio in lang default

main
Gabe Farrell 9 months ago
parent 1b1481e706
commit c2ce2eee11

@ -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) {

Loading…
Cancel
Save