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', Type: 'Audio',
Operation: 'Transcode', Operation: 'Transcode',
Description: 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', Version: '1.0',
Tags: 'pre-processing,ffmpeg,audio only,configurable', Tags: 'pre-processing,ffmpeg,audio only,configurable',
Inputs: [{ Inputs: [{
@ -55,23 +55,26 @@ const details = () => ({
// Set up required variables. // Set up required variables.
let ffmpegCommandInsert = ''; let ffmpegCommandInsert = '';
let audioIdx = 0; let audioIdx = 0;
let firstAudioInLangIdx = -1;
let convert = false; let convert = false;
let foundAudioInLang = false;
let defaults = [] // list of tracks currently set as default 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++) { for (let i = 0; i < file.ffProbeData.streams.length; i++) {
try { try {
if (file.ffProbeData.streams[i].codec_type.toLowerCase() === 'audio') { if (file.ffProbeData.streams[i].codec_type.toLowerCase() === 'audio') {
defaults[audioIdx] = file.ffProbeData.streams[i].disposition.default === 1 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)) { // if we find an audio in the lang
convert = true; if (languages.includes(file.ffProbeData.streams[i].tags.language)) {
ffmpegCommandInsert += `-disposition:a:${audioIdx} default `; // mark the id and break
response.infoLog += `☒Audio stream 0:a:${audioIdx} is the first track in preferred language and not currently default; setting as default. \n`; firstAudioInLangIdx = audioIdx;
} else if (file.ffProbeData.streams[i].disposition.default === 1 && languages.includes(file.ffProbeData.streams[i].tags.language)) { break;
// if any audio with the preferred language is marked default, no action is needed. }
convert = false;
response.infoLog = '';
break;
}
audioIdx += 1; audioIdx += 1;
} }
} catch (err) { } catch (err) {
@ -79,15 +82,23 @@ const details = () => ({
} }
} }
if (convert) { // remove overlapping default(s)
// remove previous default(s) for (let i = 0; i < defaults.length; i++) {
for (let i = 0; i < defaults.length; i++) { if (firstAudioInLangIdx === -1) {
if (defaults[i]) { // we never found an audio track in lang, just break
ffmpegCommandInsert += `-disposition:a:${i} 0 `; break;
response.infoLog += `☒Audio stream 0:a:${i} was default but not in preferred language; removing disposition. \n`; } 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. // Convert file if convert variable is set to true.
if (convert === true) { if (convert === true) {

Loading…
Cancel
Save