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.
217 lines
5.0 KiB
217 lines
5.0 KiB
/* eslint-disable */
|
|
const details = () => ({
|
|
id: "Tdarr_Plugin_075a_Transcode_Customisable",
|
|
Stage: "Pre-processing",
|
|
Name: "Video Transcode Customisable",
|
|
Type: "Video",
|
|
Operation: "Transcode",
|
|
Description: `[Contains built-in filter] Specify codec filter and transcode arguments for HandBrake or FFmpeg \n\n`,
|
|
Version: "1.00",
|
|
Tags: "pre-processing,handbrake,ffmpeg,configurable",
|
|
Inputs: [
|
|
{
|
|
name: "codecs_to_exclude",
|
|
type: 'string',
|
|
defaultValue: 'hevc',
|
|
inputUI: {
|
|
type: 'text',
|
|
},
|
|
tooltip: `Input codecs, separated by a comma, that should be excluded when processing.
|
|
|
|
\\nFor example, if you're transcoding into hevc (h265), then add a filter to prevent hevc being transcoded so your newly transcoded files won't be infinitely looped/processed. \\n
|
|
|
|
|
|
\\nCommon video codecs:
|
|
|
|
\\nmpeg4
|
|
\\nhevc
|
|
\\nh264
|
|
\\nmpeg2video
|
|
\\ntheora
|
|
\\nvp8
|
|
\\nvp9
|
|
|
|
|
|
\\nExample:\\n
|
|
|
|
hevc
|
|
|
|
\\nYou can also enter multiple codecs:
|
|
|
|
\\nExample:\\n
|
|
|
|
mp3,aac,dts
|
|
|
|
\\nExample:\\n
|
|
|
|
h264,vp9
|
|
|
|
`,
|
|
},
|
|
{
|
|
name: "cli",
|
|
type: 'string',
|
|
defaultValue: 'handbrake',
|
|
inputUI: {
|
|
type: 'text',
|
|
},
|
|
tooltip: `Enter the CLI to use.
|
|
|
|
\\nExample:\\n
|
|
handbrake
|
|
|
|
\\nExample:\\n
|
|
ffmpeg
|
|
|
|
`,
|
|
},
|
|
{
|
|
name: "transcode_arguments",
|
|
type: 'string',
|
|
defaultValue: '-Z "Very Fast 1080p30" --all-subtitles --all-audio',
|
|
inputUI: {
|
|
type: 'text',
|
|
},
|
|
tooltip: `\\nEnter HandBrake or FFmpeg transcode arguments.
|
|
|
|
\\nHandBrake examples:
|
|
|
|
\\nExample:\\n
|
|
-e x264 -q 20 -B
|
|
|
|
\\nExample:\\n
|
|
-Z "Very Fast 1080p30"
|
|
|
|
\\nExample:\\n
|
|
-Z "Fast 1080p30" -e nvenc_h265
|
|
|
|
\\nExample:\\n
|
|
-Z "Very Fast 1080p30" --all-subtitles --all-audio
|
|
|
|
\\nExample:\\n
|
|
-Z "Very Fast 480p30"
|
|
|
|
\\nExample:\\n
|
|
--preset-import-file "C:\Users\HaveAGitGat\Desktop\testpreset.json" -Z "My Preset"
|
|
|
|
\\nYou can learn more about HandBrake presets here:
|
|
|
|
\\nhttps://handbrake.fr/docs/en/latest/technical/official-presets.html
|
|
|
|
|
|
\\nWhen using FFmpeg, you need to separate the input and output parameters with a comma. FFmpeg Examples:
|
|
|
|
\\nExample:\\n
|
|
-r 1,-r 24
|
|
|
|
\\nExample:\\n
|
|
,-sn -c:v copy -c:a copy
|
|
|
|
\\nExample:\\n
|
|
,-c:v lib265 -crf 23 -ac 6 -c:a aac -preset veryfast
|
|
|
|
\\nExample:\\n
|
|
,-map 0 -c copy -c:v libx265 -c:a aac
|
|
|
|
\\nExample:\\n
|
|
-c:v h264_cuvid,-c:v hevc_nvenc -preset slow -c:a copy
|
|
|
|
\\nPlease see the following for help with creating FFmpeg commands:
|
|
|
|
\\nhttps://opensource.com/article/17/6/ffmpeg-convert-media-file-formats
|
|
|
|
|
|
|
|
|
|
`,
|
|
},
|
|
{
|
|
name: "output_container",
|
|
type: 'string',
|
|
defaultValue: '.mkv',
|
|
inputUI: {
|
|
type: 'text',
|
|
},
|
|
tooltip: `
|
|
\\nEnter the output container of the new file
|
|
|
|
\\nExample:\\n
|
|
.mp4
|
|
|
|
\\nExample:\\n
|
|
.mp3
|
|
|
|
\\nExample:\\n
|
|
.mkv
|
|
|
|
`,
|
|
},
|
|
],
|
|
}
|
|
);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
const plugin = (file, librarySettings, inputs, otherArguments) => {
|
|
|
|
const lib = require('../methods/lib')();
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
|
|
inputs = lib.loadDefaultValues(inputs, details);
|
|
//Must return this object
|
|
|
|
var response = {
|
|
processFile: false,
|
|
preset: "",
|
|
container: ".mp4",
|
|
handBrakeMode: false,
|
|
FFmpegMode: false,
|
|
reQueueAfter: false,
|
|
infoLog: "",
|
|
};
|
|
|
|
if (
|
|
inputs.codecs_to_exclude === undefined ||
|
|
inputs.cli === undefined ||
|
|
inputs.transcode_arguments === undefined ||
|
|
inputs.output_container === undefined
|
|
) {
|
|
response.processFile = false;
|
|
response.infoLog += "☒ Inputs not entered! \n";
|
|
return response;
|
|
}
|
|
|
|
if (
|
|
inputs.codecs_to_exclude.includes(file.ffProbeData.streams[0].codec_name)
|
|
) {
|
|
response.processFile = false;
|
|
response.infoLog += `☑File is already in ${file.ffProbeData.streams[0].codec_name}! \n`;
|
|
return response;
|
|
}
|
|
|
|
//transcode settings
|
|
|
|
if (inputs.cli == `handbrake`) {
|
|
response.handBrakeMode = true;
|
|
response.FFmpegMode = false;
|
|
} else if (inputs.cli == `ffmpeg`) {
|
|
response.handBrakeMode = false;
|
|
response.FFmpegMode = true;
|
|
} else {
|
|
response.processFile = false;
|
|
response.infoLog += "☒ CLI not input correctly! \n";
|
|
return response;
|
|
}
|
|
|
|
response.processFile = true;
|
|
response.preset = inputs.transcode_arguments;
|
|
response.container = inputs.output_container;
|
|
|
|
response.reQueueAfter = true;
|
|
response.infoLog += `☒File is not in desired codec! \n`;
|
|
return response;
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports.details = details;
|
|
module.exports.plugin = plugin; |