mirror of
https://github.com/gabehf/Tdarr_Plugins.git
synced 2026-03-09 15:38:19 -07:00
1) New plugin that uses CPU to convert to H265. 2) Change to FFMPEG NVidia plugin to specifiy bitrate cutoff. 3) Fix random infolog "2" in CleanTitle 4) Update descriptive audio check in CleanAudio and CleanSubs to look for "sdh" 5) Correct OrderStreams mentioning that "Audio not first" when audio should be second.
126 lines
5 KiB
JavaScript
126 lines
5 KiB
JavaScript
function details() {
|
|
return {
|
|
id: "Tdarr_Plugin_MC93_Migz4CleanSubs",
|
|
Stage: "Pre-processing",
|
|
Name: "Migz-Clean subtitle streams",
|
|
Type: "subtitless",
|
|
Operation: "Clean",
|
|
Description: `[TESTING] This plugin keeps only specified language subtitle tracks & can tag those that have an unknown language. \n\n`,
|
|
Version: "2.00",
|
|
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
|
|
|
|
\\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_title',
|
|
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
|
|
por`
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
function plugin(file, librarySettings, inputs) {
|
|
var response = {
|
|
processFile: false,
|
|
preset: '',
|
|
container: '.' + file.container,
|
|
handBrakeMode: false,
|
|
FFmpegMode: true,
|
|
reQueueAfter: false,
|
|
infoLog: '',
|
|
}
|
|
|
|
if (file.fileMedium !== "video") {
|
|
console.log("File is not video")
|
|
response.infoLog += "☒File is not video \n"
|
|
response.processFile = false;
|
|
return response
|
|
}
|
|
|
|
if (inputs.language == "") {
|
|
response.infoLog += "☒Language/s keep have not been configured within plugin settings, please configure required options. Skipping this plugin. \n"
|
|
response.processFile = false;
|
|
return response
|
|
}
|
|
|
|
var language = inputs.language.split(",")
|
|
var ffmpegCommandInsert = ''
|
|
var subtitleIdx = -1
|
|
var convert = false
|
|
|
|
for (var i = 0; i < file.ffProbeData.streams.length; i++) {
|
|
try {
|
|
if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle") {
|
|
subtitleIdx++
|
|
}
|
|
} catch (err) { }
|
|
|
|
try {
|
|
if (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`
|
|
convert = true
|
|
}
|
|
} catch (err) { }
|
|
|
|
try {
|
|
if (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.toLowerCase().includes('description') || file.ffProbeData.streams[i].tags.title.toLowerCase().includes('sdh'))) {
|
|
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`
|
|
convert = true
|
|
}
|
|
} catch (err) { }
|
|
|
|
try {
|
|
if (inputs.tag_title != "") {
|
|
if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle" && file.ffProbeData.streams[i].tags.language.toLowerCase().includes('und')) {
|
|
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_title} `
|
|
response.infoLog += `☒Subtitle stream detected as having unknown language tagged, tagging as ${inputs.tag_title}. \n`
|
|
convert = true
|
|
}
|
|
}
|
|
} catch (err) { }
|
|
|
|
try {
|
|
if (typeof file.ffProbeData.streams[i].tags.language == 'undefined' && file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle") {
|
|
ffmpegCommandInsert += `-metadata:s:s:${subtitleIdx} language=${inputs.tag_title} `
|
|
response.infoLog += `☒Subtitle stream detected as having no language tagged, tagging as ${inputs.tag_title}. \n`
|
|
convert = true
|
|
}
|
|
} catch (err) { }
|
|
}
|
|
if (convert === true ) {
|
|
response.processFile = true;
|
|
response.preset = `, -map 0 ${ffmpegCommandInsert} -c copy`
|
|
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"
|
|
}
|
|
return response
|
|
}
|
|
module.exports.details = details;
|
|
module.exports.plugin = plugin;
|