mirror of
https://github.com/gabehf/Tdarr_Plugins.git
synced 2026-03-17 19:26:27 -07:00
Adding tests for the plugin
This commit is contained in:
parent
bf723c032a
commit
888dd94724
2 changed files with 128 additions and 30 deletions
|
|
@ -86,6 +86,7 @@ Audio: (Only one audio stream is used!!)
|
||||||
/// ///////////////////////////////////////////////////////////////////////////////////////////////////
|
/// ///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
const details = () => ({
|
const details = () => ({
|
||||||
id: 'Tdarr_Plugin_JB69_JBHEVCQSV_MinimalFile',
|
id: 'Tdarr_Plugin_JB69_JBHEVCQSV_MinimalFile',
|
||||||
Stage: 'Pre-processing',
|
Stage: 'Pre-processing',
|
||||||
|
|
@ -129,7 +130,7 @@ how it works **this does a lot** and is 1 of 2 routines you should to run **Part
|
||||||
}, {
|
}, {
|
||||||
name: 'Target_Framerate',
|
name: 'Target_Framerate',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
defaultValue: 30,
|
defaultValue: 25,
|
||||||
inputUI: {
|
inputUI: {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
},
|
},
|
||||||
|
|
@ -183,8 +184,7 @@ how it works **this does a lot** and is 1 of 2 routines you should to run **Part
|
||||||
inputUI: {
|
inputUI: {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
},
|
},
|
||||||
tooltip: `Desired Audio Codec, if you change this it might require code changes.
|
tooltip: 'Desired Audio Codec, if you change this it might require code changes.',
|
||||||
\\nMust follow ISO-639-2 3 letter format. https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes`,
|
|
||||||
}, {
|
}, {
|
||||||
name: 'Target_Audio_Language',
|
name: 'Target_Audio_Language',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
|
@ -232,11 +232,11 @@ const findMediaInfoItem = (file, index) => {
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const plugin = (file, librarySettings, inputs, otherArguments) => {
|
const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
// eslint-disable-next-line global-require
|
// eslint-disable-next-line global-require
|
||||||
const lib = require('../methods/lib')();
|
const lib = require('../methods/lib')();
|
||||||
// eslint-disable-next-line no-unused-vars,no-param-reassign
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
|
||||||
inputs = lib.loadDefaultValues(inputs, details);
|
inputs = lib.loadDefaultValues(inputs, details);
|
||||||
|
|
||||||
const response = {
|
const response = {
|
||||||
|
|
@ -280,7 +280,7 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
const targetAudioCodec = inputs.Target_Audio_Codec;
|
const targetAudioCodec = inputs.Target_Audio_Codec;
|
||||||
const targetAudioLanguage = inputs.Target_Audio_Language.split(',');
|
const targetAudioLanguage = inputs.Target_Audio_Language;
|
||||||
const targetAudioBitratePerChannel = inputs.Target_Audio_Bitrate_Per_Channel;
|
const targetAudioBitratePerChannel = inputs.Target_Audio_Bitrate_Per_Channel;
|
||||||
const targetAudioChannels = inputs.Target_Audio_Channels;
|
const targetAudioChannels = inputs.Target_Audio_Channels;
|
||||||
|
|
||||||
|
|
@ -326,23 +326,26 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
} else {
|
} else {
|
||||||
const statsThres = Date.parse(new Date(new Date().setDate(new Date().getDate() - intStatsDays)).toISOString());
|
const statsThres = Date.parse(new Date(new Date().setDate(new Date().getDate() - intStatsDays)).toISOString());
|
||||||
|
|
||||||
|
if (inputs.test === true) {
|
||||||
|
response.infoLog += 'StatsThres: 1696281941214, StatsDate: 1528998569000\n';
|
||||||
|
} else {
|
||||||
response.infoLog += `StatsThres: ${statsThres}, StatsDate: ${datStats}\n`;
|
response.infoLog += `StatsThres: ${statsThres}, StatsDate: ${datStats}\n`;
|
||||||
|
}
|
||||||
if (datStats >= statsThres) {
|
if (datStats >= statsThres) {
|
||||||
bolStatsAreCurrent = true;
|
bolStatsAreCurrent = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//No longer needed if updating stats in Tdarr
|
||||||
|
//if (!bolStatsAreCurrent) {
|
||||||
|
// response.infoLog += 'Stats need to be updated! \n';
|
||||||
|
|
||||||
if (!bolStatsAreCurrent) {
|
// try {
|
||||||
response.infoLog += 'Stats need to be updated! \n';
|
// proc.execSync(`mkvpropedit --add-track-statistics-tags "${currentFileName}"`);
|
||||||
|
// return response;
|
||||||
try {
|
// } catch (err) {
|
||||||
proc.execSync(`mkvpropedit --add-track-statistics-tags "${currentFileName}"`);
|
// response.infoLog += 'Error Updating Status Probably Bad file, A remux will probably fix, will continue\n';
|
||||||
response.processFile = true;
|
// }
|
||||||
return response;
|
//}
|
||||||
} catch (err) {
|
|
||||||
response.infoLog += 'Error Updating Status Probably Bad file, A remux will probably fix, will continue\n';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logic Controls
|
// Logic Controls
|
||||||
|
|
@ -353,7 +356,6 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
let videoNewWidth = 0;
|
let videoNewWidth = 0;
|
||||||
let bolSource10bit = false;
|
let bolSource10bit = false;
|
||||||
let bolTranscodeSoftwareDecode = false;
|
let bolTranscodeSoftwareDecode = false;
|
||||||
let bolSoftwareTranscodeOpt = false;
|
|
||||||
|
|
||||||
let audioNewChannels = 0;
|
let audioNewChannels = 0;
|
||||||
let bolTranscodeAudio = false;
|
let bolTranscodeAudio = false;
|
||||||
|
|
@ -398,8 +400,15 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
streamBR = file.mediaInfo.track[MILoc].extra.FromStats_BitRate * 1;
|
streamBR = file.mediaInfo.track[MILoc].extra.FromStats_BitRate * 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let duration = 0;
|
||||||
|
if (parseFloat(file.ffProbeData?.format?.duration) > 0) {
|
||||||
|
duration = parseFloat(file.ffProbeData?.format?.duration);
|
||||||
|
} else {
|
||||||
|
duration = file.meta.Duration;
|
||||||
|
}
|
||||||
|
|
||||||
response.infoLog
|
response.infoLog
|
||||||
+= `Video stream ${i}:${Math.floor(file.meta.Duration / 60)}:`
|
+= `Video stream ${i}:${Math.floor(duration / 60)}:`
|
||||||
+ `${file.ffProbeData.streams[i].codec_name}${(bolSource10bit) ? '(10)' : ''}`;
|
+ `${file.ffProbeData.streams[i].codec_name}${(bolSource10bit) ? '(10)' : ''}`;
|
||||||
response.infoLog += `:${streamWidth}x${streamHeight}x${streamFPS}:${streamBR}bps \n`;
|
response.infoLog += `:${streamWidth}x${streamHeight}x${streamFPS}:${streamBR}bps \n`;
|
||||||
|
|
||||||
|
|
@ -437,9 +446,9 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
audioBitrate = file.mediaInfo.track[findMediaInfoItem(file, i)].extra.FromStats_BitRate * 1;
|
audioBitrate = file.mediaInfo.track[findMediaInfoItem(file, i)].extra.FromStats_BitRate * 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file.ffProbeData.streams[i].tags !== undefined
|
if (
|
||||||
&& (file.ffProbeData.streams[i].tags?.language === undefined
|
file.ffProbeData.streams[i].tags !== undefined
|
||||||
|| targetAudioLanguage.indexOf(file.ffProbeData.streams[i].tags.language.toLowerCase()) >= 0)
|
&& file.ffProbeData.streams[i].tags.language === targetAudioLanguage
|
||||||
) {
|
) {
|
||||||
response.infoLog
|
response.infoLog
|
||||||
+= `Audio stream ${i}:${targetAudioLanguage}`
|
+= `Audio stream ${i}:${targetAudioLanguage}`
|
||||||
|
|
@ -711,7 +720,6 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
let strChangeVideoRateString = '';
|
let strChangeVideoRateString = '';
|
||||||
// bolChangeFrameRateVideo=false;
|
|
||||||
if (bolChangeFrameRateVideo) {
|
if (bolChangeFrameRateVideo) {
|
||||||
// Used to change the framerate to the target framerate
|
// Used to change the framerate to the target framerate
|
||||||
strChangeVideoRateString = `fps=${targetFrameRate},`;
|
strChangeVideoRateString = `fps=${targetFrameRate},`;
|
||||||
|
|
@ -737,16 +745,13 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
strFormat += ',';
|
strFormat += ',';
|
||||||
}
|
}
|
||||||
// Used to make it sure the software decode is in the proper pixel format
|
// Used to make it sure the software decode is in the proper pixel format
|
||||||
strFormat += 'nv12|vaapi,hwupload';
|
strFormat += 'nv12|vaapi';
|
||||||
bolSoftwareTranscodeOpt = true;
|
|
||||||
}
|
}
|
||||||
if (strFormat.length > 0) {
|
if (strFormat.length > 0) {
|
||||||
strFormat += ',';
|
strFormat += ',';
|
||||||
}
|
}
|
||||||
if (!bolSoftwareTranscodeOpt) {
|
// Used to make it use software decode if necessary
|
||||||
// Used to make it use software decode if necessary
|
strFormat += 'hwupload';
|
||||||
strFormat += 'nv12,hwupload';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strFormat.length > 0) {
|
if (strFormat.length > 0) {
|
||||||
|
|
@ -787,7 +792,12 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
strFFcmd += ` -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=${new Date().toISOString()} `;
|
if (inputs.test === true) {
|
||||||
|
strFFcmd += ` -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=2023-10-12T00:00:49.483Z `;
|
||||||
|
} else {
|
||||||
|
strFFcmd += ` -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=${new Date().toISOString()} `;
|
||||||
|
}
|
||||||
|
|
||||||
if (bolDoChapters) {
|
if (bolDoChapters) {
|
||||||
strFFcmd += ' -map_chapters 0 ';
|
strFFcmd += ' -map_chapters 0 ';
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
88
tests/Community/Tdarr_Plugin_JB69_JBHEVCQSV_MinimalFile.js
Normal file
88
tests/Community/Tdarr_Plugin_JB69_JBHEVCQSV_MinimalFile.js
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
/* eslint max-len: 0 */
|
||||||
|
const _ = require('lodash');
|
||||||
|
const run = require('../helpers/run');
|
||||||
|
|
||||||
|
const tests = [
|
||||||
|
{
|
||||||
|
input: {
|
||||||
|
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||||
|
librarySettings: {},
|
||||||
|
inputs: {test:true},
|
||||||
|
otherArguments: {},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
processFile: true,
|
||||||
|
preset: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi <io> -max_muxing_queue_size 8000 -map 0:0 -c:v:0 hevc_vaapi -vf " scale_vaapi=format=p010" -b:v 964767 -map 0:1 -c:a:0 copy -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=2023-10-12T00:00:49.483Z -map_chapters 0 ',
|
||||||
|
container: '.mkv',
|
||||||
|
handBrakeMode: false,
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: 'Index 0 MediaInfo stream: 1 \nVideo stream 0:0:h264:1280x720x25:1205959bps \n' +
|
||||||
|
'Audio stream 1:???:aac:6:384000bps:First Audio Stream \n' +
|
||||||
|
'Pre Video Calc: 720, 1280, 25, 1843200 \nVideo existing Codex is h264, need to convert to hevc(10) \n' +
|
||||||
|
'Low source bitrate! \n' +
|
||||||
|
'Video existing Bitrate, 1205959, is close to, or lower than, target Bitrate, 1843200, with a codec change, using 80% of existing \n' +
|
||||||
|
'Post Video Calc: 720, 1280, 25, 964767 \n' +
|
||||||
|
'Using Unknown Audio Track !! \n' +
|
||||||
|
'File needs work. Transcoding. \n',
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
|
||||||
|
librarySettings: {},
|
||||||
|
inputs: {test:true},
|
||||||
|
otherArguments: {},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
processFile: true,
|
||||||
|
preset: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi <io> -max_muxing_queue_size 8000 -map 0:0 -c:v:0 hevc_vaapi -vf "fps=25, scale_vaapi=format=p010" -b:v 4142880 -map 0:2 -c:a:0 aac -b:a 128000 -map 0:s -scodec copy -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=2023-10-12T00:00:49.483Z -map_chapters 0 ',
|
||||||
|
container: '.mkv',
|
||||||
|
handBrakeMode: false,
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: 'StatsThres: 1696281941214, StatsDate: 1528998569000\n' +
|
||||||
|
'Index 0 MediaInfo stream: 1 \n' +
|
||||||
|
'Video stream 0:1:h264:1918x1080x25:6453995bps \n' +
|
||||||
|
'Audio stream 1:eng:flac:2:96000bps:First Audio Stream \n' +
|
||||||
|
'Audio stream 2:eng:ac3:2:192000bps:Higher Audio Rate \n' +
|
||||||
|
'Audio stream 3:eng:eac3:2:192000bps:Audio stream 4:???:aac:2:96000bps:First Audio Stream \n' +
|
||||||
|
'Audio stream 5:eng:aac:2:96000bps:SubTitles Found, will copy \n' +
|
||||||
|
'Pre Video Calc: 1080, 1918, 9999, 4142880 \n' +
|
||||||
|
'Video existing Codex is h264, need to convert to hevc(10) \n' +
|
||||||
|
'Video existing Bitrate, 6453995, is higher than target, 4142880, transcoding \n' +
|
||||||
|
'Post Video Calc: 1080, 1918, 9999, 4142880 \n' +
|
||||||
|
'Audio existing Bitrate, 192000, is higher than target, 128000 \n' +
|
||||||
|
'Audio Codec, ac3, is different than target, aac, Changing \n' +
|
||||||
|
'File needs work. Transcoding. \n',
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
file: _.cloneDeep(require('../sampleData/media/sampleH264_3.json')),
|
||||||
|
librarySettings: {},
|
||||||
|
inputs: {test:true},
|
||||||
|
otherArguments: {},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
processFile: true,
|
||||||
|
preset: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi <io> -max_muxing_queue_size 8000 -map 0:0 -c:v:0 hevc_vaapi -vf "fps=25, scale_vaapi=format=p010" -b:v 4142880 -map 0:2 -c:a:0 aac -b:a 128000 -map 0:s -scodec copy -map_metadata:g -1 -metadata JBDONEVERSION=1 -metadata JBDONEDATE=2023-10-12T00:00:49.483Z -map_chapters 0 ',
|
||||||
|
container: '.mkv',
|
||||||
|
handBrakeMode: false,
|
||||||
|
FFmpegMode: true,
|
||||||
|
reQueueAfter: true,
|
||||||
|
infoLog: 'StatsThres: 1696281941214, StatsDate: 1528998569000\n' +
|
||||||
|
'Index 0 MediaInfo stream: 1 \n' +
|
||||||
|
'Video stream 0:1:h264:1918x1080x25:6453995bps \n' +
|
||||||
|
'Audio stream 1:eng:flac:2:96000bps:First Audio Stream \n' +
|
||||||
|
'Audio stream 2:eng:ac3:2:192000bps:Higher Audio Rate \n' +
|
||||||
|
'Audio stream 3:eng:eac3:2:192000bps:Audio stream 4:???:aac:2:96000bps:First Audio Stream \n' +
|
||||||
|
'Audio stream 5:eng:aac:2:96000bps:SubTitles Found, will copy \n' +
|
||||||
|
'Pre Video Calc: 1080, 1918, 9999, 4142880 \n' +
|
||||||
|
'Video existing Codex is h264, need to convert to hevc(10) \n' +
|
||||||
|
'Video existing Bitrate, 6453995, is higher than target, 4142880, transcoding \n' +
|
||||||
|
'Post Video Calc: 1080, 1918, 9999, 4142880 \n' +
|
||||||
|
'Audio existing Bitrate, 192000, is higher than target, 128000 \n' +
|
||||||
|
'Audio Codec, ac3, is different than target, aac, Changing \n' +
|
||||||
|
'File needs work. Transcoding. \n',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
void run(tests);
|
||||||
Loading…
Add table
Add a link
Reference in a new issue