diff --git a/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js b/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js index 4943049..a52d188 100644 --- a/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js +++ b/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js @@ -1,7 +1,6 @@ /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ /* eslint-disable no-restricted-globals */ -// tdarrSkipTest const details = () => ({ id: 'Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only', Stage: 'Pre-processing', diff --git a/tests/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js b/tests/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js new file mode 100644 index 0000000..780bf5d --- /dev/null +++ b/tests/Community/Tdarr_Plugin_A47j_FFMPEG_NVENC_HEVC_Video_Only.js @@ -0,0 +1,112 @@ +/* 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: {}, + otherArguments: {}, + }, + output: { + processFile: true, + preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset medium -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 967680 -maxrate 1257984 -minrate 677376 -bufsize 1205959 -map_metadata:g -1', + container: '.mp4', + handBrakeMode: false, + FFmpegMode: true, + reQueueAfter: true, + infoLog: 'No valid resolution selected, defaulting to 8KUHD.\n' + + 'Video details: h264-720p \n' + + ' 1280x720x25@8 bits.\n' + + 'Video bitrate is 1206Kbps, overall is 1591Kbps. Calculated target is 1613Kbps.\n' + + '☒H264 Resolution is 720p, bitrate was 1206Kbps. HEVC target bitrate will be 968Kbps.\n' + + '☒Transcoding to HEVC.', + }, + }, { + input: { + file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')), + librarySettings: {}, + inputs: { + ffmpegPreset: 'veryslow', + container: 'mkv', + }, + otherArguments: {}, + }, + output: { + processFile: true, + preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 3207442 -maxrate 4717440 -minrate 2540160 -bufsize 3628800 -map_metadata:g -1', + container: '.mkv', + handBrakeMode: false, + FFmpegMode: true, + reQueueAfter: true, + infoLog: 'No valid resolution selected, defaulting to 8KUHD.\n' + + 'Video details: hevc-1080p \n' + + ' 1920x1080x25@8 bits.\n' + + 'Video bitrate is NaNKbps, overall is 3207Kbps. Calculated target is 3629Kbps.\n' + + '☒HEVC Bitrate for 1080p could not be determined, \n' + + ' using sensible default of 3207Kbps.\n' + + '☒Transcoding to HEVC.', + }, + }, + { + input: { + file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')), + librarySettings: {}, + inputs: { + maxResolution: '720p', + ffmpegPreset: 'veryslow', + container: 'mkv', + }, + otherArguments: {}, + }, + output: { + processFile: true, + preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid -resize 1280x720 ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 1612800 -maxrate 2096640 -minrate 1128960 -bufsize 1612800 -map_metadata:g -1', + container: '.mkv', + handBrakeMode: false, + FFmpegMode: true, + reQueueAfter: true, + infoLog: 'Resizing to 1280x720.\n' + + 'Video details: hevc-1080p \n' + + ' 1920x1080x25@8 bits.\n' + + 'Video bitrate is NaNKbps, overall is 3207Kbps. Calculated target is 1613Kbps.\n' + + '☒HEVC Bitrate for 1080p could not be determined, \n' + + ' using sensible default of 1613Kbps.\n' + + '☒Transcoding to HEVC.', + }, + }, + { + input: { + file: (() => { + // modify so no processing needed + const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json')); + file.ffProbeData.streams[0].codec_name = 'hevc'; + return file; + })(), + librarySettings: {}, + inputs: { + maxResolution: '1080p', + ffmpegPreset: 'veryslow', + container: 'mkv', + compressionFactor: '1', + }, + otherArguments: {}, + }, + output: { + processFile: false, + preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 ', + container: '.mkv', + handBrakeMode: false, + FFmpegMode: true, + reQueueAfter: true, + infoLog: 'Video details: hevc-1080p \n' + + ' 1918x1080x25@8 bits.\n' + + 'Video bitrate is 6454Kbps, overall is 8249Kbps. Calculated target is 51786Kbps.\n' + + '☑HEVC Bitrate is within limits.\n', + }, + }, +]; + +run(tests); diff --git a/tests/helpers/run.js b/tests/helpers/run.js index c4d0525..3ec85ab 100644 --- a/tests/helpers/run.js +++ b/tests/helpers/run.js @@ -1,10 +1,9 @@ const path = require('path'); const chai = require('chai'); const _ = require('lodash'); +const importFresh = require('import-fresh'); const scriptName = path.basename(process.mainModule.filename); -// eslint-disable-next-line import/no-dynamic-require -const { plugin } = require(`../../Community/${scriptName}`); const run = async (tests) => { try { @@ -15,6 +14,9 @@ const run = async (tests) => { let testOutput; let errorEncountered = false; + // eslint-disable-next-line import/no-dynamic-require + const { plugin } = importFresh(`../../Community/${scriptName}`); + try { // eslint-disable-next-line no-await-in-loop testOutput = await plugin( @@ -24,13 +26,13 @@ const run = async (tests) => { _.cloneDeep(test.input.otherArguments), ); } catch (err1) { - // eslint-disable-next-line no-console - console.error(err1); errorEncountered = err1; } if (test.error && test.error.shouldThrow) { if (errorEncountered !== false) { + // eslint-disable-next-line no-console + console.log(errorEncountered); chai.assert.deepEqual(errorEncountered.message, test.output); } else { throw new Error('Expected plugin error but none was thrown!'); diff --git a/tests/runTests.js b/tests/runTests.js index 2802bd8..fa23944 100644 --- a/tests/runTests.js +++ b/tests/runTests.js @@ -4,7 +4,7 @@ const fs = require('fs'); const chalk = require('chalk'); const childProcess = require('child_process'); -const filenames = fs.readdirSync(`${process.cwd()}/Community`); +const filenames = fs.readdirSync(`${process.cwd()}/Community`).reverse(); const run = async () => { for (let i = 0; i < filenames.length; i += 1) {