diff --git a/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js b/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js index 98388e7..07fc898 100644 --- a/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js +++ b/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js @@ -5,14 +5,34 @@ function details() { Name: "Migz-Clean title metadata", Type: "Video", Operation: "Clean", - Description: `This plugin removes title metadata from video/audio/subtitles, if it exists. \n\n`, - Version: "1.10", + 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.20", Link: "https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js", - Tags:'pre-processing,ffmpeg', + 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` + }, + ] } } -function plugin(file) { +function plugin(file, librarySettings, inputs) { var response = { processFile : false, preset : '', @@ -23,7 +43,7 @@ function plugin(file) { infoLog : '', } - + var ffmpegCommandInsert = '' var videoIdx = 0 var audioIdx = 0 @@ -36,47 +56,43 @@ function plugin(file) { response.processFile = false; return response } - - try { - if (typeof file.meta.Title != 'undefined' ){ + + if (typeof file.meta.Title != 'undefined') try { ffmpegCommandInsert += ` -metadata title="" ` - response.infoLog += "1" convert = true - } - } catch (err) { } - - for (var i = 0; i < file.ffProbeData.streams.length; i++) { + } catch (err) { } + + for (var i = 0; i < file.ffProbeData.streams.length; i++) try { if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "video") { - try { - if (typeof file.ffProbeData.streams[i].tags.title != 'undefined') { - ffmpegCommandInsert += ` -metadata:s:v:${videoIdx} title="" ` - convert = true - } - } catch (err) { } + 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 + } videoIdx++ } - if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "audio") { - try { - if (typeof file.ffProbeData.streams[i].tags.title != 'undefined') { - ffmpegCommandInsert += ` -metadata:s:a:${audioIdx} title="" ` - convert = true - } - } catch (err) { } + + 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 subtitle title, likely to be junk metadata. Removing title from stream ${i} \n` + ffmpegCommandInsert += ` -metadata:s:a:${audioIdx} title="" ` + convert = true + } audioIdx++ } - if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle") { - try { - if (typeof file.ffProbeData.streams[i].tags.title != 'undefined') { - ffmpegCommandInsert += ` -metadata:s:s:${subtitleIdx} title="" ` - convert = true - } - } catch (err) { } + + 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 + } subtitleIdx++ } - } - - if (convert == true){ - response.infoLog += "☒File has title metadata \n" + } catch (err) { } + + if (convert == true) { + response.infoLog += "☒File has title metadata. Removing \n" response.preset = `,${ffmpegCommandInsert} -c copy` response.reQueueAfter = true; response.processFile = true; @@ -87,4 +103,4 @@ function plugin(file) { } module.exports.details = details; -module.exports.plugin = plugin; \ No newline at end of file +module.exports.plugin = plugin;