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.
126 lines
4.3 KiB
126 lines
4.3 KiB
function details() {
|
|
return {
|
|
id: "Tdarr_Plugin_MC93_Migz1FFMPEG",
|
|
Stage: "Pre-processing",
|
|
Name: "Migz-Transcode Using Nvidia GPU & FFMPEG",
|
|
Type: "Video",
|
|
Operation:"Transcode",
|
|
Description: `[TESTING]Files will be transcoded using Nvidia GPU with ffmpeg, settings are dependant on current file size. NVDEC & NVENC compatable GPU required. \n\n`,
|
|
Version: "2.00",
|
|
Link: "",
|
|
Inputs: [
|
|
{
|
|
name: 'container',
|
|
tooltip: `Specify output container of file, ensure that all stream types you may have are supported by your chosen container. mkv is recommended.
|
|
\\nExample:\\n
|
|
mkv
|
|
|
|
\\nExample:\\n
|
|
mp4`
|
|
|
|
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
function plugin(file, librarySettings, inputs) {
|
|
var response = {
|
|
processFile: false,
|
|
preset: '',
|
|
handBrakeMode: false,
|
|
FFmpegMode: true,
|
|
reQueueAfter: true,
|
|
infoLog: ''
|
|
}
|
|
|
|
var bitrateSettings = ""
|
|
|
|
if (inputs.container == "") {
|
|
response.infoLog += "☒Container has not been configured within plugin settings, please configure required options. Skipping this plugin. \n"
|
|
response.processFile = false
|
|
return response
|
|
} else {
|
|
response.container = '.' + inputs.container
|
|
}
|
|
|
|
if (file.fileMedium !== "video") {
|
|
response.processFile = false
|
|
response.infoLog += "☒File is not a video. \n"
|
|
return response
|
|
}
|
|
|
|
response.infoLog += `Container for video selected as ${inputs.container}. \n`
|
|
|
|
if (file.ffProbeData.streams[0].codec_name == 'hevc' && file.container == inputs.container) {
|
|
response.processFile = false
|
|
response.infoLog += `☑File is already in ${inputs.container} & hevc. \n`
|
|
return response
|
|
}
|
|
|
|
if (file.ffProbeData.streams[0].codec_name == 'hevc' && file.container != '${inputs.container}') {
|
|
response.infoLog += `☒File is hevc but is not in ${inputs.container} container. Remuxing. \n`
|
|
response.preset = ', -map 0 -c copy'
|
|
response.processFile = true;
|
|
return response
|
|
}
|
|
|
|
//codec will be checked so it can be transcoded correctly
|
|
if (file.video_codec_name == 'h263') {
|
|
response.preset = `-c:v h263_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'h264') {
|
|
if (file.ffProbeData.streams[0].profile != 'High 10') { //if a h264 coded video is not HDR
|
|
response.preset = `-c:v h264_cuvid`
|
|
}
|
|
}
|
|
else if (file.video_codec_name == 'mjpeg') {
|
|
response.preset = `c:v mjpeg_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'mpeg1') {
|
|
response.preset = `-c:v mpeg1_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'mpeg2') {
|
|
response.preset = `-c:v mpeg2_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'vc1') {
|
|
response.preset = `-c:v vc1_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'vp8') {
|
|
response.preset = `-c:v vp8_cuvid`
|
|
}
|
|
else if (file.video_codec_name == 'vp9') {
|
|
response.preset = `-c:v vp9_cuvid`
|
|
}
|
|
|
|
if (file.file_size >= "30000") {
|
|
bitrateSettings = "-b:v 30M -minrate 20M"
|
|
} else if (file.file_size < "30000" && file.file_size >= "25000") {
|
|
bitrateSettings = "-b:v 15M -minrate 10M -maxrate 20M"
|
|
} else if (file.file_size < "25000" && file.file_size >= "20000") {
|
|
bitrateSettings = "-b:v 12M -minrate 8M -maxrate 16M"
|
|
} else if (file.file_size < "20000" && file.file_size >= "15000") {
|
|
bitrateSettings = "-b:v 10M -minrate 7M -maxrate 13M"
|
|
} else if (file.file_size < "15000" && file.file_size >= "10000") {
|
|
bitrateSettings = "-b:v 8M -minrate 6M -maxrate 10M"
|
|
} else if (file.file_size < "10000" && file.file_size >= "8000") {
|
|
bitrateSettings = "-b:v 5M -minrate 3M -maxrate 8M"
|
|
} else if (file.file_size < "8000" && file.file_size >= "6000") {
|
|
bitrateSettings = "-b:v 4M -minrate 2M -maxrate 6M"
|
|
} else if (file.file_size < "6000" && file.file_size >= "2000") {
|
|
bitrateSettings = "-b:v 3M -minrate 1M -maxrate 5M"
|
|
} else if (file.file_size < "2000" && file.file_size >= "500") {
|
|
bitrateSettings = "-b:v 1M -minrate 500k -maxrate 2M"
|
|
} else if (file.file_size < "500" ) {
|
|
bitrateSettings = "-b:v 250K -minrate 100k -maxrate 500k"
|
|
}
|
|
|
|
response.preset += `,-map 0 -c:v hevc_nvenc -rc:v vbr_hq ${bitrateSettings} -bufsize 2M -spatial_aq:v 1 -c:a copy -c:s copy -max_muxing_queue_size 4096`
|
|
response.processFile = true
|
|
response.infoLog += `☒File is not hevc. Transcoding. \n`
|
|
return response
|
|
}
|
|
|
|
module.exports.details = details;
|
|
module.exports.plugin = plugin;
|