You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tdarr_Plugins/Community/Tdarr_Plugin_c0r1_SetDefaul...

124 lines
3.4 KiB

const lib = require('../methods/library');
/* eslint-disable */
const details = () => {
return {
id: "Tdarr_Plugin_c0r1_SetDefaultAudioStream",
Stage: "Pre-processing",
Name: "Set Default Audio Stream (Based On Channel Count)",
Type: "Audio",
Operation: "Transcode",
Description: `This plugin will set an audio channel (2.0, 5.1, 7.1) to default and remove default from all other audio streams \n\n`,
Version: "0.1.0a",
Tags: "audio only,ffmpeg,configurable",
Inputs: [
{
name: "channels",
type: 'string',
defaultValue:'2',
inputUI: {
type: 'text',
},
tooltip: `Desired audio channel number.
\\nExample:\\n
2
\\nExample:\\n
6
\\nExample:\\n
8`,
},
],
};
};
// eslint-disable-next-line no-unused-vars
const plugin = (file, librarySettings, inputs, otherArguments) => {
// eslint-disable-next-line no-unused-vars,no-param-reassign
inputs = lib.loadDefaultValues(inputs, details);
var response = {
processFile: false,
preset: "",
container: "." + file.container,
handBrakeMode: false,
FFmpegMode: true,
infoLog: "",
};
var shouldProcess = false;
var defaultAudioStreams = 0;
var matchingAudioStreams = 0;
var defaultSet = false;
var ffmpegCommandInsert = "";
// Check if default audio stream matches user's channel selection
for (var i = 0; i < file.ffProbeData.streams.length; i++) {
if (
file.ffProbeData.streams[i].codec_type.toLowerCase() === "audio" &&
file.ffProbeData.streams[i].channels == inputs.channels
) {
matchingAudioStreams++;
if (file.ffProbeData.streams[i].disposition.default === 1) {
defaultAudioStreams++;
}
}
}
// build command
for (var i = 0; i < file.ffProbeData.streams.length; i++) {
if (file.ffProbeData.streams[i].codec_type.toLowerCase() === "audio") {
if (file.ffProbeData.streams[i].channels == inputs.channels) {
if (!defaultSet) {
ffmpegCommandInsert += `-disposition:${i} default `;
defaultSet = true;
} else {
ffmpegCommandInsert += `-disposition:${i} 0 `;
}
} else {
ffmpegCommandInsert += `-disposition:${i} 0 `;
}
}
}
// Only process when there is a matching stream and
// when there is either no default or more than 1 default stream set
if (matchingAudioStreams >= 1 && defaultAudioStreams !== 1) {
shouldProcess = true;
response.infoLog += "☒ Matching audio stream is not set to default. \n";
}
if (shouldProcess) {
response.processFile = true;
response.reQueueAfter = true;
response.preset = `,-map 0 -c copy ${ffmpegCommandInsert}`;
response.infoLog +=
"☒ Setting " +
inputs.channels +
" channel matching audio stream to default. Remove default from all other audio streams \n";
} else {
if (matchingAudioStreams < 1) {
response.infoLog +=
"☑ No " + inputs.channels + " channel audio stream exists. \n ";
} else if (defaultAudioStreams === 1) {
response.infoLog +=
"☑ Default " +
inputs.channels +
" channel audio stream already exists. \n ";
} else {
response.infoLog += "☑ Unexpected: Did not process \n ";
}
response.processFile = false;
}
return response;
};
module.exports.details = details;
module.exports.plugin = plugin;