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.
152 lines
6.0 KiB
152 lines
6.0 KiB
function details() {
|
|
return {
|
|
id: "Tdarr_Plugin_MC93_Migz2CleanTitle",
|
|
Stage: "Pre-processing",
|
|
Name: "Migz-Clean title metadata",
|
|
Type: "Video",
|
|
Operation: "Clean",
|
|
Description: `This plugin removes title metadata from video/audio/subtitles, if it exists. Video checking is mandatory, audio and subtitles are optional.\n\n`,
|
|
Version: "1.6",
|
|
Link:
|
|
"https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js",
|
|
Tags: "pre-processing,ffmpeg,configurable",
|
|
Inputs: [
|
|
{
|
|
name: "clean_audio",
|
|
tooltip: `Specify if audio titles should be checked & cleaned. Optional.
|
|
\\nExample:\\n
|
|
true
|
|
|
|
\\nExample:\\n
|
|
false`,
|
|
},
|
|
{
|
|
name: "clean_subtitles",
|
|
tooltip: `Specify if subtitle titles should be checked & cleaned. Optional.
|
|
\\nExample:\\n
|
|
true
|
|
|
|
\\nExample:\\n
|
|
false`,
|
|
},
|
|
{
|
|
name: "custom_title_matching",
|
|
tooltip: `By default if you enable audio or subtitle cleaning the plugin only looks for titles with more then 3 full stops, this is what i think is the safest way to identify junk metadata without removing real metadata that you might want to keep. Here you can specify your own text for it to also search for to match and remove. Comma separated. Optional.
|
|
\\nExample:\\n
|
|
MiNX - Small HD episodes
|
|
|
|
\\nExample:\\n
|
|
MiNX - Small HD episodes,GalaxyTV - small excellence!`,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
|
|
function plugin(file, librarySettings, inputs) {
|
|
var response = {
|
|
processFile: false,
|
|
preset: "",
|
|
container: "." + file.container,
|
|
handBrakeMode: false,
|
|
FFmpegMode: true,
|
|
reQueueAfter: false,
|
|
infoLog: "",
|
|
};
|
|
|
|
// Set up required variables.
|
|
|
|
var ffmpegCommandInsert = "";
|
|
var videoIdx = 0;
|
|
var audioIdx = 0;
|
|
var subtitleIdx = 0;
|
|
var convert = false;
|
|
|
|
// Check if inputs.custom_title_matching has been configured. If it has then set variable
|
|
if (inputs.custom_title_matching != "")
|
|
try {
|
|
var custom_title_matching = inputs.custom_title_matching.toLowerCase().split(",");
|
|
} catch (err) {}
|
|
|
|
// 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";
|
|
response.processFile = false;
|
|
return response;
|
|
}
|
|
|
|
// Check if overall file metadata title is not empty, if it's not empty set to "".
|
|
if (typeof file.meta.Title != "undefined")
|
|
try {
|
|
ffmpegCommandInsert += ` -metadata title="" `;
|
|
convert = true;
|
|
} catch (err) {}
|
|
|
|
// Go through each stream in the file.
|
|
for (var i = 0; i < file.ffProbeData.streams.length; i++)
|
|
try {
|
|
// Check if stream is a video.
|
|
if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "video") {
|
|
// Check if stream title is not empty, if it's not empty set to "".
|
|
if (typeof file.ffProbeData.streams[i].tags.title != "undefined") {
|
|
response.infoLog += `☒Video stream title is not empty, most likely junk metadata. Removing title from stream ${i} \n`;
|
|
ffmpegCommandInsert += ` -metadata:s:v:${videoIdx} title="" `;
|
|
convert = true;
|
|
}
|
|
// Increment videoIdx.
|
|
videoIdx++;
|
|
}
|
|
|
|
// Check if title metadata of audio stream has more then 3 full stops. If so then it's likely to be junk metadata so remove. Then check if any audio streams match with user input custom_title_matching variable, if so then remove.
|
|
if (
|
|
file.ffProbeData.streams[i].codec_type.toLowerCase() == "audio" &&
|
|
inputs.clean_audio.toLowerCase() == "true"
|
|
) {
|
|
if (file.ffProbeData.streams[i].tags.title.split(".").length - 1 > 3) {
|
|
response.infoLog += `☒More then 3 full stops detected in audio title, likely to be junk metadata. Removing title from stream ${i} \n`;
|
|
ffmpegCommandInsert += ` -metadata:s:a:${audioIdx} title="" `;
|
|
convert = true;
|
|
}
|
|
if (custom_title_matching.indexOf(file.ffProbeData.streams[i].tags.title.toLowerCase()) !== -1) {
|
|
response.infoLog += `☒Audio matched custom input. Removing title from stream ${i} \n`;
|
|
ffmpegCommandInsert += ` -metadata:s:a:${audioIdx} title="" `;
|
|
convert = true;
|
|
}
|
|
// Increment audioIdx.
|
|
audioIdx++;
|
|
}
|
|
|
|
// Check if title metadata of subtitle stream has more then 3 full stops. If so then it's likely to be junk metadata so remove. Then check if any audio streams match with user input custom_title_matching variable, if so then remove.
|
|
if (
|
|
file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle" &&
|
|
inputs.clean_subtitles.toLowerCase() == "true"
|
|
) {
|
|
if (file.ffProbeData.streams[i].tags.title.split(".").length - 1 > 3) {
|
|
response.infoLog += `☒More then 3 full stops detected in subtitle title, likely to be junk metadata. Removing title from stream ${i} \n`;
|
|
ffmpegCommandInsert += ` -metadata:s:s:${subtitleIdx} title="" `;
|
|
convert = true;
|
|
}
|
|
if (custom_title_matching.indexOf(file.ffProbeData.streams[i].tags.title.toLowerCase()) !== -1) {
|
|
response.infoLog += `☒Subtitle matched custom input. Removing title from stream ${i} \n`;
|
|
ffmpegCommandInsert += ` -metadata:s:s:${subtitleIdx} title="" `;
|
|
convert = true;
|
|
}
|
|
// Increment subtitleIdx.
|
|
subtitleIdx++;
|
|
}
|
|
} catch (err) {}
|
|
|
|
// Convert file if convert variable is set to true.
|
|
if (convert == true) {
|
|
response.infoLog += "☒File has title metadata. Removing \n";
|
|
response.preset = `,${ffmpegCommandInsert} -c copy -map 0 -max_muxing_queue_size 9999`;
|
|
response.reQueueAfter = true;
|
|
response.processFile = true;
|
|
} else {
|
|
response.infoLog += "☑File has no title metadata \n";
|
|
}
|
|
return response;
|
|
}
|
|
module.exports.details = details;
|
|
module.exports.plugin = plugin;
|