mirror of
https://github.com/gabehf/Tdarr_Plugins.git
synced 2026-03-16 18:45:53 -07:00
Migz Plugins
1. Made changes to all plugins following lint testing. There are still various warnings/errors but my very limited knowledge of javascript means I just don't understand what the errors mean. Or in some cases I don't understand how to split the variable across several lines to confirm to the line limits. I did manage to get it from 952 problems (943 errors, 9 warnings) down to 37 problems (28 errors, 9 warnings) 2. Fix Flawed logic in FFMPEG plugins which would cause remux conditions to never trigger. Was checking if file was HEVC & VP9 which is impossible as they're both codecs. 3. Fixed a bug with CleanTitle where plugin would fail if a stream in the file didn't have a title. 4. Modify CleanSubtitle plugin to not remove sdh subtitles. 5. Include new plugin to just perform remuxes. Mainly aimed at remuxing to mkv or mp4.
This commit is contained in:
parent
e9370ffe7c
commit
864cf41f1d
10 changed files with 1136 additions and 882 deletions
|
|
@ -1,124 +1,131 @@
|
|||
/* eslint-disable */
|
||||
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
|
||||
function details() {
|
||||
return {
|
||||
id: "Tdarr_Plugin_MC93_Migz4CleanSubs",
|
||||
Stage: "Pre-processing",
|
||||
Name: "Migz-Clean subtitle streams",
|
||||
Type: "subtitles",
|
||||
Operation: "Clean",
|
||||
Description: `This plugin keeps only specified language subtitle tracks & can tag those that have an unknown language. \n\n`,
|
||||
Version: "2.3",
|
||||
Link:
|
||||
"https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/Community/Tdarr_Plugin_MC93_Migz4CleanSubs.js",
|
||||
Tags: "pre-processing,ffmpeg,subtitle only,configurable",
|
||||
Inputs: [
|
||||
{
|
||||
name: "language",
|
||||
tooltip: `Specify language tag/s here for the subtitle tracks you'd like to keep. Must follow ISO-639-2 3 letter format. https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
|
||||
\\nExample:\\n
|
||||
eng
|
||||
id: 'Tdarr_Plugin_MC93_Migz4CleanSubs',
|
||||
Stage: 'Pre-processing',
|
||||
Name: 'Migz-Clean subtitle streams',
|
||||
Type: 'subtitles',
|
||||
Operation: 'Clean',
|
||||
Description: 'This plugin keeps only specified language tracks & can tag tracks with an unknown language. \n\n',
|
||||
Version: '2.4',
|
||||
Link: 'https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/Community/Tdarr_Plugin_MC93_Migz4CleanSubs.js',
|
||||
Tags: 'pre-processing,ffmpeg,subtitle only,configurable',
|
||||
Inputs: [{
|
||||
name: 'language',
|
||||
tooltip: `Specify language tag/s here for the subtitle tracks you'd like to keep.
|
||||
\\nMust follow ISO-639-2 3 letter format. https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
|
||||
\\nExample:\\n
|
||||
eng
|
||||
|
||||
\\nExample:\\n
|
||||
eng,jap`,
|
||||
},
|
||||
{
|
||||
name: "commentary",
|
||||
tooltip: `Specify if subtitle tracks that contain commentary/description should be removed.
|
||||
\\nExample:\\n
|
||||
true
|
||||
\\nExample:\\n
|
||||
eng,jap`,
|
||||
},
|
||||
{
|
||||
name: 'commentary',
|
||||
tooltip: `Specify if subtitle tracks that contain commentary/description should be removed.
|
||||
\\nExample:\\n
|
||||
true
|
||||
|
||||
\\nExample:\\n
|
||||
false`,
|
||||
},
|
||||
{
|
||||
name: "tag_language",
|
||||
tooltip: `Specify a single language for subtitle tracks with no language or unknown language to be tagged with, leave empty to disable. Must follow ISO-639-2 3 letter format. https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
|
||||
\\nExample:\\n
|
||||
eng
|
||||
\\nExample:\\n
|
||||
false`,
|
||||
},
|
||||
{
|
||||
name: 'tag_language',
|
||||
tooltip: `Specify a single language for subtitle tracks with no language or unknown language to be tagged with.
|
||||
\\nMust follow ISO-639-2 3 letter format. https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
|
||||
\\nLeave empty to disable.
|
||||
\\nExample:\\n
|
||||
eng
|
||||
|
||||
\\nExample:\\n
|
||||
por`,
|
||||
},
|
||||
\\nExample:\\n
|
||||
por`,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
function plugin(file, librarySettings, inputs) {
|
||||
var response = {
|
||||
const response = {
|
||||
processFile: false,
|
||||
preset: "",
|
||||
container: "." + file.container,
|
||||
preset: '',
|
||||
container: `.${file.container}`,
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: false,
|
||||
infoLog: "",
|
||||
infoLog: '',
|
||||
};
|
||||
|
||||
// Check if file is a video. If it isn't then exit plugin.
|
||||
if (file.fileMedium !== "video") {
|
||||
console.log("File is not video");
|
||||
response.infoLog += "☒File is not video \n";
|
||||
if (file.fileMedium !== 'video') {
|
||||
console.log('File is not video');
|
||||
response.infoLog += '☒File is not video \n';
|
||||
response.processFile = false;
|
||||
return response;
|
||||
}
|
||||
|
||||
// Check if inputs.language has been configured. If it hasn't then exit plugin.
|
||||
if (inputs.language == "") {
|
||||
response.infoLog +=
|
||||
"☒Language/s keep have not been configured within plugin settings, please configure required options. Skipping this plugin. \n";
|
||||
if (inputs.language === '') {
|
||||
response.infoLog += '☒Language/s to keep have not been configured, please configure required options. Skipping this plugin. \n';
|
||||
response.processFile = false;
|
||||
return response;
|
||||
}
|
||||
|
||||
// Set up required variables.
|
||||
var language = inputs.language.split(",");
|
||||
var ffmpegCommandInsert = "";
|
||||
var subtitleIdx = 0;
|
||||
var convert = false;
|
||||
const language = inputs.language.split(',');
|
||||
let ffmpegCommandInsert = '';
|
||||
let subtitleIdx = 0;
|
||||
let convert = false;
|
||||
|
||||
// Go through each stream in the file.
|
||||
for (var i = 0; i < file.ffProbeData.streams.length; i++) {
|
||||
for (let i = 0; i < file.ffProbeData.streams.length; i++) {
|
||||
// Catch error here incase the language metadata is completely missing.
|
||||
try {
|
||||
// Check if stream is subtitle AND checks if the tracks language code does not match any of the languages entered in inputs.language.
|
||||
// Check if stream is subtitle
|
||||
// AND checks if the tracks language code does not match any of the languages entered in inputs.language.
|
||||
if (
|
||||
file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle" &&
|
||||
language.indexOf(
|
||||
file.ffProbeData.streams[i].tags.language.toLowerCase()
|
||||
file.ffProbeData.streams[i].codec_type.toLowerCase() === 'subtitle'
|
||||
&& language.indexOf(
|
||||
file.ffProbeData.streams[i].tags.language.toLowerCase(),
|
||||
) === -1
|
||||
) {
|
||||
ffmpegCommandInsert += `-map -0:s:${subtitleIdx} `;
|
||||
response.infoLog += `☒Subtitle stream detected as being an unwanted language, removing. Subtitle stream 0:s:${subtitleIdx} - ${file.ffProbeData.streams[
|
||||
i
|
||||
].tags.language.toLowerCase()} \n`;
|
||||
response.infoLog += `☒Subtitle stream detected as being unwanted, removing. Stream 0:s:${subtitleIdx} \n`;
|
||||
convert = true;
|
||||
}
|
||||
} catch (err) {}
|
||||
} catch (err) {
|
||||
// Error
|
||||
}
|
||||
|
||||
// Catch error here incase the title metadata is completely missing.
|
||||
try {
|
||||
// Check if inputs.commentary is set to true AND if stream is subtitle AND then checks for stream titles with the following "commentary, description, sdh". Removing any streams that are applicable.
|
||||
// Check if inputs.commentary is set to true
|
||||
// AND if stream is subtitle
|
||||
// AND then checks for stream titles with the following "commentary or description".
|
||||
// Removing any streams that are applicable.
|
||||
if (
|
||||
inputs.commentary.toLowerCase() == "true" &&
|
||||
file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle" &&
|
||||
(file.ffProbeData.streams[i].tags.title
|
||||
inputs.commentary.toLowerCase() === 'true'
|
||||
&& file.ffProbeData.streams[i].codec_type.toLowerCase() === 'subtitle'
|
||||
&& (file.ffProbeData.streams[i].tags.title
|
||||
.toLowerCase()
|
||||
.includes("commentary") ||
|
||||
file.ffProbeData.streams[i].tags.title
|
||||
.includes('commentary')
|
||||
|| file.ffProbeData.streams[i].tags.title
|
||||
.toLowerCase()
|
||||
.includes("description") ||
|
||||
file.ffProbeData.streams[i].tags.title.toLowerCase().includes("sdh"))
|
||||
.includes('description'))
|
||||
) {
|
||||
ffmpegCommandInsert += `-map -0:s:${subtitleIdx} `;
|
||||
response.infoLog += `☒Subtitle stream detected as being Commentary or Description, removing. Subtitle stream 0:s:${subtitleIdx} - ${file.ffProbeData.streams[i].tags.title}. \n`;
|
||||
response.infoLog += `☒Subtitle stream detected as being descriptive, removing. Stream 0:s:${subtitleIdx} \n`;
|
||||
convert = true;
|
||||
}
|
||||
} catch (err) {}
|
||||
} catch (err) {
|
||||
// Error
|
||||
}
|
||||
|
||||
// Check if inputs.tag_language has something entered (Entered means user actually wants something to happen, empty would disable this) AND checks that stream is subtitle.
|
||||
// Check if inputs.tag_language has something entered.
|
||||
// (Entered means user actually wants something to happen, empty would disable this)
|
||||
// AND checks that stream is subtitle.
|
||||
if (
|
||||
inputs.tag_language != "" &&
|
||||
file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle"
|
||||
inputs.tag_language !== ''
|
||||
&& file.ffProbeData.streams[i].codec_type.toLowerCase() === 'subtitle'
|
||||
) {
|
||||
// Catch error here incase the metadata is completely missing.
|
||||
try {
|
||||
|
|
@ -126,33 +133,36 @@ function plugin(file, librarySettings, inputs) {
|
|||
if (
|
||||
file.ffProbeData.streams[i].tags.language
|
||||
.toLowerCase()
|
||||
.includes("und")
|
||||
.includes('und')
|
||||
) {
|
||||
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_language} `;
|
||||
response.infoLog += `☒Subtitle stream detected as having unknown language tagged, tagging as ${inputs.tag_language}. \n`;
|
||||
response.infoLog += `☒Subtitle stream detected as having no language, tagging as ${inputs.tag_language}. \n`;
|
||||
convert = true;
|
||||
}
|
||||
} catch (err) {}
|
||||
|
||||
// Checks if the tags metadata is completely missing, if so this would cause playback to show language as "undefined". No catch error here otherwise it would never detect the metadata as missing.
|
||||
if (typeof file.ffProbeData.streams[i].tags == "undefined") {
|
||||
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_language} `;
|
||||
response.infoLog += `☒Subtitle stream detected as having no language tagged, tagging as ${inputs.tag_language}. \n`;
|
||||
convert = true;
|
||||
} catch (err) {
|
||||
// Error
|
||||
}
|
||||
// Checks if the tags.language metadata is completely missing, if so this would cause playback to show language as "undefined". No catch error here otherwise it would never detect the metadata as missing.
|
||||
else {
|
||||
if (typeof file.ffProbeData.streams[i].tags.language == "undefined") {
|
||||
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_language} `;
|
||||
response.infoLog += `☒Subtitle stream detected as having no language tagged, tagging as ${inputs.tag_language}. \n`;
|
||||
convert = true;
|
||||
}
|
||||
|
||||
// Checks if the tags metadata is completely missing.
|
||||
// If so this would cause playback to show language as "undefined".
|
||||
// No catch error here otherwise it would never detect the metadata as missing.
|
||||
if (typeof file.ffProbeData.streams[i].tags === 'undefined') {
|
||||
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_language} `;
|
||||
response.infoLog += `☒Subtitle stream detected as having no language, tagging as ${inputs.tag_language}. \n`;
|
||||
convert = true;
|
||||
} else if (typeof file.ffProbeData.streams[i].tags.language === 'undefined') {
|
||||
// Checks if the tags.language metadata is completely missing.
|
||||
// If so this would cause playback to show language as "undefined".
|
||||
// No catch error here otherwise it would never detect the metadata as missing
|
||||
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_language} `;
|
||||
response.infoLog += `☒Subtitle stream detected as having no language, tagging as ${inputs.tag_language}. \n`;
|
||||
convert = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if stream type is subtitle and increment subtitleIdx if true.
|
||||
if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle") {
|
||||
subtitleIdx++;
|
||||
if (file.ffProbeData.streams[i].codec_type.toLowerCase() === 'subtitle') {
|
||||
subtitleIdx += 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -160,12 +170,11 @@ function plugin(file, librarySettings, inputs) {
|
|||
if (convert === true) {
|
||||
response.processFile = true;
|
||||
response.preset = `, -map 0 ${ffmpegCommandInsert} -c copy -max_muxing_queue_size 9999`;
|
||||
response.container = "." + file.container;
|
||||
response.container = `.${file.container}`;
|
||||
response.reQueueAfter = true;
|
||||
} else {
|
||||
response.processFile = false;
|
||||
response.infoLog +=
|
||||
"☑File doesn't contain subtitle tracks which are unwanted or that require tagging.\n";
|
||||
response.infoLog += "☑File doesn't contain subtitle tracks which are unwanted or that require tagging.\n";
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue