mirror of
https://github.com/gabehf/Tdarr_Plugins.git
synced 2026-03-16 18:45:53 -07:00
Added HDR support, Cleaned up info log & initial test fix
- Added HDR support. Tested as working but can have issues. Warning applied - Made duration check a bit better with try statement - Cleaned up how the info log was used so it's more consistent & fixed up trailing spaces & line breaks - Initial test fix up but more will be needed
This commit is contained in:
parent
890c2642e1
commit
03d8a75033
2 changed files with 405 additions and 333 deletions
|
|
@ -97,7 +97,7 @@ const details = () => ({
|
||||||
==DESCRIPTION==
|
==DESCRIPTION==
|
||||||
\\nSpecify if we want to enable 10bit encoding.
|
\\nSpecify if we want to enable 10bit encoding.
|
||||||
\\nIf this is enabled files will be processed and converted into 10bit
|
\\nIf this is enabled files will be processed and converted into 10bit
|
||||||
HEVC using main10 profile and with p010le pixel format. \n
|
HEVC using main10 profile and with p010le pixel format.\n
|
||||||
If you just want to retain files that are already 10 bit then this can be left as false, as
|
If you just want to retain files that are already 10 bit then this can be left as false, as
|
||||||
10bit to 10bit in ffmpeg should be automatic.
|
10bit to 10bit in ffmpeg should be automatic.
|
||||||
\\n
|
\\n
|
||||||
|
|
@ -185,7 +185,7 @@ const details = () => ({
|
||||||
},
|
},
|
||||||
tooltip: `\\n
|
tooltip: `\\n
|
||||||
==DESCRIPTION==
|
==DESCRIPTION==
|
||||||
\\nSpecify bitrate cutoff, files with a video bitrate lower then this will not be processed. \n
|
\\nSpecify bitrate cutoff, files with a video bitrate lower then this will not be processed.\n
|
||||||
\\n
|
\\n
|
||||||
==INFO==
|
==INFO==
|
||||||
\\nRate is in kbps.
|
\\nRate is in kbps.
|
||||||
|
|
@ -347,7 +347,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
|
|
||||||
if (file.fileMedium !== 'video') {
|
if (file.fileMedium !== 'video') {
|
||||||
response.processFile = false;
|
response.processFile = false;
|
||||||
response.infoLog += `☒ File seems to be ${file.fileMedium} & not video. Exiting \n`;
|
response.infoLog += `☒ File seems to be ${file.fileMedium} & not video. Exiting\n`;
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -357,36 +357,47 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
if (strstreamType === 'video') {
|
if (strstreamType === 'video') {
|
||||||
if (file.ffProbeData.streams[i].codec_name !== 'mjpeg'
|
if (file.ffProbeData.streams[i].codec_name !== 'mjpeg'
|
||||||
&& file.ffProbeData.streams[i].codec_name !== 'png') {
|
&& file.ffProbeData.streams[i].codec_name !== 'png') {
|
||||||
// Try checking file stats using Mediainfo first, then ffprobe.
|
if (videoBR <= 0) { // Process if videoBR is not yet valid
|
||||||
try {
|
try { // Try checking file stats using Mediainfo first, then ffprobe.
|
||||||
videoBR = Number(file.mediaInfo.track[i + 1].BitRate) / 1000;
|
videoBR = Number(file.mediaInfo.track[i + 1].BitRate) / 1000;
|
||||||
if (videoBR <= 0 || Number.isNaN(videoBR)) {
|
if (videoBR <= 0 || Number.isNaN(videoBR)) {
|
||||||
if (Number(file.ffProbeData.streams[i].tags.BPS) > 0) {
|
if (Number(file.ffProbeData.streams[i].tags.BPS) > 0) {
|
||||||
videoBR = file.ffProbeData.streams[i].tags.BPS / 1000;
|
videoBR = file.ffProbeData.streams[i].tags.BPS / 1000;
|
||||||
} else if (Number(file.ffProbeData.streams[i].tags.BPS['-eng']) > 0) {
|
} else if (Number(file.ffProbeData.streams[i].tags.BPS['-eng']) > 0) {
|
||||||
videoBR = file.ffProbeData.streams[i].tags.BPS['-eng'] / 1000;
|
videoBR = file.ffProbeData.streams[i].tags.BPS['-eng'] / 1000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
// Catch error - Ignore & carry on - If check can bomb out if tags don't exist...
|
||||||
|
videoBR = 0; // Set videoBR to 0 for safety
|
||||||
}
|
}
|
||||||
} catch (err) {
|
|
||||||
// Catch error - Ignore & carry on - If check can bomb out if tags don't exist...
|
|
||||||
videoBR = 0; // Set videoBR to 0 for safety
|
|
||||||
}
|
}
|
||||||
// Check if duration info is filled, if so convert time format to minutes.
|
if (duration <= 0) { // Process if duration is not yet valid
|
||||||
if (Number.isNaN(file.meta.Duration) === false) {
|
try { // Attempt to get duration info
|
||||||
// If duration is a number then convert seconds to minutes
|
if (Number.isNaN(file.meta.Duration)) {
|
||||||
duration = file.meta.Duration / 60;
|
duration = file.meta.Duration;
|
||||||
} else if (typeof file.meta.Duration !== 'undefined') {
|
duration = (new Date(`1970-01-01T${duration}Z`).getTime() / 1000) / 60;
|
||||||
// Get seconds by using a Date & then convert to minutes
|
} else if (file.meta.Duration > 0) {
|
||||||
duration = file.meta.Duration;
|
duration = file.meta.Duration / 60;
|
||||||
duration = (new Date(`1970-01-01T${duration}Z`).getTime() / 1000) / 60;
|
}
|
||||||
} else { // If not filled then get duration of video stream and do the same.
|
if (duration <= 0 || Number.isNaN(duration)) {
|
||||||
duration = file.ffProbeData.streams[i].tags.DURATION;
|
if (typeof file.mediaInfo.track[i + 1].Duration !== 'undefined') {
|
||||||
duration = (new Date(`1970-01-01T${duration}Z`).getTime() / 1000) / 60;
|
duration = file.mediaInfo.track[i + 1].Duration;
|
||||||
|
duration = (new Date(`1970-01-01T${duration}Z`).getTime() / 1000) / 60;
|
||||||
|
} else if (typeof file.ffProbeData.streams[i].tags.DURATION !== 'undefined') {
|
||||||
|
duration = file.ffProbeData.streams[i].tags.DURATION;
|
||||||
|
duration = (new Date(`1970-01-01T${duration}Z`).getTime() / 1000) / 60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
// Catch error - Ignore & carry on - If check can bomb out if tags don't exist...
|
||||||
|
duration = 0; // Set duration to 0 for safety
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (videoBR <= 0 || Number.isNaN(videoBR)) {
|
if ((videoBR <= 0 || Number.isNaN(videoBR)) || (duration <= 0 || Number.isNaN(duration))) {
|
||||||
// videoBR not yet valid so Loop
|
// videoBR or duration not yet valid so Loop
|
||||||
} else {
|
} else {
|
||||||
break;// Exit loop if videoBR is valid
|
break;// Exit loop if both valid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -395,12 +406,12 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
if (Number.isNaN(videoBR) || videoBR <= 0) {
|
if (Number.isNaN(videoBR) || videoBR <= 0) {
|
||||||
// Work out currentBitrate using "Bitrate = file size / (number of minutes * .0075)"
|
// Work out currentBitrate using "Bitrate = file size / (number of minutes * .0075)"
|
||||||
currentBitrate = Math.round(file.file_size / (duration * 0.0075));
|
currentBitrate = Math.round(file.file_size / (duration * 0.0075));
|
||||||
response.infoLog += '==WARNING== Failed to get an accurate video bitrate, ';
|
response.infoLog += '==WARNING== Failed to get an accurate video bitrate, '
|
||||||
response.infoLog += `falling back to old method to get OVERALL file bitrate of ${currentBitrate}kbps. `;
|
+ `falling back to old method to get OVERALL file bitrate of ${currentBitrate}kbps. `
|
||||||
response.infoLog += 'Bitrate calculations for video encode will likely be inaccurate... \n';
|
+ 'Bitrate calculations for video encode will likely be inaccurate...\n';
|
||||||
} else {
|
} else {
|
||||||
currentBitrate = Math.round(videoBR);
|
currentBitrate = Math.round(videoBR);
|
||||||
response.infoLog += `☑ It looks like the current video bitrate is ${currentBitrate}kbps. \n`;
|
response.infoLog += `☑ It looks like the current video bitrate is ${currentBitrate}kbps.\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get overall bitrate for use with HEVC reprocessing
|
// Get overall bitrate for use with HEVC reprocessing
|
||||||
|
|
@ -414,8 +425,8 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// If targetBitrate or currentBitrate comes out as 0 then something
|
// If targetBitrate or currentBitrate comes out as 0 then something
|
||||||
// has gone wrong and bitrates could not be calculated.
|
// has gone wrong and bitrates could not be calculated.
|
||||||
// Cancel plugin completely.
|
// Cancel plugin completely.
|
||||||
if (targetBitrate <= 0 || currentBitrate <= 0) {
|
if (targetBitrate <= 0 || currentBitrate <= 0 || overallBitRate <= 0) {
|
||||||
response.infoLog += '☒ Target bitrate could not be calculated. Skipping this plugin. \n';
|
response.infoLog += '☒ Target bitrates could not be calculated. Skipping this plugin.\n';
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -423,19 +434,18 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// has gone wrong as that is not what we want.
|
// has gone wrong as that is not what we want.
|
||||||
// Cancel plugin completely.
|
// Cancel plugin completely.
|
||||||
if (targetBitrate >= currentBitrate) {
|
if (targetBitrate >= currentBitrate) {
|
||||||
response.infoLog += `☒ Target bitrate has been calculated as ${targetBitrate}kbps. This is equal or greater `;
|
response.infoLog += `☒ Target bitrate has been calculated as ${targetBitrate}kbps. This is equal or greater than `
|
||||||
response.infoLog += "than the current bitrate... Something has gone wrong and this shouldn't happen! "
|
+ "the current bitrate... Something has gone wrong and this shouldn't happen! Skipping this plugin.\n";
|
||||||
+ 'Skipping this plugin. \n';
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure that bitrate_cutoff is set if reconvert_hevc is true since we need some protection against a loop
|
// Ensure that bitrate_cutoff is set if reconvert_hevc is true since we need some protection against a loop
|
||||||
// Cancel the plugin
|
// Cancel the plugin
|
||||||
if (inputs.reconvert_hevc === true && inputs.bitrate_cutoff <= 0 && inputs.hevc_max_bitrate <= 0) {
|
if (inputs.reconvert_hevc === true && inputs.bitrate_cutoff <= 0 && inputs.hevc_max_bitrate <= 0) {
|
||||||
response.infoLog += `Reconvert HEVC is ${inputs.reconvert_hevc}, however there is no bitrate cutoff `;
|
response.infoLog += `Reconvert HEVC is ${inputs.reconvert_hevc}, however there is no bitrate cutoff or HEVC `
|
||||||
response.infoLog += 'or HEVC specific cutoff set so we have no way to know when to stop processing this file. \n'
|
+ 'specific cutoff set so we have no way to know when to stop processing this file.\n'
|
||||||
+ 'Either set reconvert_HEVC to false or set a bitrate cutoff and set a hevc_max_bitrate cutoff. \n'
|
+ 'Either set reconvert_HEVC to false or set a bitrate cutoff and set a hevc_max_bitrate cutoff.\n'
|
||||||
+ '☒ Skipping this plugin. \n';
|
+ '☒ Skipping this plugin.\n';
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -445,13 +455,13 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// Checks if currentBitrate is below inputs.bitrate_cutoff.
|
// Checks if currentBitrate is below inputs.bitrate_cutoff.
|
||||||
// If so then cancel plugin without touching original files.
|
// If so then cancel plugin without touching original files.
|
||||||
if (currentBitrate <= inputs.bitrate_cutoff) {
|
if (currentBitrate <= inputs.bitrate_cutoff) {
|
||||||
response.infoLog += `☑ Current bitrate is below set cutoff of ${inputs.bitrate_cutoff}kbps. \n`
|
response.infoLog += `☑ Current bitrate is below set cutoff of ${inputs.bitrate_cutoff}kbps.\n`
|
||||||
+ 'Cancelling plugin. \n';
|
+ 'Cancelling plugin.\n';
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
// If above cutoff then carry on
|
// If above cutoff then carry on
|
||||||
if (currentBitrate > inputs.bitrate_cutoff && inputs.reconvert_hevc === false) {
|
if (currentBitrate > inputs.bitrate_cutoff && inputs.reconvert_hevc === false) {
|
||||||
response.infoLog += '☒ Current bitrate appears to be above the cutoff. Need to process \n';
|
response.infoLog += '☒ Current bitrate appears to be above the cutoff. Need to process\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -459,8 +469,8 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// Checks if targetBitrate is above inputs.max_average_bitrate.
|
// Checks if targetBitrate is above inputs.max_average_bitrate.
|
||||||
// If so then clamp target bitrate
|
// If so then clamp target bitrate
|
||||||
if (targetBitrate > inputs.max_average_bitrate) {
|
if (targetBitrate > inputs.max_average_bitrate) {
|
||||||
response.infoLog += 'Our target bitrate is above the max_average_bitrate ';
|
response.infoLog += 'Our target bitrate is above the max_average_bitrate so clamping at max of '
|
||||||
response.infoLog += `so clamping at max of ${inputs.max_average_bitrate}kbps. \n`;
|
+ `${inputs.max_average_bitrate}kbps.\n`;
|
||||||
targetBitrate = Math.round(inputs.max_average_bitrate);
|
targetBitrate = Math.round(inputs.max_average_bitrate);
|
||||||
minimumBitrate = Math.round(targetBitrate * 0.75);
|
minimumBitrate = Math.round(targetBitrate * 0.75);
|
||||||
maximumBitrate = Math.round(targetBitrate * 1.25);
|
maximumBitrate = Math.round(targetBitrate * 1.25);
|
||||||
|
|
@ -472,14 +482,14 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
if (inputs.min_average_bitrate > 0) {
|
if (inputs.min_average_bitrate > 0) {
|
||||||
// Exit the plugin is the cutoff is less than the min average bitrate. Most likely user error
|
// Exit the plugin is the cutoff is less than the min average bitrate. Most likely user error
|
||||||
if (inputs.bitrate_cutoff < inputs.min_average_bitrate) {
|
if (inputs.bitrate_cutoff < inputs.min_average_bitrate) {
|
||||||
response.infoLog += `☒ Bitrate cutoff ${inputs.bitrate_cutoff}k is less than the set minimum
|
response.infoLog += `☒ Bitrate cutoff ${inputs.bitrate_cutoff}k is less than the set minimum `
|
||||||
average bitrate set of ${inputs.min_average_bitrate}kbps. We don't want this. Cancelling plugin. \n`;
|
+ `average bitrate set of ${inputs.min_average_bitrate}kbps. We don't want this. Cancelling plugin.\n`;
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
// Checks if inputs.bitrate_cutoff is below inputs.min_average_bitrate.
|
// Checks if inputs.bitrate_cutoff is below inputs.min_average_bitrate.
|
||||||
// If so then set currentBitrate to the minimum allowed.)
|
// If so then set currentBitrate to the minimum allowed.)
|
||||||
if (targetBitrate < inputs.min_average_bitrate) {
|
if (targetBitrate < inputs.min_average_bitrate) {
|
||||||
response.infoLog += `Target average bitrate clamped at min of ${inputs.min_average_bitrate}kbps. \n`;
|
response.infoLog += `Target average bitrate clamped at min of ${inputs.min_average_bitrate}kbps.\n`;
|
||||||
targetBitrate = Math.round(inputs.min_average_bitrate);
|
targetBitrate = Math.round(inputs.min_average_bitrate);
|
||||||
minimumBitrate = Math.round(targetBitrate * 0.75);
|
minimumBitrate = Math.round(targetBitrate * 0.75);
|
||||||
maximumBitrate = Math.round(targetBitrate * 1.25);
|
maximumBitrate = Math.round(targetBitrate * 1.25);
|
||||||
|
|
@ -540,13 +550,27 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
if (file.ffProbeData.streams[i].codec_name === 'mjpeg' || file.ffProbeData.streams[i].codec_name === 'png') {
|
if (file.ffProbeData.streams[i].codec_name === 'mjpeg' || file.ffProbeData.streams[i].codec_name === 'png') {
|
||||||
extraArguments += `-map -0:v:${videoIdx} `;
|
extraArguments += `-map -0:v:${videoIdx} `;
|
||||||
} else { // Ensure to only do further checks if video stream is valid for use
|
} else { // Ensure to only do further checks if video stream is valid for use
|
||||||
// Check for HDR in files. If so exit plugin. HDR can be complicated
|
// Check for HDR in files. Attempt to use same color
|
||||||
// and some aspects are still unsupported in ffmpeg I believe. Likely we don't want to re-encode anything HDR.
|
if ((file.ffProbeData.streams[i].color_space === 'bt2020nc'
|
||||||
if (file.ffProbeData.streams[i].color_space === 'bt2020nc'
|
|| file.ffProbeData.streams[i].color_space === 'bt2020n')
|
||||||
&& file.ffProbeData.streams[i].color_transfer === 'smpte2084'
|
&& (file.ffProbeData.streams[i].color_transfer === 'smpte2084'
|
||||||
|
|| file.ffProbeData.streams[i].color_transfer === 'arib-std-b67')
|
||||||
&& file.ffProbeData.streams[i].color_primaries === 'bt2020') {
|
&& file.ffProbeData.streams[i].color_primaries === 'bt2020') {
|
||||||
response.infoLog += '☒ This looks to be a HDR file. HDR files are unfortunately '
|
response.infoLog += '==WARNING== This looks to be a HDR file. HDR is supported but '
|
||||||
+ 'not supported by this plugin. Exiting plugin. \n\n';
|
+ 'correct encoding is not guaranteed.\n';
|
||||||
|
extraArguments += `-color_primaries ${file.ffProbeData.streams[i].color_primaries} `
|
||||||
|
+ `-color_trc ${file.ffProbeData.streams[i].color_transfer} `
|
||||||
|
+ `-colorspace ${file.ffProbeData.streams[i].color_space} `;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if codec of stream is HEVC, Vp9 or AV1
|
||||||
|
// AND check if file.container does NOT match inputs.container. If so remux file.
|
||||||
|
if ((file.ffProbeData.streams[i].codec_name === 'hevc'
|
||||||
|
|| file.ffProbeData.streams[i].codec_name === 'vp9'
|
||||||
|
|| file.ffProbeData.streams[i].codec_name === 'av1') && file.container !== inputs.container) {
|
||||||
|
response.infoLog += `☒ File is HEVC, VP9 or AV1 but is not in ${inputs.container} container. Remuxing.\n`;
|
||||||
|
response.preset = `<io> -map 0 -c copy ${extraArguments}`;
|
||||||
|
response.processFile = true;
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -557,18 +581,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// If so nothing for plugin to do.
|
// If so nothing for plugin to do.
|
||||||
if ((file.ffProbeData.streams[i].codec_name === 'hevc' || file.ffProbeData.streams[i].codec_name === 'vp9'
|
if ((file.ffProbeData.streams[i].codec_name === 'hevc' || file.ffProbeData.streams[i].codec_name === 'vp9'
|
||||||
|| file.ffProbeData.streams[i].codec_name === 'av1') && file.container === inputs.container) {
|
|| file.ffProbeData.streams[i].codec_name === 'av1') && file.container === inputs.container) {
|
||||||
response.infoLog += `☑ File is already HEVC, VP9 or AV1 & in ${inputs.container}. \n`;
|
response.infoLog += `☑ File is already HEVC, VP9 or AV1 & in ${inputs.container}.\n`;
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if codec of stream is HEVC, Vp9 or AV1
|
|
||||||
// AND check if file.container does NOT match inputs.container.
|
|
||||||
// If so remux file.
|
|
||||||
if ((file.ffProbeData.streams[i].codec_name === 'hevc' || file.ffProbeData.streams[i].codec_name === 'vp9'
|
|
||||||
|| file.ffProbeData.streams[i].codec_name === 'av1') && file.container !== inputs.container) {
|
|
||||||
response.infoLog += `☒ File is HEVC, VP9 or AV1 but is not in ${inputs.container} container. Remuxing. \n`;
|
|
||||||
response.preset = `<io> -map 0 -c copy ${extraArguments}`;
|
|
||||||
response.processFile = true;
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -580,14 +593,14 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
if (inputs.hevc_max_bitrate > 0) {
|
if (inputs.hevc_max_bitrate > 0) {
|
||||||
if (currentBitrate > inputs.hevc_max_bitrate) {
|
if (currentBitrate > inputs.hevc_max_bitrate) {
|
||||||
// If bitrate is higher then hevc_max_bitrate then need to re-encode
|
// If bitrate is higher then hevc_max_bitrate then need to re-encode
|
||||||
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, `
|
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, VP9 or AV1. `
|
||||||
+ `VP9 or AV1. Using HEVC specific cutoff of ${inputs.hevc_max_bitrate}kbps. \n`;
|
+ `Using HEVC specific cutoff of ${inputs.hevc_max_bitrate}kbps.\n`
|
||||||
response.infoLog += '☒ The file is still above this new cutoff! Reconverting. \n';
|
+ '☒ The file is still above this new cutoff! Reconverting.\n';
|
||||||
} else {
|
} else {
|
||||||
// Otherwise we're now below the hevc cutoff and we can exit
|
// Otherwise we're now below the hevc cutoff and we can exit
|
||||||
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, `
|
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, VP9 or AV1. `
|
||||||
+ `VP9 or AV1. Using HEVC specific cutoff of ${inputs.hevc_max_bitrate}kbps. \n`;
|
+ `Using HEVC specific cutoff of ${inputs.hevc_max_bitrate}kbps.\n`
|
||||||
response.infoLog += '☑ The file is NOT above this new cutoff. Exiting plugin. \n';
|
+ '☑ The file is NOT above this new cutoff. Exiting plugin.\n';
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -595,21 +608,19 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// looping this plugin. For maximum safety we simply multiply the cutoff by 2.
|
// looping this plugin. For maximum safety we simply multiply the cutoff by 2.
|
||||||
} else if (currentBitrate > (inputs.bitrate_cutoff * 2)) {
|
} else if (currentBitrate > (inputs.bitrate_cutoff * 2)) {
|
||||||
inflatedCutoff = Math.round(inputs.bitrate_cutoff * 2);
|
inflatedCutoff = Math.round(inputs.bitrate_cutoff * 2);
|
||||||
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, `;
|
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, VP9 or AV1. `
|
||||||
response.infoLog += 'VP9 or AV1. Will use Overall file Bitrate for HEVC files as safety, ';
|
+ `Will use Overall file Bitrate for HEVC files as safety, bitrate is ${overallBitRate}kbps.\n`
|
||||||
response.infoLog += `bitrate is ${overallBitRate}kbps. \n`;
|
+ 'HEVC specific cutoff not set so bitrate_cutoff is multiplied by 2 for safety!\n'
|
||||||
response.infoLog += 'HEVC specific cutoff not set so bitrate_cutoff is multiplied by 2 for safety! \n';
|
+ `Cutoff now temporarily ${inflatedCutoff}kbps.\n`
|
||||||
response.infoLog += `Cutoff now temporarily ${inflatedCutoff}kbps. \n`;
|
+ '☒ The file is still above this new cutoff! Reconverting.\n';
|
||||||
response.infoLog += '☒ The file is still above this new cutoff! Reconverting. \n';
|
|
||||||
} else {
|
} else {
|
||||||
// File is below cutoff so we can exit
|
// File is below cutoff so we can exit
|
||||||
inflatedCutoff = Math.round(inputs.bitrate_cutoff * 2);
|
inflatedCutoff = Math.round(inputs.bitrate_cutoff * 2);
|
||||||
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, `;
|
response.infoLog += `Reconvert_hevc is ${inputs.reconvert_hevc} & the file is already HEVC, VP9 or AV1. `
|
||||||
response.infoLog += 'VP9 or AV1. Will use Overall file Bitrate for HEVC files as safety, ';
|
+ `Will use Overall file Bitrate for HEVC files as safety, bitrate is ${overallBitRate}kbps.\n`
|
||||||
response.infoLog += `bitrate is ${overallBitRate}kbps. \n`;
|
+ 'HEVC specific cutoff not set so bitrate_cutoff is multiplied by 2 for safety!\n'
|
||||||
response.infoLog += 'HEVC specific cutoff not set so bitrate_cutoff is multiplied by 2 for safety! \n';
|
+ `Cutoff now temporarily ${inflatedCutoff}kbps.\n`
|
||||||
response.infoLog += `Cutoff now temporarily ${inflatedCutoff}kbps. \n`;
|
+ '☑The file is NOT above this new cutoff. Exiting plugin.\n';
|
||||||
response.infoLog += '☑The file is NOT above this new cutoff. Exiting plugin. \n';
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -649,8 +660,8 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
break;
|
break;
|
||||||
case 'h264':
|
case 'h264':
|
||||||
if (high10 === true) {
|
if (high10 === true) {
|
||||||
response.infoLog += `Input file is ${file.video_codec_name} High10. Hardware Decode not supported. \n`;
|
|
||||||
swDecode = true;
|
swDecode = true;
|
||||||
|
response.infoLog += 'Input file is h264 High10. Hardware Decode not supported.\n';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'mjpeg':
|
case 'mjpeg':
|
||||||
|
|
@ -663,7 +674,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
swDecode = true;
|
swDecode = true;
|
||||||
response.infoLog += `Input file is ${file.video_codec_name}. Hardware Decode not supported. \n`;
|
response.infoLog += `Input file is ${file.video_codec_name}. Hardware Decode not supported.\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Are we encoding to 10 bit? If so enable correct profile & pixel format.
|
// Are we encoding to 10 bit? If so enable correct profile & pixel format.
|
||||||
|
|
@ -672,7 +683,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// This is used if we have High10 or Main10 is enabled & odd format files.
|
// This is used if we have High10 or Main10 is enabled & odd format files.
|
||||||
// SW decode and use standard -pix_fmt p010le
|
// SW decode and use standard -pix_fmt p010le
|
||||||
extraArguments += '-profile:v main10 -pix_fmt p010le ';
|
extraArguments += '-profile:v main10 -pix_fmt p010le ';
|
||||||
response.infoLog += '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n';
|
response.infoLog += '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n';
|
||||||
} else if (main10 === true) { // Pixel formate method when using HW decode
|
} else if (main10 === true) { // Pixel formate method when using HW decode
|
||||||
if (inputs.extra_qsv_options.search('-vf scale_qsv') >= 0) {
|
if (inputs.extra_qsv_options.search('-vf scale_qsv') >= 0) {
|
||||||
extraArguments += '-profile:v main10';
|
extraArguments += '-profile:v main10';
|
||||||
|
|
@ -681,23 +692,23 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
} else {
|
} else {
|
||||||
extraArguments += '-profile:v main10 -vf scale_qsv=format=p010le';
|
extraArguments += '-profile:v main10 -vf scale_qsv=format=p010le';
|
||||||
}
|
}
|
||||||
response.infoLog += '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n';
|
response.infoLog += '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Mac - Video toolbox profile & pixel format
|
// Mac - Video toolbox profile & pixel format
|
||||||
extraArguments += '-profile:v 2 -pix_fmt yuv420p10le ';
|
extraArguments += '-profile:v 2 -pix_fmt yuv420p10le ';
|
||||||
response.infoLog += '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format \n';
|
response.infoLog += '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set bitrateSettings variable using bitrate information calculated earlier.
|
// Set bitrateSettings variable using bitrate information calculated earlier.
|
||||||
bitrateSettings = `-b:v ${targetBitrate}k -minrate ${minimumBitrate}k `
|
bitrateSettings = `-b:v ${targetBitrate}k -minrate ${minimumBitrate}k `
|
||||||
+ `-maxrate ${maximumBitrate}k -bufsize ${currentBitrate}k`;
|
+ `-maxrate ${maximumBitrate}k -bufsize ${currentBitrate}k`;
|
||||||
// Print to infoLog information around file & bitrate settings.
|
// Print to infoLog information around file & bitrate settings.
|
||||||
response.infoLog += `Container for output selected as ${inputs.container}. \n`;
|
response.infoLog += `Container for output selected as ${inputs.container}.\n`
|
||||||
response.infoLog += 'Encode variable bitrate settings: \n';
|
+ 'Encode variable bitrate settings:\n'
|
||||||
response.infoLog += `Target = ${targetBitrate}k \n`;
|
+ `Target = ${targetBitrate}k\n`
|
||||||
response.infoLog += `Minimum = ${minimumBitrate}k \n`;
|
+ `Minimum = ${minimumBitrate}k\n`
|
||||||
response.infoLog += `Maximum = ${maximumBitrate}k \n`;
|
+ `Maximum = ${maximumBitrate}k\n`;
|
||||||
|
|
||||||
// START PRESET
|
// START PRESET
|
||||||
// -fflags +genpts should regenerate timestamps if they end up missing...
|
// -fflags +genpts should regenerate timestamps if they end up missing...
|
||||||
|
|
@ -712,12 +723,12 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
response.preset += '-hwaccel videotoolbox';
|
response.preset += '-hwaccel videotoolbox';
|
||||||
break;
|
break;
|
||||||
case 'linux': // Linux - Full device, should fix child_device_type warnings
|
case 'linux': // Linux - Full device, should fix child_device_type warnings
|
||||||
response.preset += `-hwaccel qsv -hwaccel_output_format qsv
|
response.preset += '-hwaccel qsv -hwaccel_output_format qsv '
|
||||||
-init_hw_device qsv:hw_any,child_device_type=vaapi `;
|
+ '-init_hw_device qsv:hw_any,child_device_type=vaapi ';
|
||||||
break;
|
break;
|
||||||
case 'win32': // Windows - Full device, should fix child_device_type warnings
|
case 'win32': // Windows - Full device, should fix child_device_type warnings
|
||||||
response.preset += `-hwaccel qsv -hwaccel_output_format qsv
|
response.preset += '-hwaccel qsv -hwaccel_output_format qsv '
|
||||||
-init_hw_device qsv:hw,child_device_type=d3d11va `;
|
+ '-init_hw_device qsv:hw,child_device_type=d3d11va ';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
response.preset += '-hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any ';
|
response.preset += '-hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any ';
|
||||||
|
|
@ -728,12 +739,12 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
response.preset += '-hwaccel videotoolbox';
|
response.preset += '-hwaccel videotoolbox';
|
||||||
break;
|
break;
|
||||||
case 'linux': // Linux - Full device, should fix child_device_type warnings
|
case 'linux': // Linux - Full device, should fix child_device_type warnings
|
||||||
response.preset += `-hwaccel_output_format qsv
|
response.preset += '-hwaccel_output_format qsv '
|
||||||
-init_hw_device qsv:hw_any,child_device_type=vaapi `;
|
+ '-init_hw_device qsv:hw_any,child_device_type=vaapi ';
|
||||||
break;
|
break;
|
||||||
case 'win32': // Windows - Full device, should fix child_device_type warnings
|
case 'win32': // Windows - Full device, should fix child_device_type warnings
|
||||||
response.preset += `-hwaccel_output_format qsv
|
response.preset += '-hwaccel_output_format qsv '
|
||||||
-init_hw_device qsv:hw,child_device_type=d3d11va `;
|
+ '-init_hw_device qsv:hw,child_device_type=d3d11va ';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// Default to enabling hwaccel for output only
|
// Default to enabling hwaccel for output only
|
||||||
|
|
@ -891,7 +902,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
response.processFile = true;
|
response.processFile = true;
|
||||||
response.infoLog += 'File Transcoding... \n';
|
response.infoLog += 'File Transcoding...\n';
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -14,34 +14,32 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -50,15 +48,15 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -78,36 +76,34 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -117,16 +113,16 @@ const tests = [
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: 'Input file is not MKV so cannot use mkvpropedit to get new file stats. Continuing but file stats will likely be inaccurate...\n'
|
infoLog: 'Input file is not MKV so cannot use mkvpropedit to get new file stats. Continuing but file stats will likely be inaccurate...\n'
|
||||||
+ '☑ It looks like the current video bitrate is 1206kbps. \n'
|
+ '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -149,38 +145,36 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=vaapi -c:v h264<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=vaapi -c:v h264<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Input file is h264 High10. Hardware Decode not supported. \n'
|
+ 'Input file is h264 High10. Hardware Decode not supported.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Input file is h264 High10. Hardware Decode not supported. \n'
|
+ 'Input file is h264 High10. Hardware Decode not supported.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -189,17 +183,17 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Input file is 10bit using High10. Disabling hardware decoding to avoid problems. \n'
|
+ 'Input file is 10bit using High10. Disabling hardware decoding to avoid problems.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -226,39 +220,37 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v hevc_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v hevc_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 12000kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps. \n'
|
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps.\n'
|
||||||
+ '☒ The file is still above this new cutoff! Reconverting. \n'
|
+ '☒ The file is still above this new cutoff! Reconverting.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 6000k \n'
|
+ 'Target = 6000k\n'
|
||||||
+ 'Minimum = 4500k \n'
|
+ 'Minimum = 4500k\n'
|
||||||
+ 'Maximum = 7500k \n'
|
+ 'Maximum = 7500k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v hevc_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v hevc_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 12000kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps. \n'
|
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps.\n'
|
||||||
+ '☒ The file is still above this new cutoff! Reconverting. \n'
|
+ '☒ The file is still above this new cutoff! Reconverting.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 6000k \n'
|
+ 'Target = 6000k\n'
|
||||||
+ 'Minimum = 4500k \n'
|
+ 'Minimum = 4500k\n'
|
||||||
+ 'Maximum = 7500k \n'
|
+ 'Maximum = 7500k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -267,18 +259,18 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 12000kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps. \n'
|
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps.\n'
|
||||||
+ '☒ The file is still above this new cutoff! Reconverting. \n'
|
+ '☒ The file is still above this new cutoff! Reconverting.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 6000k \n'
|
+ 'Target = 6000k\n'
|
||||||
+ 'Minimum = 4500k \n'
|
+ 'Minimum = 4500k\n'
|
||||||
+ 'Maximum = 7500k \n'
|
+ 'Maximum = 7500k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -309,9 +301,9 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 5000kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 5000kbps.\n'
|
||||||
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps. \n'
|
+ 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps.\n'
|
||||||
+ '☑ The file is NOT above this new cutoff. Exiting plugin. \n',
|
+ '☑ The file is NOT above this new cutoff. Exiting plugin.\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -337,34 +329,32 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4 -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4 -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4 -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4 -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -373,13 +363,13 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mp4. \n'
|
+ 'Container for output selected as mp4.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mp4',
|
container: '.mp4',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -405,34 +395,32 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska -vf hwupload=extra_hw_frames=64,format=qsv ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -441,13 +429,13 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 6454kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 3227k \n'
|
+ 'Target = 3227k\n'
|
||||||
+ 'Minimum = 2420k \n'
|
+ 'Minimum = 2420k\n'
|
||||||
+ 'Maximum = 4034k \n'
|
+ 'Maximum = 4034k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -468,36 +456,34 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -look_ahead 1 -look_ahead_depth 100 -extbrc 1 -rdo 1 -mbbrc 1 -b_strategy 1 -adaptive_i 1 -adaptive_b 1 -vf scale_qsv=1280:-1,format=p010le,hwupload=extra_hw_frames=64,format=qsv -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -look_ahead 1 -look_ahead_depth 100 -extbrc 1 -rdo 1 -mbbrc 1 -b_strategy 1 -adaptive_i 1 -adaptive_b 1 -vf scale_qsv=1280:-1,format=p010le,hwupload=extra_hw_frames=64,format=qsv -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -look_ahead 1 -look_ahead_depth 100 -extbrc 1 -rdo 1 -mbbrc 1 -b_strategy 1 -adaptive_i 1 -adaptive_b 1 -vf scale_qsv=1280:-1,format=p010le,hwupload=extra_hw_frames=64,format=qsv -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -look_ahead 1 -look_ahead_depth 100 -extbrc 1 -rdo 1 -mbbrc 1 -b_strategy 1 -adaptive_i 1 -adaptive_b 1 -vf scale_qsv=1280:-1,format=p010le,hwupload=extra_hw_frames=64,format=qsv -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -506,16 +492,16 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -539,37 +525,35 @@ const tests = [
|
||||||
output: {
|
output: {
|
||||||
linux: {
|
linux: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v vc1<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
||||||
+ ' -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v vc1<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ 'Input file is vc1. Hardware Decode not supported. \n'
|
+ 'Input file is vc1. Hardware Decode not supported.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
processFile: true,
|
processFile: true,
|
||||||
preset: '-fflags +genpts -hwaccel_output_format qsv \n'
|
preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v vc1<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
||||||
+ ' -init_hw_device qsv:hw,child_device_type=d3d11va -c:v vc1<io> -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ',
|
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ 'Input file is vc1. Hardware Decode not supported. \n'
|
+ 'Input file is vc1. Hardware Decode not supported.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
darwin: {
|
darwin: {
|
||||||
|
|
@ -578,16 +562,93 @@ const tests = [
|
||||||
handBrakeMode: false,
|
handBrakeMode: false,
|
||||||
FFmpegMode: true,
|
FFmpegMode: true,
|
||||||
reQueueAfter: true,
|
reQueueAfter: true,
|
||||||
infoLog: '☑ It looks like the current video bitrate is 1206kbps. \n'
|
infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n'
|
||||||
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
+ 'Container for output selected as mkv. \n'
|
+ 'Container for output selected as mkv.\n'
|
||||||
+ 'Encode variable bitrate settings: \n'
|
+ 'Encode variable bitrate settings:\n'
|
||||||
+ 'Target = 603k \n'
|
+ 'Target = 603k\n'
|
||||||
+ 'Minimum = 452k \n'
|
+ 'Minimum = 452k\n'
|
||||||
+ 'Maximum = 754k \n'
|
+ 'Maximum = 754k\n'
|
||||||
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
+ 'File Transcoding... \n',
|
+ 'File Transcoding...\n',
|
||||||
|
container: '.mkv',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Test 9
|
||||||
|
{
|
||||||
|
input: {
|
||||||
|
file: (() => {
|
||||||
|
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||||
|
file.ffProbeData.streams[0].color_space = 'bt2020nc';
|
||||||
|
file.ffProbeData.streams[0].color_transfer = 'smpte2084';
|
||||||
|
file.ffProbeData.streams[0].color_primaries = 'bt2020';
|
||||||
|
file.mediaInfo.track[1].BitRate = 12000000;
|
||||||
|
file.ffProbeData.streams[0].profile = 'Main 10';
|
||||||
|
return file;
|
||||||
|
})(),
|
||||||
|
librarySettings: {},
|
||||||
|
inputs: {
|
||||||
|
container: 'mkv',
|
||||||
|
encoder_speedpreset: 'fast',
|
||||||
|
reconvert_hevc: 'true',
|
||||||
|
hevc_max_bitrate: '6000',
|
||||||
|
bitrate_cutoff: '4000',
|
||||||
|
},
|
||||||
|
otherArguments: {},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
linux: {
|
||||||
|
processFile: true,
|
||||||
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
|
+ '==WARNING== This looks to be a HDR file. HDR is supported but correct encoding is not guaranteed.\n'
|
||||||
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
|
+ 'Container for output selected as mkv.\n'
|
||||||
|
+ 'Encode variable bitrate settings:\n'
|
||||||
|
+ 'Target = 6000k\n'
|
||||||
|
+ 'Minimum = 4500k\n'
|
||||||
|
+ 'Maximum = 7500k\n'
|
||||||
|
+ 'File Transcoding...\n',
|
||||||
|
container: '.mkv',
|
||||||
|
},
|
||||||
|
win32: {
|
||||||
|
processFile: true,
|
||||||
|
preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=d3d11va -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ',
|
||||||
|
handBrakeMode: false,
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
|
+ '==WARNING== This looks to be a HDR file. HDR is supported but correct encoding is not guaranteed.\n'
|
||||||
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
|
+ 'Container for output selected as mkv.\n'
|
||||||
|
+ 'Encode variable bitrate settings:\n'
|
||||||
|
+ 'Target = 6000k\n'
|
||||||
|
+ 'Minimum = 4500k\n'
|
||||||
|
+ 'Maximum = 7500k\n'
|
||||||
|
+ 'File Transcoding...\n',
|
||||||
|
container: '.mkv',
|
||||||
|
},
|
||||||
|
darwin: {
|
||||||
|
processFile: true,
|
||||||
|
preset: '-fflags +genpts <io> -map 0 -c:v hevc_videotoolbox -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v main10 -vf scale_qsv=format=p010le',
|
||||||
|
handBrakeMode: false,
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n'
|
||||||
|
+ '==WARNING== This looks to be a HDR file. HDR is supported but correct encoding is not guaranteed.\n'
|
||||||
|
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n'
|
||||||
|
+ 'Container for output selected as mkv.\n'
|
||||||
|
+ 'Encode variable bitrate settings:\n'
|
||||||
|
+ 'Target = 6000k\n'
|
||||||
|
+ 'Minimum = 4500k\n'
|
||||||
|
+ 'Maximum = 7500k\n'
|
||||||
|
+ '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n'
|
||||||
|
+ 'cmds set in extra_qsv_options will be IGNORED!\n'
|
||||||
|
+ 'File Transcoding...\n',
|
||||||
container: '.mkv',
|
container: '.mkv',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue