Revert "Add new tests (#311)"

This reverts commit 2a0a7e1bfc.
This commit is contained in:
HaveAGitGat 2022-05-22 17:43:42 +01:00
parent 2a0a7e1bfc
commit c729fad9f5
113 changed files with 102 additions and 7662 deletions

View file

@ -1,92 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 aac -ac 2',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'The required channel count 2 is lower than the highest available channel count (6). Adding! \n',
handbrakeMode: false,
ffmpegMode: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -ac 2',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'The required channel count 2 is lower than the highest available channel count (6). Adding! \n',
handbrakeMode: false,
ffmpegMode: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
channels: 6,
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -ac 6',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'The required channel count 6 is lower than the highest available channel count (6). Adding! \n',
handbrakeMode: false,
ffmpegMode: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
channels: 8,
language: 'fr',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -ac 6',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'The required channel count (8) is higher than the highest channel available in specified lang tag (6). Adding lower channel track. \n',
handbrakeMode: false,
ffmpegMode: true,
},
},
];
run(tests);

View file

@ -1,74 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 1080p30" -e x265 --all-subtitles',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'File is being transcoded using HandBrake \n',
handbrakeMode: true,
ffmpegMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
handbrakePreset: 'Fast 576p25',
videoEncoder: 'nvenc_h265',
keepSubtitles: 'true',
container: 'mp4',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Fast 576p25" -e nvenc_h265 --all-subtitles',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'File is being transcoded using HandBrake \n',
handbrakeMode: true,
ffmpegMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
handbrakePreset: 'Fast 576p25',
videoEncoder: 'nvenc_h265',
keepSubtitles: 'false',
container: 'mov',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Fast 576p25" -e nvenc_h265 ',
container: '.mov',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: 'File is being transcoded using HandBrake \n',
handbrakeMode: true,
ffmpegMode: false,
},
},
];
run(tests);

View file

@ -1,66 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '<io> -map 0 -c copy',
container: '.mkv',
handbrakeMode: false,
ffmpegMode: true,
reQueueAfter: true,
infoLog: 'File is being transcoded using custom arguments \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
cli: 'handbrake',
arguments: '-Z "Very Fast 1080p30" --all-subtitles --all-audio',
container: 'mp4',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 1080p30" --all-subtitles --all-audio',
container: '.mp4',
handbrakeMode: true,
ffmpegMode: false,
reQueueAfter: true,
infoLog: 'File is being transcoded using custom arguments \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
cli: 'ffmpeg',
arguments: '<io>-c:v libx265 -crf 23 -ac 6 -c:a aac -preset veryfast',
container: 'mov',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '<io>-c:v libx265 -crf 23 -ac 6 -c:a aac -preset veryfast',
container: '.mov',
handbrakeMode: false,
ffmpegMode: true,
reQueueAfter: true,
infoLog: 'File is being transcoded using custom arguments \n',
},
},
];
run(tests);

View file

@ -1,89 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:s? -map 0:d? -c copy -c:a:0 aac -ac 2',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'No en streams. The required channel count 2 is lower than the highest available channel count (6).Adding it and removing others! \n',
handbrakeMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -ac 2',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'No en streams. The required channel count 2 is lower than the highest available channel count (6).Adding it and removing others! \n',
handbrakeMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
language: 'fr',
channels: '6',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:1 -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -ac 6',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'No fr streams. The required channel count 6 is lower than the highest available channel count (6).Adding it and removing others! \n',
handbrakeMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
audioCodec: 'aac',
language: 'und',
channels: '8',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'The best und stream already exists. It is the only audio stream. \n',
handbrakeMode: false,
},
},
];
run(tests);

View file

@ -1,72 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
infoLog: 'Streams are in the correct order!',
},
},
{
// orig
// 0 vid h264
// 1 flac eng
// 2 ac3 eng
// 3 eac3 eng
// 4 aac fre
// 5 aac eng
// 6 sub fre
// expect
// 4 aac fre
// 2 ac3 eng
// 1 flac eng
// 3 eac3 eng
// 5 aac eng
// 6 sub fre
// 0 vid h264
// console.log(streams.map(stream => {
// return {
// "index": stream.index,
// codec_name: stream.codec_name,
// codec_type: stream.codec_type,
// language: stream.tags.language,
// }
// }))
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {
processOrder: 'codecs,channels,languages,streamTypes',
languages: 'fre,eng',
streamTypes: 'audio,subtitle,video',
codecs: 'ac3,flac,eac3,aac',
channels: '7.1,5.1,2,1',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '<io> -c copy -map 0:4 -map 0:2 -map 0:1 -map 0:3 -map 0:5 -map 0:6 -map 0:0',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
infoLog: 'Streams are not in the correct order!',
},
},
];
run(tests);

View file

@ -1,65 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is not in mkv \n',
handbrakeMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
container: 'mkv',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is not in mkv \n',
handbrakeMode: false,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
container: 'mp4',
},
otherArguments: {},
},
output: {
processFile: false,
preset: ', -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is already in mp4 \n',
handbrakeMode: false,
},
},
];
run(tests);

View file

@ -1,66 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: "File does not have any audio streams which aren't in aac \n",
handbrakeMode: false,
ffmpegMode: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 aac -c:a:1 aac -c:a:2 aac',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: "File has audio streams which aren't in aac \n",
handbrakeMode: false,
ffmpegMode: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {
audioCodec: 'eac3',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 eac3 -c:a:1 eac3 -c:a:3 eac3 -c:a:4 eac3',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: "File has audio streams which aren't in eac3 \n",
handbrakeMode: false,
ffmpegMode: true,
},
},
];
run(tests);

View file

@ -1,64 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
infoLog: '☑File bitrate is within filter limits. Moving to next plugin.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 500,
lowerBound: 0,
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: '☒File bitrate is not within filter limits. Breaking out of plugin stack.\n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 10000,
lowerBound: 0,
},
otherArguments: {},
},
output: {
processFile: true,
infoLog: '☑File bitrate is within filter limits. Moving to next plugin.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 10000,
lowerBound: 9000,
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: '☒File bitrate is not within filter limits. Breaking out of plugin stack.\n',
},
},
];
run(tests);

View file

@ -1,59 +0,0 @@
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: { processFile: false, infoLog: '' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecsToProcess: 'h264',
},
otherArguments: {},
},
output: { processFile: true, infoLog: 'File is in codecsToProcess. Moving to next plugin.' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecsToProcess: 'h265',
},
otherArguments: {},
},
output: { processFile: false, infoLog: 'File is not in codecsToProcess. Breaking out of plugin stack.' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecsToNotProcess: 'h264',
},
otherArguments: {},
},
output: { processFile: false, infoLog: 'File is in codecsToNotProcess. Breaking out of plugin stack.' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecsToNotProcess: 'h265',
},
otherArguments: {},
},
output: { processFile: true, infoLog: 'File is not in codecsToNotProcess. Moving to next plugin.' },
},
];
run(tests);

View file

@ -1,59 +0,0 @@
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: { processFile: false, infoLog: '' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecTagStringsToProcess: 'avc1,rand',
},
otherArguments: {},
},
output: { processFile: true, infoLog: 'File is in codecTagStringsToProcess. Moving to next plugin.' },
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecTagStringsToNotProcess: 'avc1,rand',
},
otherArguments: {},
},
output: { processFile: false, infoLog: 'File is in codecTagStringsToNotProcess. Breaking out of plugin stack.' },
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {
codecTagStringsToProcess: 'avc1,rand',
},
otherArguments: {},
},
output: { processFile: false, infoLog: 'File is not in codecTagStringsToProcess. Breaking out of plugin stack.' },
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {
codecTagStringsToNotProcess: 'avc1,rand',
},
otherArguments: {},
},
output: { processFile: true, infoLog: 'File is not in codecTagStringsToNotProcess. Moving to next plugin.' },
},
];
run(tests);

View file

@ -1,74 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false, infoLog: '',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
resolutionsToProcess: '480p,720p',
},
otherArguments: {},
},
output: {
processFile: true,
infoLog: 'File is in resolutionsToProcess. Moving to next plugin.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
resolutionsToProcess: '480p,1080p',
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: 'File is not in resolutionsToProcess. Breaking out of plugin stack.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
resolutionsToNotProcess: '480p,720p',
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: 'File is in resolutionsToNotProcess. Breaking out of plugin stack.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
resolutionsToNotProcess: '480p,1080p',
},
otherArguments: {},
},
output: {
processFile: true,
infoLog: 'File is not in resolutionsToNotProcess. Moving to next plugin.',
},
},
];
run(tests);

View file

@ -1,64 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
infoLog: 'File is within lower and upper bound size limits. Moving to next plugin.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 0.5,
lowerBound: 0,
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: 'File is not within lower and upper bound size limits. Breaking out of plugin stack.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 2,
lowerBound: 0,
},
otherArguments: {},
},
output: {
processFile: true,
infoLog: 'File is within lower and upper bound size limits. Moving to next plugin.',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: 4,
lowerBound: 2,
},
otherArguments: {},
},
output: {
processFile: false,
infoLog: 'File is not within lower and upper bound size limits. Breaking out of plugin stack.',
},
},
];
run(tests);

View file

@ -1,41 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -map 0:s? -map 0:d? -c copy -c:v:0 libx265 -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☒File is not hevc! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
];
run(tests);

View file

@ -1,81 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 1080p30" --all-subtitles --all-audio',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not in desired codec! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is already in hevc! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecs_to_exclude: 'h264',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is already in h264! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecs_to_exclude: 'hevc',
cli: 'handbrake',
transcode_arguments: '-Z "Very Fast 480p30"',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 480p30"',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not in desired codec! \n',
},
},
];
run(tests);

View file

@ -1,41 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -c copy -c:v:0 libx265 -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☒File is not hevc! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
];
run(tests);

View file

@ -1,41 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -c copy -c:v:0 libx265 -crf 20',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☒File is not hevc! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
];
run(tests);

View file

@ -1,41 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a -c copy -c:v:0 hevc_nvenc -crf 20',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☒File is not hevc! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
];
run(tests);

View file

@ -1,43 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ Preferred language is already first audio track! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {
preferred_language: 'fre',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c copy -map 0:v -map 0:a:3 -disposition:a:0 default -map 0:a:0 -map 0:a:1 -disposition:a:1 0 -map 0:a:2 -disposition:a:2 0 -disposition:a:3 0 -map 0:a:4 -disposition:a:4 0 -map 0:s? -map 0:d? ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒ Desired audio lang is not first audio stream, moving! \n',
},
},
];
run(tests);

View file

@ -1,62 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☒ No subtitle tracks in desired language! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_2.json'),
librarySettings: {},
inputs: {
preferred_language: 'fre',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ Preferred language is already first subtitle track! \n',
},
}, {
input: {
file: require('../sampleData/media/sampleH264_3.json'),
librarySettings: {},
inputs: {
preferred_language: 'fre',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c copy -map 0:v -map 0:a -map 0:s:1 -disposition:s:0 default -map 0:s:0 -disposition:s:1 0 -map 0:d? ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒ Desired subtitle lang is not first subtitle stream, moving! \n',
},
},
];
run(tests);

View file

@ -1,44 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ File is already in h264, no need to transcode! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH265_1.json'),
librarySettings: {},
inputs: {
handbrake_preset: 'Very Fast 1080p30',
output_container: '.mp4',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 1080p30" -e nvenc_h264 --all-audio --all-subtitles',
container: '.mp4',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒ File is not in h264, transcoding! \n',
},
},
];
run(tests);

View file

@ -1,112 +0,0 @@
/* 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);

View file

@ -1,75 +0,0 @@
/* 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: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☒ Removing audio track in language und\n'
+ '☒ *** All audio tracks would have been removed. Defaulting to keeping all tracks for this file.\n'
+ '☒ Transcoding to HEVC using NVidia NVENC\n'
+ '☑ No subtitle processing necessary',
processFile: true,
preset: ' -c:v h264_cuvid,-map 0 -map -0:d -c:v hevc_nvenc -qmin 0 -cq:v 30 -b:v 602k -maxrate:v 2602k -preset medium -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -c:a copy -c:s copy -max_muxing_queue_size 9999 -bf 5 -analyzeduration 2147483647 -probesize 2147483647',
reQueueAfter: true,
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☑ File is in HEVC codec and in MKV\n'
+ '☑ No video processing necessary\n'
+ '☑ No subtitle processing necessary\n'
+ '☑ No need to process file',
processFile: false,
preset: ',-map 0 -map -0:d -c:v copy -c:a copy -c:s copy -max_muxing_queue_size 9999 -bf 5 -analyzeduration 2147483647 -probesize 2147483647',
reQueueAfter: true,
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].bit_rate = undefined;
return file;
})(),
librarySettings: {},
inputs: {
target_bitrate_720p: '1500000',
},
otherArguments: {},
},
output: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☒ Removing audio track in language und\n'
+ '☒ *** All audio tracks would have been removed. Defaulting to keeping all tracks for this file.\n'
+ '☒ Transcoding to HEVC using NVidia NVENC\n'
+ '☑ No subtitle processing necessary',
processFile: true,
preset: ' -c:v h264_cuvid,-map 0 -map -0:d -c:v hevc_nvenc -qmin 0 -cq:v 30 -b:v 1500k -maxrate:v 3500k -preset medium -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -c:a copy -c:s copy -max_muxing_queue_size 9999 -bf 5 -analyzeduration 2147483647 -probesize 2147483647',
reQueueAfter: true,
},
},
];
run(tests);

View file

@ -1,107 +0,0 @@
/* 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: {
container: '.mkv',
processFile: true,
preset: ', -sn -map 0:v -c:v copy -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -map 0:a -c:a copy ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Converting video, NOT resizing. 720p, h264 --> 720p, hevc. bitrate = 1517 --> 758, multiplier 0.5. \n'
+ 'Not converting audio. \n'
+ '2 channels - \n'
+ '6 channels - und aac \n'
+ '8 channels - ',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
container: '.mkv',
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is processed already, nothing to do',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
resize: 'true',
},
otherArguments: {},
},
output: {
container: '.mkv',
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is processed already, nothing to do',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
bitrate_cutoff: '6000',
},
otherArguments: {},
},
output: {
container: '.mkv',
processFile: true,
preset: ', -sn -map 0:v -c:v copy -b:v 3933k -minrate 2753k -maxrate 5112k -bufsize 7866k -map 0:a -c:a copy ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Converting video, NOT resizing. 1080p, h264 --> 1080p, hevc. bitrate = 7866 --> 3933, multiplier 0.5. \n'
+ 'Not converting audio. \n'
+ '2 channels - eng flac \n'
+ '6 channels - \n'
+ '8 channels - ',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
bitrate_cutoff: '8000',
},
otherArguments: {},
},
output: {
container: '.mkv',
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is processed already, nothing to do',
},
},
];
run(tests);

View file

@ -1,59 +0,0 @@
/* 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: {
preset: ', -map_metadata 0 -id3v2_version 3 -b:a 320k',
container: '.mp3',
handbrakeMode: false,
ffmpegMode: true,
processFile: false,
reQueueAfter: true,
infoLog: 'undefined☒Codec excluded \n ☑Codec not excluded \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleAAC_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
preset: ', -map_metadata 0 -id3v2_version 3 -b:a 320k',
container: '.mp3',
handbrakeMode: false,
ffmpegMode: true,
processFile: false,
reQueueAfter: true,
infoLog: 'undefined☒Codec excluded \n ☑Codec not excluded \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleMP3_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
preset: ', -map_metadata 0 -id3v2_version 3 -b:a 320k',
container: '.mp3',
handbrakeMode: false,
ffmpegMode: true,
processFile: false,
reQueueAfter: true,
infoLog: 'undefined☒Codec excluded \n ☒Codec excluded \n',
},
},
];
run(tests);

View file

@ -1,145 +0,0 @@
/* 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: '-c:v h264_cuvid, -map 0 -c:v hevc_nvenc -cq:v 19 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -spatial_aq:v 1 -rc-lookahead:v 32 -c:a copy -c:s copy -max_muxing_queue_size 9999 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mkv. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is already hevc or vp9 & in mkv. \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-c:v h264_cuvid, -map 0 -c:v hevc_nvenc -cq:v 19 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -spatial_aq:v 1 -rc-lookahead:v 32 -c:a copy -c:s copy -max_muxing_queue_size 9999 -pix_fmt p010le ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mp4. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
bitrate_cutoff: '10000',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Current bitrate is below set cutoff of 10000. Cancelling plugin. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
bitrate_cutoff: '1000',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-c:v h264_cuvid, -map 0 -c:v hevc_nvenc -cq:v 19 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -spatial_aq:v 1 -rc-lookahead:v 32 -c:a copy -c:s copy -max_muxing_queue_size 9999 -pix_fmt p010le ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mp4. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
force_conform: 'false',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -c copy ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is hevc or vp9 but is not in mp4 container. Remuxing. \n',
container: '.mp4',
},
},
];
run(tests);

View file

@ -1,145 +0,0 @@
/* 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: ',-map 0 -c:v libx265 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -c:a copy -c:s copy -max_muxing_queue_size 9999 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mkv. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is already hevc or vp9 & in mkv. \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0 -c:v libx265 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -c:a copy -c:s copy -max_muxing_queue_size 9999 -pix_fmt p010le ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mp4. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
bitrate_cutoff: '10000',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Current bitrate is below set bitrate cutoff of 10000. Nothing to do, cancelling plugin. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
enable_10bit: 'true',
force_conform: 'true',
bitrate_cutoff: '1000',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0 -c:v libx265 -b:v 758k -minrate 530k -maxrate 985k -bufsize 1517k -c:a copy -c:s copy -max_muxing_queue_size 9999 -pix_fmt p010le ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Container for output selected as mp4. \n'
+ 'Current bitrate = 1517 \n'
+ 'Bitrate settings: \n'
+ 'Target = 758 \n'
+ 'Minimum = 530 \n'
+ 'Maximum = 985 \n'
+ 'File is not hevc or vp9. Transcoding. \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
force_conform: 'false',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -c copy ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File is hevc or vp9 but is not in mp4 container. Remuxing. \n',
container: '.mp4',
},
},
];
run(tests);

View file

@ -1,45 +0,0 @@
/* 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: ', -map 0 -c copy -max_muxing_queue_size 9999 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File is mp4 but requested to be mkv container. Remuxing. \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
force_conform: 'true',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is already in mp4 container. \n',
container: '.mp4',
},
},
];
run(tests);

View file

@ -1,46 +0,0 @@
/* 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: ', -metadata title= -c copy -map 0 -max_muxing_queue_size 9999',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has title metadata. Removing \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.meta.Title = undefined;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File has no title metadata \n',
},
},
];
run(tests);

View file

@ -1,98 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: "☑File doesn't contain audio tracks which are unwanted or that require tagging.\n",
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
language: 'eng',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:a:3 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Audio stream 0:a:3 has unwanted language tag fre, removing. \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[3].tags.title = 'description';
return file;
})(),
librarySettings: {},
inputs: {
language: 'eng',
commentary: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:a:2 -map -0:a:3 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Audio stream 0:a:2 detected as being descriptive, removing. \n'
+ '☒Audio stream 0:a:3 has unwanted language tag fre, removing. \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[2].tags.title = 'description';
file.ffProbeData.streams[3].tags.language = 'und';
return file;
})(),
librarySettings: {},
inputs: {
language: 'eng',
commentary: 'true',
tag_language: 'eng',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:a:1 -map -0:a:2 -metadata:s:a:2 language=eng -map -0:a:3 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Audio stream 0:a:1 detected as being descriptive, removing. \n'
+ '☒Audio stream 0:a:2 has unwanted language tag und, removing. \n'
+ '☒Audio stream 0:a:2 detected as having no language, tagging as eng. \n'
+ '☒Audio stream 0:a:3 has unwanted language tag fre, removing. \n',
},
},
];
run(tests);

View file

@ -1,72 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: "☑File doesn't contain subtitle tracks which are unwanted or that require tagging.\n",
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:s:0 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Subtitle stream 0:s:0 has unwanted language tag fre, removing. \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[7] = _.cloneDeep(file.ffProbeData.streams[6]);
file.ffProbeData.streams[6].tags.title = 'description';
file.ffProbeData.streams[7].tags.language = 'und';
return file;
})(),
librarySettings: {},
inputs: {
language: 'eng,und',
commentary: 'true',
tag_language: 'eng',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:s:0 -map -0:s:0 -metadata:s:s:1 language=eng -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Subtitle stream 0:s:0 has unwanted language tag fre, removing. \n'
+ '☒Subtitle stream 0:s:0 detected as being descriptive, removing. \n'
+ '☒Subtitle stream 0:s:1 has no language, tagging as eng. \n',
},
},
];
run(tests);

View file

@ -1,90 +0,0 @@
/* 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: false,
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Plugin has not been configured, please configure required options. Skipping this plugin. \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
aac_stereo: 'true',
},
otherArguments: {},
},
output: {
processFile: false,
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File contains all required audio formats. \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
aac_stereo: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Audio track is 2 channel but is not AAC. Converting. \n'
+ '☒Audio track is 2 channel but is not AAC. Converting. \n'
+ '☒Audio track is 2 channel but is not AAC. Converting. \n',
preset: ', -map 0 -c:v copy -c:a copy -c:a:0 aac -c:a:1 aac -c:a:2 aac -strict -2 -c:s copy -max_muxing_queue_size 9999 ',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[1].channels = 8;
return file;
})(),
librarySettings: {},
inputs: {
aac_stereo: 'false',
downmix: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒Audio track is 8 channel, no 6 channel exists. Creating 6 channel from 8 channel. \n',
preset: ', -map 0 -c:v copy -c:a copy -map 0:1 -c:a:0 ac3 -ac 6 -metadata:s:a:0 title="5.1" -strict -2 -c:s copy -max_muxing_queue_size 9999 ',
},
},
];
run(tests);

View file

@ -1,103 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☑ Streams are in expected order. \n ',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☑ Streams are in expected order. \n ',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[1].channels = 8;
file.ffProbeData.streams[2].channels = 6;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:0 -map 0:3 -map 0:4 -map 0:5 -map 0:2 -map 0:1 -map 0:6 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☒ Audio 6ch not second. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Streams are out of order, reorganizing streams. Video, Audio, Subtitles. \n',
reQueueAfter: true,
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[1].channels = 8;
file.ffProbeData.streams[2].channels = 6;
const video = file.ffProbeData.streams.splice(0, 1)[0];
file.ffProbeData.streams.push(video);
const subs = file.ffProbeData.streams.splice(5, 1)[0];
file.ffProbeData.streams.unshift(subs);
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:6 -map 0:3 -map 0:4 -map 0:5 -map 0:2 -map 0:1 -map 0:0 -c copy -max_muxing_queue_size 9999',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☒ Audio not second. \n'
+ '☒ Audio not second. \n'
+ '☒ Audio 6ch not second. \n'
+ '☒ Audio not second. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Audio not second. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Audio not second. \n'
+ '☒ Audio 2ch not first. \n'
+ '☒ Video not first. \n'
+ '☒ Streams are out of order, reorganizing streams. Video, Audio, Subtitles. \n',
reQueueAfter: true,
},
},
];
run(tests);

View file

@ -1,46 +0,0 @@
/* 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: false,
preset: '',
handBrakeMode: false,
container: '.mp4',
FFmpegMode: true,
reQueueAfter: true,
infoLog: "☑File doesn't contain any unwanted image format streams.\n",
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[0].codec_name = 'mjpeg';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0 -c copy -max_muxing_queue_size 9999 -map -v:0 ',
handBrakeMode: false,
container: '.mkv',
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has image format stream, removing. \n',
},
},
];
run(tests);

View file

@ -1,47 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: "☑File doesn't contain subtitle or audio codecs which were unwanted or that require tagging.\n",
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
tag_subtitle_codecs: 'subrip',
tag_audio_codecs: 'aac',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -map -0:a:3 -map -0:a:4 -map -0:s:0 -c copy -max_muxing_queue_size 4096',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒audio stream detected as unwanted. removing audio stream 0:a:3 - Français E-AC3 2.0 - aac \n'
+ '☒audio stream detected as unwanted. removing audio stream 0:a:4 - Anglais E-AC3 2.0 - aac \n'
+ '☒Subtitle stream detected as unwanted. removing subtitle stream 0:s:0 - Français - subrip. \n',
},
},
];
run(tests);

View file

@ -1,107 +0,0 @@
/* 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: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi ,-map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c copy -c:v:0 hevc_vaapi -b:v 758k -minrate 530k -maxrate 985k -bufsize 1M -max_muxing_queue_size 1024 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☒ Video stream 0 is not HEVC, transcode required.\n'
+ ' ☑ Stream analysis complete, processing required.\n'
+ ' ',
container: 'mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑ Stream analysis complete, no processing required.\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
minBitrate: '4000',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi ,-map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c copy ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: "☒ Input file's bitrate 1517 is lower than the minimum bitrate threshold of 4000. Skipping this plugin.\n"
+ '☑ Stream analysis complete, processing required.\n'
+ ' ',
container: 'mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
remuxOnly: 'true',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☒ RemuxOnly is enabled and file is not a remux. Unable to process.\n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.file = `remux ${file.file}`;
return file;
})(),
librarySettings: {},
inputs: {
remuxOnly: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ' -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi ,-map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c copy -c:v:0 hevc_vaapi -b:v 3933k -minrate 2753k -maxrate 5112k -bufsize 1M -max_muxing_queue_size 1024 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☒ Video stream 0 is not HEVC, transcode required.\n'
+ ' ☑ Stream analysis complete, processing required.\n'
+ ' ',
container: 'mkv',
},
},
];
run(tests);

View file

@ -1,42 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File has no title metadata \n☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,66 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is already in h264! \n☑File has no subs \n☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Very Fast 1080p30"',
container: '.mp4',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not in h264! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.meta.Title = undefined;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is already in h264! \n'
+ '☑File has no subs \n'
+ '☑File has no title metadata☑File has aac track \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,66 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is already in h264! \n☑File has no subs \n☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "Fast 1080p30"',
container: '.mp4',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not in h264! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.meta.Title = undefined;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is already in h264! \n'
+ '☑File has no subs \n'
+ '☑File has no title metadata☑File has aac track \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,45 +0,0 @@
/* eslint max-len: 0 */
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ File does not have any streams that need to be transcoded! \n',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
codecs_to_transcode: 'aac',
codec: 'eac3',
bitrate: '640k',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c copy -map 0:v -map 0:1 -c:1 eac3 -b:a 640k -map 0:s? -map 0:d? -max_muxing_queue_size 9999',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: "☒ File has streams which aren't in desired codec! \n",
},
},
];
run(tests);

View file

@ -1,68 +0,0 @@
/* eslint max-len: 0 */
const _ = require('lodash');
const run = require('../helpers/run');
const tests = [
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {},
otherArguments: {
originalLibraryFile: require('../sampleData/media/sampleH264_1.json'),
},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'New file has size 1.008 MB which is 100% of original file size: 1.008 MB',
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: '110',
lowerBound: '35',
},
otherArguments: {
originalLibraryFile: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.file_size = 3;
return file;
})(),
},
},
output: 'New file size not within limits. New file has size 1.008 MB which is 33% of original file size: 3.000 MB. lowerBound is 35%',
error: {
shouldThrow: true,
},
},
{
input: {
file: require('../sampleData/media/sampleH264_1.json'),
librarySettings: {},
inputs: {
upperBound: '120',
lowerBound: '35',
},
otherArguments: {
originalLibraryFile: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.file_size = 0.1;
return file;
})(),
},
},
output: 'New file size not within limits. New file has size 1.008 MB which is 1007% of original file size: 0.100 MB. upperBound is 120%',
error: {
shouldThrow: true,
},
},
];
run(tests);

View file

@ -1,45 +0,0 @@
/* 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: ', -map 0 -c copy -c:v:0 libx265 -preset:v slow -pix_fmt yuv420p10le -x265-params "crf=22:aq-mode=3"',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File is not in hevc! \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑File is already in hevc! \n'
+ '☑ All audio streams are in aac! \n'
+ '☑File has no title metadata \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,59 +0,0 @@
/* 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: ',-map 0 -c:v copy -c:a copy -c:a:0 ac3 -c:s copy -c:d copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒ File has surround audio which is NOT in ac3! \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ All surround audio streams are in ac3! \n☑File meets conditions! \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: '☑ All surround audio streams are in ac3! \n☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,86 +0,0 @@
/* 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: '-fflags +genpts -hwaccel qsv -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -b:v 759k -minrate 569k -maxrate 949k -bufsize 1517k -preset slow \n'
+ ' -c:a copy -c:s copy -max_muxing_queue_size 9999 ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑ It looks like the current bitrate is 1517k. \n'
+ '\n'
+ 'Container for output selected as mkv. \n'
+ 'Encode variable bitrate settings: \n'
+ 'Target = 759k \n'
+ 'Minimum = 569k \n'
+ 'Maximum = 949k \n'
+ 'File Transcoding... \n',
container: '.mkv',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
encoder_speedpreset: 'fast',
enable_10bit: 'true',
},
otherArguments: {},
},
output: {
processFile: true,
preset: '-fflags +genpts -hwaccel qsv<io> -map 0 -c:v hevc_qsv -b:v 759k -minrate 569k -maxrate 949k -bufsize 1517k -preset fast \n'
+ ' -c:a copy -c:s copy -max_muxing_queue_size 9999 -profile:v main10 -pix_fmt p010le ',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑ It looks like the current bitrate is 1517k. \n'
+ '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format \n'
+ '\n'
+ 'Container for output selected as mp4. \n'
+ 'Encode variable bitrate settings: \n'
+ 'Target = 759k \n'
+ 'Minimum = 569k \n'
+ 'Maximum = 949k \n'
+ 'File Transcoding... \n',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
container: 'mp4',
encoder_speedpreset: 'fast',
enable_10bit: 'true',
bitrate_cutoff: '2000',
},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑ It looks like the current bitrate is 1517k. \n'
+ '☑ Current bitrate is below set cutoff of 2000k. Cancelling plugin. \n',
container: '.mp4',
},
},
];
run(tests);

View file

@ -1,49 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☑ No 2 channel audio stream exists. \n ',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.ffProbeData.streams[1].channels = 6;
return file;
})(),
librarySettings: {},
inputs: {
channels: '6',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0 -c copy -disposition:1 default -disposition:2 0 -disposition:3 0 -disposition:4 0 -disposition:5 0 ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
infoLog: '☒ Matching audio stream is not set to default. \n'
+ '☒ Setting 6 channel matching audio stream to default. Remove default from all other audio streams \n',
reQueueAfter: true,
},
},
];
run(tests);

View file

@ -1,50 +0,0 @@
/* 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: '-c:v h264_cuvid,-map 0 -dn -c:v hevc_nvenc -pix_fmt p010le -qmin 0 -cq:v 30 -b:v 964k -maxrate:v 2964k -preset slow -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -a53cc 0 -c:a copy -c:s copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n'
+ '☒File is 720p!\n'
+ '☒File is not hevc!\n'
+ '☒File bitrate is 1205kb!\n'
+ 'File bitrate is LOWER than the Default Target Bitrate!\n'
+ '☒Target Bitrate set to 964kb!\n'
+ 'File is being transcoded!\n',
maxmux: false,
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
maxmux: false,
},
},
];
run(tests);

View file

@ -1,47 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☑File is a video Without Mjpeg! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].codec_name = 'mjpeg';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: ',-map 0 -map -0:v:1 -c:v copy -c:a copy -c:s copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not a video but has Mjpeg Stream! \n'
+ '☑File is a video With Mjpeg! \n',
},
},
];
run(tests);

View file

@ -1,62 +0,0 @@
/* 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: ', -map_metadata -1 -map 0:v -map 0:a -c:v copy -c:a copy -c:s mov_text',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑ File is already in h264!\n☒ File has title metadata\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map_metadata -1 -map 0:V -map 0:a -c:v libx264 -preset medium -c:a aac -strict -2 -c:s mov_text',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒ File is not in h264!\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {
FFmpeg_preset: 'fast',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map_metadata -1 -map 0:V -map 0:a -c:v libx264 -preset fast -c:a aac -strict -2 -c:s mov_text',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒ File is not in h264!\n',
},
},
];
run(tests);

View file

@ -1,110 +0,0 @@
/* 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: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☒ Will convert multi channel audio to AC3\n'
+ '☒ Transcoding to HEVC (software)\n'
+ 'Encoder configuration:\n'
+ '• Original Bitrate: 1517\n'
+ '• Target Bitrate: 1517\n'
+ '• Minimum Bitrate: 1061\n'
+ '• Maximum Bitrate: 1972\n'
+ '\n'
+ '☑ No subtitle processing necessary',
processFile: true,
preset: ',-map 0 -map -0:d -c:v libx265 -b:v 1517k -minrate 1061k -maxrate 1972k -bufsize 1517k -c:a copy -c:a:0 ac3 -c:s copy -max_muxing_queue_size 4096',
reQueueAfter: false,
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
nvenc: 'true',
},
otherArguments: {},
},
output: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☒ Will convert multi channel audio to AC3\n'
+ '☒ Transcoding to HEVC using NVidia NVENC\n'
+ 'Encoder configuration:\n'
+ '• Original Bitrate: 1517\n'
+ '• Target Bitrate: 1517\n'
+ '• Minimum Bitrate: 1061\n'
+ '• Maximum Bitrate: 1972\n'
+ '\n'
+ '☑ No subtitle processing necessary',
processFile: true,
preset: '-c:v h264_cuvid,-map 0 -map -0:d -c:v hevc_nvenc -cq:v 19 -b:v 1517k -minrate 1061k -maxrate 1972k -bufsize 1517k -spatial_aq:v 1 -rc-lookahead:v 32 -c:a copy -c:a:0 ac3 -c:s copy -max_muxing_queue_size 4096',
reQueueAfter: false,
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
librarySettings: {},
inputs: {
nvenc: 'false',
qsv: 'true',
},
otherArguments: {},
},
output: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☒ Will convert multi channel audio to AC3\n'
+ '☒ Transcoding to HEVC using VAAPI\n'
+ 'Encoder configuration:\n'
+ '• Original Bitrate: 1517\n'
+ '• Target Bitrate: 1517\n'
+ '• Minimum Bitrate: 1061\n'
+ '• Maximum Bitrate: 1972\n'
+ '\n'
+ '☑ No subtitle processing necessary',
processFile: true,
preset: '-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi,-map 0 -map -0:d -c:v hevc_vaapi -b:v 1517k -minrate 1061k -maxrate 1972k -bufsize 1517k -c:a copy -c:a:0 ac3 -c:s copy -max_muxing_queue_size 4096',
reQueueAfter: false,
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
container: '.mkv',
FFmpegMode: true,
handBrakeMode: false,
infoLog: '☑ No multi channel audio found\n'
+ '☑ No audio processing necessary\n'
+ '☑ File is in HEVC codec and in MKV\n'
+ '☑ No video processing necessary\n'
+ '☑ No subtitle processing necessary\n'
+ '☑ No need to process file',
processFile: false,
preset: ',-map 0 -map -0:d -c:v copy -c:a copy -c:s copy -max_muxing_queue_size 4096',
reQueueAfter: false,
},
},
];
run(tests);

View file

@ -1,97 +0,0 @@
/* 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: '-Z "H.264 MKV 480p30"',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not h264 480p! \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "H.264 MKV 480p30"',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not h264 480p! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 720;
file.ffProbeData.streams[0].height = 480;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map_metadata -1 -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is h264 480p! \n'
+ '☑File has no title and has no subs \n'
+ '☒File has title metadata \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 720;
file.ffProbeData.streams[0].height = 480;
file.meta.Title = undefined;
file.container = 'mkv';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File is h264 480p! \n'
+ '☑File has no title and has no subs \n'
+ '☑File has no title metadata \n'
+ '☑File has no subs \n'
+ '☑File is in mkv container! \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,99 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is h264 720p! \n'
+ '☑File has no title and has no subs \n'
+ '☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "H.264 MKV 720p30"',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not h264 720p! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 1280;
file.ffProbeData.streams[0].height = 720;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map_metadata -1 -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is h264 720p! \n'
+ '☑File has no title and has no subs \n'
+ '☒File has title metadata \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 1280;
file.ffProbeData.streams[0].height = 720;
file.meta.Title = undefined;
file.container = 'mkv';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File is h264 720p! \n'
+ '☑File has no title and has no subs \n'
+ '☑File has no title metadata \n'
+ '☑File has no subs \n'
+ '☑File is in mkv container! \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,96 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is h264 1080p!☑File has no title and has no subs \n'
+ '☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: '-Z "H.264 MKV 1080p30"',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: '☒File is not h264 1080p! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 1920;
file.ffProbeData.streams[0].height = 1080;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map_metadata -1 -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is h264 1080p!☑File has no title and has no subs \n'
+ '☒File has title metadata \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
file.ffProbeData.streams[0].width = 1920;
file.ffProbeData.streams[0].height = 1080;
file.meta.Title = undefined;
file.container = 'mkv';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File is h264 1080p!☑File has no title and has no subs \n'
+ '☑File has no title metadata \n'
+ '☑File has no subs \n'
+ '☑File is in mkv container! \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,94 +0,0 @@
/* 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: false,
preset: ', -map 0:v',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: 'Removing unwanted audio...\n'
+ 'Found unwanted: und: 1\n'
+ 'Found unwanted: und: 1\n'
+ 'No unwanted audio found!\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: ', -map 0:v -map 0:1',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: false,
reQueueAfter: false,
infoLog: 'Removing unwanted audio...\nAdded undefined: 1\nNo unwanted audio found!\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
languages: 'fre',
container: 'mp4',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0:v -map 0:4 -map 0:s? -c copy',
container: 'mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Removing unwanted audio...\n'
+ 'Found wanted fre: 4\n'
+ 'Found unwanted audio\n'
+ 'It will be removed\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
languages: 'eng',
container: 'mp4',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0:v -map 0:1 -map 0:2 -map 0:3 -map 0:5 -map 0:s? -c copy',
container: 'mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Removing unwanted audio...\n'
+ 'Found wanted eng: 1\n'
+ 'Found wanted eng: 2\n'
+ 'Found wanted eng: 3\n'
+ 'Found wanted eng: 5\n'
+ 'Found unwanted audio\n'
+ 'It will be removed\n',
},
},
];
run(tests);

View file

@ -1,48 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☒File is not a 4K video \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.video_resolution = '4KUHD';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-sn -map 0 -c copy',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File does not have only AC3 track commentaries! \n'
+ '☑File has AC3 track! \n'
+ '☒File has subs! \n',
},
},
];
run(tests);

View file

@ -1,85 +0,0 @@
/* 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: false,
preset: ', -c copy -map 0:v ',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☒File is not mkv \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: ', -c copy -map 0:v -map 0:a:0? -c:a:0 copy -map 0:a:1? -c:a:1 copy -map 0:a:2? -c:a:2 copy -map 0:a:3? -c:a:3 copy -map 0:a:4? -c:a:4 copy ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: "☑File doesn't contain audio tracks with the specified codec.\n",
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
input_codecs: 'aac',
output_codec: 'eac3',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c copy -map 0:v -map 0:a:0? -c:a:0 copy -map 0:a:1? -c:a:1 copy -map 0:a:2? -c:a:2 copy -map 0:a:3? -c:a:3 copy -map 0:a:3? -c:a:4 eac3 -b:a:4 128k -metadata:s:a:4 title="" -metadata:s:a:4 copyright="henk_asac" -disposition:a:4 0 -map 0:a:4? -c:a:5 copy -map 0:a:4? -c:a:6 eac3 -b:a:6 128k -metadata:s:a:6 title="" -metadata:s:a:6 copyright="henk_asac" -disposition:a:6 0 -map 0:s? ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {
input_codecs: 'aac',
output_codec: 'eac3',
bitrate: '256',
auto_adjust: 'false',
position_new_audio: 'before',
},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c copy -map 0:v -map 0:a:0? -c:a:0 copy -map 0:a:1? -c:a:1 copy -map 0:a:2? -c:a:2 copy -map 0:a:3? -c:a:3 eac3 -b:a:3 256k -metadata:s:a:3 title="" -metadata:s:a:3 copyright="henk_asac" -disposition:a:3 0 -map 0:a:3? -c:a:4 copy -map 0:a:4? -c:a:5 eac3 -b:a:5 256k -metadata:s:a:5 title="" -metadata:s:a:5 copyright="henk_asac" -disposition:a:5 0 -map 0:a:4? -c:a:6 copy -map 0:s? ',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '',
},
},
];
run(tests);

View file

@ -1,68 +0,0 @@
/* 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: ',-map_metadata -1 -c:v copy -c:a copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -c:v copy -c:a copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File has no title metadata \n'
+ '☑File has no subs \n'
+ '☒File is not in mp4 container! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH265_1.json'));
file.container = 'mp4';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File has no title metadata \n'
+ '☑File has no subs \n'
+ '☑File is in mp4 container! \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,66 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is in mp4 container! \n☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ', -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File is not in mp4 container! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH265_1.json'));
file.container = 'mp4';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File is in mp4 container! \n'
+ '☑File has no title metadata \n'
+ '☑File has aac track \n'
+ '☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,42 +0,0 @@
/* 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: '-sn <io> -vcodec copy -scodec copy -acodec aac -filter:a "dynaudnorm,pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR"',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File matches requirements for processing. Downmixing and applying DRC!',
container: '.mp4',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'File has more than 1 audio track - not processing',
container: '.mkv',
},
},
];
run(tests);

View file

@ -1,50 +0,0 @@
/* 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: false,
preset: '',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: 'File has video in first stream\n File meets conditions!\n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
const audio = file.ffProbeData.streams[1];
// eslint-disable-next-line prefer-destructuring
file.ffProbeData.streams[1] = file.ffProbeData.streams[0];
file.ffProbeData.streams[0] = audio;
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v? -map 0:a? -map 0:s? -map 0:d? -map 0:t? -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: 'Video is not in the first stream',
},
},
];
run(tests);

View file

@ -1,42 +0,0 @@
/* 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: ',-map_metadata -1 -map 0 -c copy',
container: '.mp4',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has title metadata \n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File has no title metadata \n☑File meets conditions! \n',
},
},
];
run(tests);

View file

@ -1,44 +0,0 @@
/* 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: ',-map 0 -c:s copy -movflags use_metadata_tags -c:a aac -b:a 512k -c:v:0 libx265 -preset medium -x265-params crf=18:tune=animation:qcomp=0.7:aq-strength=1.1 -pix_fmt yuv420p10le -f matroska',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n'
+ '☒File is 720p but is not hevc!\n'
+ '☒File will be transcoded!\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
];
run(tests);

View file

@ -1,67 +0,0 @@
/* 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: ',-map 0:v -map 0:s? -c:s srt -map 0:a -c copy -c:v:0 libx265 -preset fast -crf 25',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n'
+ '☒File is 720p but is not hevc!\n'
+ '☒File will be transcoded!\n',
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n☑File is already in hevc! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
file.video_resolution = '480p';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:s? -c:s srt -map 0:a -c copy -c:v:0 libx265 -preset fast -crf 27',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☑File is a video! \n'
+ '☒File is 480p but is not hevc!\n'
+ '☒File will be transcoded!\n',
},
},
];
run(tests);

View file

@ -1,63 +0,0 @@
/* 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: '-Z "H.265 MKV 2160p60" --all-audio --all-subtitles',
container: '.mkv',
handBrakeMode: true,
FFmpegMode: false,
reQueueAfter: true,
infoLog: "☒File isn't in hevc! \n",
},
},
{
input: {
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: true,
preset: ',-map 0:v -map 0:a:0 -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ac3 -b:a:0 192k -ac 2',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: true,
infoLog: '☒File has no language track in ac3,eac3,dts. No eng track marked so transcoding audio track 1 into ac3! \n',
},
},
{
input: {
file: (() => {
const file = _.cloneDeep(require('../sampleData/media/sampleH265_1.json'));
file.ffProbeData.streams[1].codec_name = 'ac3';
return file;
})(),
librarySettings: {},
inputs: {},
otherArguments: {},
},
output: {
processFile: false,
preset: '',
container: '.mkv',
handBrakeMode: false,
FFmpegMode: true,
reQueueAfter: false,
infoLog: '☑File is in mkv container! \n',
},
},
];
run(tests);

View file

@ -1,16 +1,12 @@
/* eslint no-console: 0 */ // --> OFF
/* eslint max-len: 0 */
const fs = require('fs');
const chalk = require('chalk');
const folders = [
'./Community',
'./examples',
];
let errorEncountered = false;
folders.forEach((folder) => {
const files = fs.readdirSync(folder).filter((row) => row.includes('.js'));
@ -32,16 +28,16 @@ folders.forEach((folder) => {
const importLib = 'const lib = require(\'../methods/lib\')();';
if (!read.includes(importLib)) {
console.log(chalk.red(`Plugin error: '${folder}/${files[i]}' does not contain ${importLib}`));
console.log(`Plugin error: '${folder}/${files[i]}' does not contain ${importLib}`);
read = `${importLib}\n${read}`;
// fs.writeFileSync(`${folder}/${files[i]}`, read)
errorEncountered = true;
process.exit(1);
}
const detailsText = 'const details = () =>';
if (!read.includes(detailsText)) {
console.log(chalk.red(`Plugin error: '${folder}/${files[i]}' does not contain ${detailsText}`));
errorEncountered = true;
console.log(`Plugin error: '${folder}/${files[i]}' does not contain ${detailsText}`);
process.exit(1);
}
const syncText = 'const plugin = (file, librarySettings, inputs, otherArguments) => {';
@ -50,27 +46,27 @@ folders.forEach((folder) => {
if (!read.includes(syncText)
&& !read.includes(asyncText)
) {
console.log(chalk.red(`Plugin error: '${folder}/${files[i]}' does not contain ${syncText} or ${asyncText}`));
errorEncountered = true;
console.log(`Plugin error: '${folder}/${files[i]}' does not contain ${syncText} or ${asyncText}`);
process.exit(1);
}
const inputsText = 'inputs = lib.loadDefaultValues(inputs, details);';
if (!read.includes(inputsText)
) {
console.log(chalk.red(`Plugin error: '${folder}/${files[i]}' does not contain ${inputsText}`));
errorEncountered = true;
console.log(`Plugin error: '${folder}/${files[i]}' does not contain ${inputsText}`);
process.exit(1);
}
const exportText = `module.exports.details = details;
module.exports.plugin = plugin;`;
if (!read.includes(exportText)) {
console.log(chalk.red(`Plugin error: '${folder}/${files[i]}' does not contain ${exportText}`));
console.log(`Plugin error: '${folder}/${files[i]}' does not contain ${exportText}`);
read = read.replace('module.exports.details = details;', '');
read = read.replace('module.exports.plugin = plugin;', '');
read += `\n${exportText}`;
// fs.writeFileSync(`${folder}/${files[i]}`, read)
errorEncountered = true;
process.exit(1);
}
// check deps are within functions
@ -84,8 +80,8 @@ module.exports.plugin = plugin;`;
const countOpen = allBefore.join(keyWord).split('{').length - 1;
const countClose = allBefore.join(keyWord).split('}').length - 1;
if (countOpen === countClose) {
console.log(chalk.red(`Plugin has requires outside of function '${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin has requires outside of function '${folder}/${files[i]}'`);
process.exit(1);
}
}
}
@ -95,66 +91,64 @@ module.exports.plugin = plugin;`;
// eslint-disable-next-line import/no-dynamic-require,global-require
pluginDetails = require(`.${folder}/${files[i]}`).details();
} catch (err) {
console.log(chalk.red(err.message));
errorEncountered = true;
console.log(err.message);
process.exit(1);
}
const detailsKeys = Object.keys(pluginDetails);
// eslint-disable-next-line no-loop-func
detailsOrder.forEach((detail) => {
if (detailsKeys.indexOf(detail) === -1) {
console.log(chalk.red(`Plugin details is missing '${folder}/${files[i]}' : ${detail}`));
errorEncountered = true;
console.log(`Plugin details is missing '${folder}/${files[i]}' : ${detail}`);
process.exit(1);
}
});
// eslint-disable-next-line no-loop-func
detailsKeys.forEach((detail, index) => {
if (detailsOrder[index] !== detail) {
console.log(chalk.red(`Plugin details keys are not in the correct order: '${folder}/${files[i]}' ${detail}`));
errorEncountered = true;
console.log(`Plugin details keys are not in the correct order: '${folder}/${files[i]}' ${detail}`);
process.exit(1);
}
});
if (detailsKeys.length < detailsOrder.length) {
console.log(chalk.red(`Plugin details are too few '${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin details are too few '${folder}/${files[i]}'`);
process.exit(1);
}
if (!['Pre-processing', 'Post-processing'].includes(pluginDetails.Stage)) {
console.log(chalk.red(`Plugin does not have a valid Type'${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin does not have a valid Type'${folder}/${files[i]}'`);
process.exit(1);
}
if (!['Video', 'Audio', 'Subtitle', 'Any'].includes(pluginDetails.Type)) {
console.log(chalk.red(`Plugin does not have a valid Type'${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin does not have a valid Type'${folder}/${files[i]}'`);
process.exit(1);
}
if (files[i].split('.js').join('') !== pluginDetails.id) {
console.log(chalk.red(`Plugin file name does not match details id'${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin file name does not match details id'${folder}/${files[i]}'`);
process.exit(1);
}
if (!['Transcode', 'Filter'].includes(pluginDetails.Operation)) {
console.log(chalk.red(`Plugin does not have a valid Operation '${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin does not have a valid Operation '${folder}/${files[i]}'`);
process.exit(1);
} else if (detailsKeys.length > detailsOrder.length) {
console.log(chalk.red(`Plugin details are too many '${folder}/${files[i]}'`));
errorEncountered = true;
console.log(`Plugin details are too many '${folder}/${files[i]}'`);
process.exit(1);
} else if (pluginDetails.Inputs && !Array.isArray(pluginDetails.Inputs)) {
// Check default values are set;
console.log(chalk.red(`Plugin Inputs is not an array: ${files[i]}`));
errorEncountered = true;
console.log(`Plugin Inputs is not an array: ${files[i]}`);
process.exit(1);
} else if (pluginDetails.Inputs && Array.isArray(pluginDetails.Inputs)) {
const inputs = pluginDetails.Inputs;
const savedInputs = {};
for (let j = 0; j < inputs.length; j += 1) {
// Prevent duplicate plugin inputs
if (savedInputs[inputs[j].name] === true) {
console.log(chalk.red(`Plugin Input already exists: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input already exists: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
} else {
savedInputs[inputs[j].name] = true;
}
@ -167,31 +161,31 @@ module.exports.plugin = plugin;`;
|| inputKeys[3] !== 'inputUI'
|| inputKeys[4] !== 'tooltip'
) {
console.log(chalk.red(`Plugin Input keys are not in correct order: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input keys are not in correct order: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
} else if (inputs[j].type === undefined || !pluginInputTypes.includes(inputs[j].type)) {
console.log(chalk.red(`Plugin Input does not have a type: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input does not have a type: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
} else if (
(inputs[j].type === 'string' && typeof inputs[j].defaultValue !== 'string')
|| (inputs[j].type === 'number' && typeof inputs[j].defaultValue !== 'number')
|| (inputs[j].type === 'boolean' && typeof inputs[j].defaultValue !== 'boolean')
) {
console.log(chalk.red(`Plugin Input type does not match defaultValue type:
'${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input type does not match defaultValue type:
'${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
} else if (!['text', 'dropdown'].includes(inputs[j].inputUI.type)) {
console.log(chalk.red(`Plugin Input inputUI is invalid: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input inputUI is invalid: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
} else if (inputs[j].defaultValue === undefined) {
console.log(chalk.red(`Plugin Input does not have a default value: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input does not have a default value: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
}
const count = read.split(inputs[j].name).length - 1;
if (count === 1) {
console.log(chalk.red(`Plugin Input is not used: '${folder}/${files[i]}' : ${inputs[j].name}`));
errorEncountered = true;
console.log(`Plugin Input is not used: '${folder}/${files[i]}' : ${inputs[j].name}`);
process.exit(1);
}
}
}
@ -201,8 +195,3 @@ module.exports.plugin = plugin;`;
});
console.log('Done!');
if (errorEncountered) {
console.log('Errors encountered');
process.exit(1);
}

View file

@ -1,55 +0,0 @@
const path = require('path');
const chai = require('chai');
const _ = require('lodash');
const importFresh = require('import-fresh');
const scriptName = path.basename(process.mainModule.filename);
const run = async (tests) => {
try {
for (let i = 0; i < tests.length; i += 1) {
// eslint-disable-next-line no-console
console.log(`${scriptName}: test ${i}`);
const test = tests[i];
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(
_.cloneDeep(test.input.file),
_.cloneDeep(test.input.librarySettings),
_.cloneDeep(test.input.inputs),
_.cloneDeep(test.input.otherArguments),
);
} catch (err1) {
errorEncountered = err1;
}
if (test.outputModify) {
testOutput = test.outputModify(test.output);
}
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!');
}
} else {
chai.assert.deepEqual(testOutput, test.output);
}
}
} catch (err) {
// eslint-disable-next-line no-console
console.error(err);
process.exit(1);
}
};
module.exports = run;

View file

@ -1,51 +0,0 @@
/* eslint no-console: 0 */ // --> OFF
const fs = require('fs');
const chalk = require('chalk');
const childProcess = require('child_process');
const filenames = fs.readdirSync(`${process.cwd()}/Community`).reverse();
const run = async () => {
for (let i = 0; i < filenames.length; i += 1) {
const pluginPath = `${process.cwd()}/Community/${filenames[i]}`;
const text = fs.readFileSync(pluginPath);
const pluginTestpath = `${__dirname}/Community/${filenames[i]}`;
let shouldRunTest = true;
if (!text.includes('// tdarrSkipTest') && !fs.existsSync(pluginTestpath)) {
console.log(chalk.red(`${filenames[i]} does not have a test but should do.`));
process.exit(1);
} else if (!text.includes('// tdarrSkipTest') && fs.existsSync(pluginTestpath)) {
console.log(chalk.white(`${filenames[i]} running test`));
} else if (text.includes('// tdarrSkipTest') && fs.existsSync(pluginTestpath)) {
console.log(chalk.red(`${filenames[i]} should have // tdarrSkipTest removed`));
process.exit(1);
} else if (text.includes('// tdarrSkipTest') && !fs.existsSync(pluginTestpath)) {
console.log(chalk.yellow(`${filenames[i]} skipping tests`));
shouldRunTest = false;
}
if (shouldRunTest) {
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => {
childProcess.exec(`node "${pluginTestpath}"`, (err, stdout, stderr) => {
if (err) {
console.log(err);
}
console.log(stdout);
console.log(chalk.red(stderr));
}).on('exit', async (code) => {
if (code !== 0) {
await new Promise((resolve2) => setTimeout(resolve2, 1000));
process.exit(1);
} else {
resolve();
}
});
});
}
}
};
run();

View file

@ -1,334 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/qsv_h265.mkv",
"file": "C:/Transcode/Source Folder/qsv_h265.mkv",
"DB": "2MY5YD7P8",
"footprintId": "xkZP3IPR6g",
"hasClosedCaptions": false,
"container": "mkv",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "\"Unable to run CCExtractor\""
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "hevc",
"codec_long_name": "H.265 / HEVC (High Efficiency Video Coding)",
"profile": "Main",
"codec_type": "video",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"width": 1920,
"height": 1080,
"coded_width": 1920,
"coded_height": 1088,
"closed_captions": 0,
"has_b_frames": 1,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "16:9",
"pix_fmt": "yuv420p",
"level": 150,
"color_range": "tv",
"color_space": "bt709",
"color_transfer": "bt709",
"color_primaries": "bt709",
"chroma_location": "left",
"refs": 1,
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/1000",
"start_pts": 21,
"start_time": "0.021000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"DURATION": "00:00:21.341000000"
}
},
{
"index": 1,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"title": "Stereo",
"DURATION": "00:00:21.375000000"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/qsv_h265.mkv",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "21.375000",
"size": "8569883",
"bit_rate": "3207441",
"probe_score": 100,
"tags": {
"creation_time": "2019-09-13T16:46:14.000000Z",
"ENCODER": "Lavf58.20.100"
}
}
},
"file_size": 8.172877311706543,
"video_resolution": "1080p",
"fileMedium": "video",
"video_codec_name": "hevc",
"audio_codec_name": "",
"lastPluginDetails": "none",
"createdAt": 1653029410394,
"bit_rate": 3207441,
"duration": 21,
"statSync": {
"dev": 3832468976,
"mode": 33060,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 1970324841360027,
"size": 8569883,
"blocks": 16744,
"atimeMs": 1653029410381.1382,
"mtimeMs": 1568393195000,
"ctimeMs": 1650864287188.087,
"birthtimeMs": 1650864302270.2063,
"atime": "2022-05-20T06:50:10.381Z",
"mtime": "2019-09-13T16:46:35.000Z",
"ctime": "2022-04-25T05:24:47.188Z",
"birthtime": "2022-04-25T05:25:02.270Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": 0,
"lastUpdate": 1653027918258,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/qsv_h265.mkv",
"errors": [],
"Duration": 21.375,
"ExifToolVersion": 12.4,
"FileName": "qsv_h265.mkv",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "8.2 MiB",
"FileModifyDate": {
"year": 2019,
"month": 9,
"day": 13,
"hour": 17,
"minute": 46,
"second": 35,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2019:09:13 17:46:35+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 20,
"hour": 7,
"minute": 50,
"second": 9,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:20 07:50:09+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 4,
"day": 25,
"hour": 6,
"minute": 25,
"second": 2,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:04:25 06:25:02+01:00"
},
"FilePermissions": "-r--r--r--",
"FileType": "MKV",
"FileTypeExtension": "mkv",
"MIMEType": "video/x-matroska",
"EBMLVersion": 1,
"EBMLReadVersion": 1,
"DocType": "matroska",
"DocTypeVersion": 4,
"DocTypeReadVersion": 2,
"TimecodeScale": "1 ms",
"MuxingApp": "Lavf58.20.100",
"WritingApp": "HandBrake 1.2.2 2019022300",
"DateTimeOriginal": {
"year": 2019,
"month": 9,
"day": 13,
"hour": 16,
"minute": 46,
"second": 14,
"millisecond": 0,
"tzoffsetMinutes": 0,
"rawValue": "2019:09:13 16:46:14Z"
},
"VideoFrameRate": 25,
"ImageWidth": 1920,
"ImageHeight": 1080,
"TrackNumber": 2,
"TrackName": "Stereo",
"TrackLanguage": "und",
"CodecID": "A_AAC",
"TrackType": "Audio",
"AudioChannels": 2,
"AudioSampleRate": 48000,
"TagName": "DURATION",
"TagString": "00:00:21.375000000",
"ImageSize": "1920x1080",
"Megapixels": 2.1
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"UniqueID": "112612991515236890937117095733641799622",
"VideoCount": "1",
"AudioCount": "1",
"Format": "Matroska",
"Format_Version": "4",
"FileSize": "8569883",
"Duration": "21.375",
"OverallBitRate": "3207442",
"FrameRate": "25.000",
"FrameCount": "533",
"IsStreamable": "Yes",
"Encoded_Date": "UTC 2019-09-13 16:46:14",
"Encoded_Application": "HandBrake 1.2.2 2019022300",
"Encoded_Library": "Lavf58.20.100",
"extra": {
"ErrorDetectionType": "Per level 1"
}
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
"UniqueID": "1",
"Format": "HEVC",
"Format_Profile": "Main",
"Format_Level": "5",
"Format_Tier": "Main",
"CodecID": "V_MPEGH/ISO/HEVC",
"Duration": "21.320000000",
"Width": "1920",
"Height": "1080",
"Stored_Height": "1088",
"Sampled_Width": "1920",
"Sampled_Height": "1080",
"PixelAspectRatio": "1.000",
"DisplayAspectRatio": "1.778",
"FrameRate_Mode": "CFR",
"FrameRate": "25.000",
"FrameCount": "533",
"ColorSpace": "YUV",
"ChromaSubsampling": "4:2:0",
"BitDepth": "8",
"Delay": "0.021",
"Default": "Yes",
"Forced": "No",
"colour_description_present": "Yes",
"colour_description_present_Source": "Stream",
"colour_range": "Limited",
"colour_range_Source": "Stream",
"colour_primaries": "BT.709",
"colour_primaries_Source": "Stream",
"transfer_characteristics": "BT.709",
"transfer_characteristics_Source": "Stream",
"matrix_coefficients": "BT.709",
"matrix_coefficients_Source": "Stream"
},
{
"@type": "Audio",
"StreamOrder": "1",
"ID": "2",
"UniqueID": "2",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "21.375000000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "1026000",
"FrameRate": "46.875",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"Title": "Stereo",
"Default": "Yes",
"Forced": "No"
}
]
}
}

View file

@ -1,432 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/SampleVideo_1280x720_1mb.mp4",
"file": "C:/Transcode/Source Folder/SampleVideo_1280x720_1mb.mp4",
"DB": "2MY5YD7P8",
"footprintId": "KA_y0Hm3Ld",
"hasClosedCaptions": false,
"container": "mp4",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "\"Unable to run CCExtractor\""
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "Main",
"codec_type": "video",
"codec_tag_string": "avc1",
"codec_tag": "0x31637661",
"width": 1280,
"height": 720,
"coded_width": 1280,
"coded_height": 720,
"closed_captions": 0,
"has_b_frames": 0,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "16:9",
"pix_fmt": "yuv420p",
"level": 31,
"chroma_location": "left",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/12800",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 67584,
"duration": "5.280000",
"bit_rate": "1205959",
"bits_per_raw_sample": "8",
"nb_frames": "132",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"creation_time": "1970-01-01T00:00:00.000000Z",
"language": "und",
"handler_name": "VideoHandler",
"vendor_id": "[0][0][0][0]"
}
},
{
"index": 1,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "mp4a",
"codec_tag": "0x6134706d",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 6,
"channel_layout": "5.1",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/48000",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 254976,
"duration": "5.312000",
"bit_rate": "384828",
"nb_frames": "249",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"creation_time": "1970-01-01T00:00:00.000000Z",
"language": "und",
"handler_name": "SoundHandler",
"vendor_id": "[0][0][0][0]"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/SampleVideo_1280x720_1mb.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "5.312000",
"size": "1056519",
"bit_rate": "1591143",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"creation_time": "1970-01-08T00:00:00.000000Z",
"encoder": "Lavf53.24.2",
"title": "Sample title test",
"composer": "th",
"date": "2018",
"genre": "this",
"artist": "hhj",
"comment": "hhk"
}
}
},
"file_size": 1.0075750350952148,
"video_resolution": "720p",
"fileMedium": "video",
"video_codec_name": "h264",
"audio_codec_name": "",
"lastPluginDetails": "none",
"createdAt": 1653029288316,
"bit_rate": 1591143,
"duration": 5,
"statSync": {
"dev": 3832468976,
"mode": 33060,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 1688849864649366,
"size": 1056519,
"blocks": 2064,
"atimeMs": 1653029288299.0342,
"mtimeMs": 1569306262000,
"ctimeMs": 1650864287160.0793,
"birthtimeMs": 1652683715285.7583,
"atime": "2022-05-20T06:48:08.299Z",
"mtime": "2019-09-24T06:24:22.000Z",
"ctime": "2022-04-25T05:24:47.160Z",
"birthtime": "2022-05-16T06:48:35.286Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": 0,
"lastUpdate": 1653028721083,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/SampleVideo_1280x720_1mb.mp4",
"errors": [],
"Duration": 5.312,
"PreviewDuration": 0,
"SelectionDuration": 0,
"TrackDuration": 5.28,
"MediaDuration": 5.28,
"ExifToolVersion": 12.4,
"FileName": "SampleVideo_1280x720_1mb.mp4",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "1032 KiB",
"FileModifyDate": {
"year": 2019,
"month": 9,
"day": 24,
"hour": 7,
"minute": 24,
"second": 22,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2019:09:24 07:24:22+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 20,
"hour": 7,
"minute": 48,
"second": 6,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:20 07:48:06+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 5,
"day": 16,
"hour": 7,
"minute": 48,
"second": 35,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:16 07:48:35+01:00"
},
"FilePermissions": "-r--r--r--",
"FileType": "MP4",
"FileTypeExtension": "mp4",
"MIMEType": "video/mp4",
"MajorBrand": "MP4 Base Media v1 [IS0 14496-12:2003]",
"MinorVersion": "0.2.0",
"CompatibleBrands": [
"isom",
"iso2",
"avc1",
"mp41"
],
"MediaDataSize": 0,
"MediaDataOffset": 1051515,
"MovieHeaderVersion": 0,
"CreateDate": {
"year": 1970,
"month": 1,
"day": 8,
"hour": 0,
"minute": 0,
"second": 0,
"millisecond": 0,
"rawValue": "1970:01:08 00:00:00"
},
"ModifyDate": {
"year": 2014,
"month": 7,
"day": 19,
"hour": 17,
"minute": 15,
"second": 29,
"millisecond": 0,
"rawValue": "2014:07:19 17:15:29"
},
"TimeScale": 1000,
"PreferredRate": 1,
"PreferredVolume": "100.00%",
"PreviewTime": "0 s",
"PosterTime": "0 s",
"SelectionTime": "0 s",
"CurrentTime": "0 s",
"NextTrackID": 3,
"TrackHeaderVersion": 0,
"TrackCreateDate": "0000:00:00 00:00:00",
"TrackModifyDate": "0000:00:00 00:00:00",
"TrackID": 1,
"TrackLayer": 0,
"TrackVolume": "0.00%",
"ImageWidth": 1280,
"ImageHeight": 720,
"GraphicsMode": "srcCopy",
"OpColor": "0 0 0",
"CompressorID": "avc1",
"SourceImageWidth": 1280,
"SourceImageHeight": 720,
"XResolution": 72,
"YResolution": 72,
"BitDepth": 24,
"VideoFrameRate": 25,
"MatrixStructure": "1 0 0 0 1 0 0 0 1",
"MediaHeaderVersion": 0,
"MediaCreateDate": "0000:00:00 00:00:00",
"MediaModifyDate": "0000:00:00 00:00:00",
"MediaTimeScale": 48000,
"MediaLanguageCode": "und",
"HandlerDescription": "SoundHandler",
"Balance": 0,
"AudioFormat": "mp4a",
"AudioChannels": 2,
"AudioBitsPerSample": 16,
"AudioSampleRate": 48000,
"HandlerType": "Metadata",
"HandlerVendorID": "Apple",
"Encoder": "Lavf53.24.2",
"Title": "Sample title test",
"Composer": "th",
"BeatsPerMinute": 0,
"ContentCreateDate": 2018,
"Genre": "this",
"Artist": "hhj",
"Comment": "hhk",
"Subtitle": "jj",
"Mood": "lik",
"ContentDistributor": "cont",
"Conductor": "jo",
"Writer": "writ",
"InitialKey": "ho",
"Producer": "prod",
"ParentalRating": "par",
"Director": "dir",
"Period": "pol",
"Publisher": "pub",
"PromotionURL": "prom",
"AuthorURL": "auth",
"EncodedBy": "enc",
"Category": "h",
"ImageSize": "1280x720",
"Megapixels": 0.922,
"AvgBitrate": "1.58 Mbps",
"Rotation": 0
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"VideoCount": "1",
"AudioCount": "1",
"Format": "MPEG-4",
"Format_Profile": "Base Media",
"CodecID": "isom",
"CodecID_Compatible": "isom/iso2/avc1/mp41",
"FileSize": "1056519",
"Duration": "5.312",
"OverallBitRate_Mode": "VBR",
"OverallBitRate": "1591143",
"FrameRate": "25.000",
"FrameCount": "132",
"StreamSize": "5060",
"HeaderSize": "40",
"DataSize": "1051467",
"FooterSize": "5012",
"IsStreamable": "No",
"Title": "Sample title test",
"Movie": "Sample title test",
"Performer": "hhj",
"Composer": "th",
"Genre": "this",
"Recorded_Date": "2018",
"Encoded_Date": "UTC 1970-01-08 00:00:00",
"Tagged_Date": "UTC 2014-07-19 17:15:29",
"Encoded_Application": "Lavf53.24.2",
"Comment": "hhk"
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
"Format": "AVC",
"Format_Profile": "Main",
"Format_Level": "3.1",
"Format_Settings_CABAC": "Yes",
"Format_Settings_RefFrames": "1",
"CodecID": "avc1",
"Duration": "5.280",
"BitRate": "1205959",
"Width": "1280",
"Height": "720",
"Sampled_Width": "1280",
"Sampled_Height": "720",
"PixelAspectRatio": "1.000",
"DisplayAspectRatio": "1.778",
"Rotation": "0.000",
"FrameRate_Mode": "CFR",
"FrameRate_Mode_Original": "VFR",
"FrameRate": "25.000",
"FrameCount": "132",
"ColorSpace": "YUV",
"ChromaSubsampling": "4:2:0",
"BitDepth": "8",
"ScanType": "Progressive",
"StreamSize": "795933",
"Encoded_Date": "UTC 1970-01-01 00:00:00",
"Tagged_Date": "UTC 1970-01-01 00:00:00",
"extra": {
"CodecConfigurationBox": "avcC"
}
},
{
"@type": "Audio",
"StreamOrder": "1",
"ID": "2",
"Format": "AAC",
"Format_AdditionalFeatures": "LC",
"CodecID": "mp4a-40-2",
"Duration": "5.312",
"BitRate_Mode": "VBR",
"BitRate": "384000",
"BitRate_Maximum": "400392",
"Channels": "6",
"ChannelPositions": "Front: L C R, Side: L R, LFE",
"ChannelLayout": "C L R Ls Rs LFE",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "254976",
"FrameRate": "46.875",
"FrameCount": "249",
"Compression_Mode": "Lossy",
"StreamSize": "255526",
"StreamSize_Proportion": "0.24186",
"Default": "Yes",
"AlternateGroup": "1",
"Encoded_Date": "UTC 1970-01-01 00:00:00",
"Tagged_Date": "UTC 1970-01-01 00:00:00"
}
]
}
}

View file

@ -1,775 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/h264.mkv",
"file": "C:/Transcode/Source Folder/h264.mkv",
"DB": "2MY5YD7P8",
"footprintId": "asxmr-5Iij",
"hasClosedCaptions": false,
"container": "mkv",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "success"
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "High",
"codec_type": "video",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"width": 1918,
"height": 1080,
"coded_width": 1918,
"coded_height": 1080,
"closed_captions": 0,
"has_b_frames": 2,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "959:540",
"pix_fmt": "yuv420p",
"level": 41,
"color_range": "tv",
"color_space": "bt709",
"chroma_location": "left",
"field_order": "progressive",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bits_per_raw_sample": "8",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "title video",
"BPS-eng": "6453995",
"DURATION-eng": "00:01:03.960000000",
"NUMBER_OF_FRAMES-eng": "1599",
"NUMBER_OF_BYTES-eng": "51599695",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"DURATION": "00:01:03.986000000"
}
},
{
"index": 1,
"codec_name": "flac",
"codec_long_name": "FLAC (Free Lossless Audio Codec)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "s32",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"bits_per_raw_sample": "24",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 flac",
"DURATION": "00:01:04.005000000"
}
},
{
"index": 2,
"codec_name": "ac3",
"codec_long_name": "ATSC A/52A (AC-3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "192000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 ac3",
"DURATION": "00:01:04.000000000"
}
},
{
"index": 3,
"codec_name": "eac3",
"codec_long_name": "ATSC A/52B (AC-3, E-AC-3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "192000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 eac3",
"DURATION": "00:01:04.000000000"
}
},
{
"index": 4,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "Français E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 aac",
"DURATION": "00:01:04.004000000"
}
},
{
"index": 5,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 aac",
"DURATION": "00:01:04.004000000"
}
},
{
"index": 6,
"codec_name": "subrip",
"codec_long_name": "SubRip subtitle",
"codec_type": "subtitle",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 66031,
"duration": "66.031000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "Français",
"BPS-eng": "46",
"DURATION-eng": "00:01:05.840000000",
"NUMBER_OF_FRAMES-eng": "12",
"NUMBER_OF_BYTES-eng": "381",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"DURATION": "00:01:06.031000000"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/h264.mkv",
"nb_streams": 7,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "66.031000",
"size": "68084120",
"bit_rate": "8248746",
"probe_score": 100,
"tags": {
"ENCODER": "Lavf58.24.101"
}
}
},
"file_size": 64.9300765991211,
"video_resolution": "1080p",
"fileMedium": "video",
"video_codec_name": "h264",
"audio_codec_name": "",
"lastPluginDetails": "none",
"createdAt": 1653139154025,
"bit_rate": 8248746,
"duration": 66,
"statSync": {
"dev": 3832468976,
"mode": 33206,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 64176294690080990,
"size": 68084120,
"blocks": 132984,
"atimeMs": 1653139154001.7666,
"mtimeMs": 1594420078270.8928,
"ctimeMs": 1653139134390.225,
"birthtimeMs": 1653139123219.1018,
"atime": "2022-05-21T13:19:14.002Z",
"mtime": "2020-07-10T22:27:58.271Z",
"ctime": "2022-05-21T13:18:54.390Z",
"birthtime": "2022-05-21T13:18:43.219Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": 0,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/h264.mkv",
"errors": [],
"Duration": 66.031,
"ExifToolVersion": 12.4,
"FileName": "h264.mkv",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "65 MiB",
"FileModifyDate": {
"year": 2020,
"month": 7,
"day": 10,
"hour": 23,
"minute": 27,
"second": 58,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2020:07:10 23:27:58+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 21,
"hour": 14,
"minute": 19,
"second": 11,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:21 14:19:11+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 5,
"day": 21,
"hour": 14,
"minute": 18,
"second": 43,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:21 14:18:43+01:00"
},
"FilePermissions": "-rw-rw-rw-",
"FileType": "MKV",
"FileTypeExtension": "mkv",
"MIMEType": "video/x-matroska",
"EBMLVersion": 1,
"EBMLReadVersion": 1,
"DocType": "matroska",
"DocTypeVersion": 4,
"DocTypeReadVersion": 2,
"TimecodeScale": "1 ms",
"MuxingApp": "Lavf58.24.101",
"WritingApp": "Lavf58.24.101",
"VideoFrameRate": 25,
"ImageWidth": 1918,
"ImageHeight": 1080,
"VideoScanType": "Unknown (2)",
"AudioChannels": 2,
"AudioSampleRate": 48000,
"AudioBitsPerSample": 32,
"TrackNumber": 7,
"TrackName": "Français",
"TrackLanguage": "fre",
"TrackDefault": "No",
"CodecID": "S_TEXT/UTF8",
"TrackType": "Subtitle",
"TagLanguage": "eng",
"TagName": "DURATION",
"TagString": "00:01:06.031000000",
"ImageSize": "1918x1080",
"Megapixels": 2.1
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"UniqueID": "191657682055212276795239999260924509108",
"VideoCount": "1",
"AudioCount": "5",
"TextCount": "1",
"Format": "Matroska",
"Format_Version": "4",
"FileSize": "68084120",
"Duration": "66.031",
"OverallBitRate_Mode": "VBR",
"OverallBitRate": "8248746",
"FrameRate": "25.000",
"FrameCount": "1599",
"StreamSize": "12645964",
"IsStreamable": "Yes",
"Encoded_Application": "Lavf58.24.101",
"Encoded_Library": "Lavf58.24.101",
"extra": {
"ErrorDetectionType": "Per level 1"
}
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
"UniqueID": "1",
"Format": "AVC",
"Format_Profile": "High",
"Format_Level": "4.1",
"Format_Settings_CABAC": "Yes",
"Format_Settings_RefFrames": "4",
"CodecID": "V_MPEG4/ISO/AVC",
"Duration": "63.986000000",
"BitRate": "6453995",
"Width": "1918",
"Height": "1080",
"Stored_Width": "1920",
"Stored_Height": "1088",
"Sampled_Width": "1918",
"Sampled_Height": "1080",
"PixelAspectRatio": "1.000",
"DisplayAspectRatio": "1.776",
"FrameRate_Mode": "VFR",
"FrameRate": "25.000",
"FrameCount": "1599",
"ColorSpace": "YUV",
"ChromaSubsampling": "4:2:0",
"BitDepth": "8",
"ScanType": "Progressive",
"Delay": "0.000",
"StreamSize": "51599695",
"Title": "title video",
"Language": "fr",
"Default": "Yes",
"Forced": "No",
"colour_description_present": "Yes",
"colour_description_present_Source": "Container / Stream",
"colour_range": "Limited",
"colour_range_Source": "Container / Stream",
"colour_primaries_Source": "Stream",
"transfer_characteristics_Source": "Stream",
"matrix_coefficients": "BT.709",
"matrix_coefficients_Source": "Container / Stream"
},
{
"@type": "Audio",
"@typeorder": "1",
"StreamOrder": "1",
"ID": "2",
"UniqueID": "2",
"Format": "FLAC",
"CodecID": "A_FLAC",
"Duration": "64.005000000",
"BitRate_Mode": "VBR",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1537",
"SamplingRate": "48000",
"SamplingCount": "3072240",
"FrameRate": "31.232",
"FrameCount": "1999",
"BitDepth": "24",
"Compression_Mode": "Lossless",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 flac",
"Language": "en",
"Default": "No",
"Forced": "No"
},
{
"@type": "Audio",
"@typeorder": "2",
"StreamOrder": "2",
"ID": "3",
"UniqueID": "3",
"Format": "AC-3",
"Format_Commercial_IfAny": "Dolby Digital",
"Format_Settings_Endianness": "Big",
"CodecID": "A_AC3",
"Duration": "64.000000000",
"BitRate_Mode": "CBR",
"BitRate": "192000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1536",
"SamplingRate": "48000",
"SamplingCount": "3072000",
"FrameRate": "31.250",
"FrameCount": "1999",
"BitDepth": "32",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 ac3",
"Language": "en",
"ServiceKind": "CM",
"Default": "No",
"Forced": "No",
"extra": {
"bsid": "8",
"dialnorm": "-31",
"dsurmod": "0",
"acmod": "2",
"lfeon": "0",
"dialnorm_Average": "-31",
"dialnorm_Minimum": "-31"
}
},
{
"@type": "Audio",
"@typeorder": "3",
"StreamOrder": "3",
"ID": "4",
"UniqueID": "4",
"Format": "E-AC-3",
"Format_Commercial_IfAny": "Dolby Digital Plus",
"Format_Settings_Endianness": "Big",
"CodecID": "A_EAC3",
"Duration": "64.000000000",
"BitRate_Mode": "CBR",
"BitRate": "192000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1536",
"SamplingRate": "48000",
"SamplingCount": "3072000",
"FrameRate": "31.250",
"FrameCount": "1999",
"BitDepth": "32",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 eac3",
"Language": "en",
"ServiceKind": "CM",
"Default": "No",
"Forced": "No",
"extra": {
"bsid": "16",
"dialnorm": "-31",
"dsurmod": "0",
"acmod": "2",
"lfeon": "0",
"dialnorm_Average": "-31",
"dialnorm_Minimum": "-31"
}
},
{
"@type": "Audio",
"@typeorder": "4",
"StreamOrder": "4",
"ID": "5",
"UniqueID": "5",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "64.004000000",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "3072192",
"FrameRate": "46.875",
"FrameCount": "1999",
"Compression_Mode": "Lossy",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Français E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 aac",
"Language": "fr",
"Default": "Yes",
"Forced": "No"
},
{
"@type": "Audio",
"@typeorder": "5",
"StreamOrder": "5",
"ID": "6",
"UniqueID": "6",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "64.004000000",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "3072192",
"FrameRate": "46.875",
"FrameCount": "1999",
"Compression_Mode": "Lossy",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 aac",
"Language": "en",
"Default": "No",
"Forced": "No"
},
{
"@type": "Text",
"StreamOrder": "6",
"ID": "7",
"UniqueID": "7",
"Format": "UTF-8",
"CodecID": "S_TEXT/UTF8",
"Duration": "66.031000000",
"BitRate": "46",
"FrameRate": "0.182",
"FrameCount": "12",
"ElementCount": "12",
"StreamSize": "381",
"Title": "Français",
"Language": "fr",
"Default": "No",
"Forced": "No"
}
]
}
}

View file

@ -1,821 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/h264.mkv",
"file": "C:/Transcode/Source Folder/h264.mkv",
"DB": "2MY5YD7P8",
"footprintId": "asxmr-5Iij",
"hasClosedCaptions": false,
"container": "mkv",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "success"
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "High",
"codec_type": "video",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"width": 1918,
"height": 1080,
"coded_width": 1918,
"coded_height": 1080,
"closed_captions": 0,
"has_b_frames": 2,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "959:540",
"pix_fmt": "yuv420p",
"level": 41,
"color_range": "tv",
"color_space": "bt709",
"chroma_location": "left",
"field_order": "progressive",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bits_per_raw_sample": "8",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "title video",
"BPS-eng": "6453995",
"DURATION-eng": "00:01:03.960000000",
"NUMBER_OF_FRAMES-eng": "1599",
"NUMBER_OF_BYTES-eng": "51599695",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"DURATION": "00:01:03.986000000"
}
},
{
"index": 1,
"codec_name": "flac",
"codec_long_name": "FLAC (Free Lossless Audio Codec)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "s32",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"bits_per_raw_sample": "24",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 flac",
"DURATION": "00:01:04.005000000"
}
},
{
"index": 2,
"codec_name": "ac3",
"codec_long_name": "ATSC A/52A (AC-3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "192000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 ac3",
"DURATION": "00:01:04.000000000"
}
},
{
"index": 3,
"codec_name": "eac3",
"codec_long_name": "ATSC A/52B (AC-3, E-AC-3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "192000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 eac3",
"DURATION": "00:01:04.000000000"
}
},
{
"index": 4,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "Français E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 aac",
"DURATION": "00:01:04.004000000"
}
},
{
"index": 5,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 5,
"start_time": "0.005000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "eng",
"title": "Anglais E-AC3 2.0",
"BPS-eng": "96000",
"DURATION-eng": "00:01:03.968000000",
"NUMBER_OF_FRAMES-eng": "1999",
"NUMBER_OF_BYTES-eng": "767616",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"ENCODER": "Lavc58.42.102 aac",
"DURATION": "00:01:04.004000000"
}
},
{
"index": 6,
"codec_name": "subrip",
"codec_long_name": "SubRip subtitle",
"codec_type": "subtitle",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 66031,
"duration": "66.031000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "en",
"title": "Français",
"BPS-eng": "46",
"DURATION-eng": "00:01:05.840000000",
"NUMBER_OF_FRAMES-eng": "12",
"NUMBER_OF_BYTES-eng": "381",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"DURATION": "00:01:06.031000000"
}
},
{
"index": 7,
"codec_name": "subrip",
"codec_long_name": "SubRip subtitle",
"codec_type": "subtitle",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 66031,
"duration": "66.031000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"language": "fre",
"title": "Français",
"BPS-eng": "46",
"DURATION-eng": "00:01:05.840000000",
"NUMBER_OF_FRAMES-eng": "12",
"NUMBER_OF_BYTES-eng": "381",
"_STATISTICS_WRITING_APP-eng": "mkvmerge v23.0.0 ('title') 64-bit",
"_STATISTICS_WRITING_DATE_UTC-eng": "2018-06-14 17:49:29",
"_STATISTICS_TAGS-eng": "BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES",
"DURATION": "00:01:06.031000000"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/h264.mkv",
"nb_streams": 7,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "66.031000",
"size": "68084120",
"bit_rate": "8248746",
"probe_score": 100,
"tags": {
"ENCODER": "Lavf58.24.101"
}
}
},
"file_size": 64.9300765991211,
"video_resolution": "1080p",
"fileMedium": "video",
"video_codec_name": "h264",
"audio_codec_name": "",
"lastPluginDetails": "none",
"createdAt": 1653139154025,
"bit_rate": 8248746,
"duration": 66,
"statSync": {
"dev": 3832468976,
"mode": 33206,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 64176294690080990,
"size": 68084120,
"blocks": 132984,
"atimeMs": 1653139154001.7666,
"mtimeMs": 1594420078270.8928,
"ctimeMs": 1653139134390.225,
"birthtimeMs": 1653139123219.1018,
"atime": "2022-05-21T13:19:14.002Z",
"mtime": "2020-07-10T22:27:58.271Z",
"ctime": "2022-05-21T13:18:54.390Z",
"birthtime": "2022-05-21T13:18:43.219Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": 0,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/h264.mkv",
"errors": [],
"Duration": 66.031,
"ExifToolVersion": 12.4,
"FileName": "h264.mkv",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "65 MiB",
"FileModifyDate": {
"year": 2020,
"month": 7,
"day": 10,
"hour": 23,
"minute": 27,
"second": 58,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2020:07:10 23:27:58+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 21,
"hour": 14,
"minute": 19,
"second": 11,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:21 14:19:11+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 5,
"day": 21,
"hour": 14,
"minute": 18,
"second": 43,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:21 14:18:43+01:00"
},
"FilePermissions": "-rw-rw-rw-",
"FileType": "MKV",
"FileTypeExtension": "mkv",
"MIMEType": "video/x-matroska",
"EBMLVersion": 1,
"EBMLReadVersion": 1,
"DocType": "matroska",
"DocTypeVersion": 4,
"DocTypeReadVersion": 2,
"TimecodeScale": "1 ms",
"MuxingApp": "Lavf58.24.101",
"WritingApp": "Lavf58.24.101",
"VideoFrameRate": 25,
"ImageWidth": 1918,
"ImageHeight": 1080,
"VideoScanType": "Unknown (2)",
"AudioChannels": 2,
"AudioSampleRate": 48000,
"AudioBitsPerSample": 32,
"TrackNumber": 7,
"TrackName": "Français",
"TrackLanguage": "fre",
"TrackDefault": "No",
"CodecID": "S_TEXT/UTF8",
"TrackType": "Subtitle",
"TagLanguage": "eng",
"TagName": "DURATION",
"TagString": "00:01:06.031000000",
"ImageSize": "1918x1080",
"Megapixels": 2.1
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"UniqueID": "191657682055212276795239999260924509108",
"VideoCount": "1",
"AudioCount": "5",
"TextCount": "1",
"Format": "Matroska",
"Format_Version": "4",
"FileSize": "68084120",
"Duration": "66.031",
"OverallBitRate_Mode": "VBR",
"OverallBitRate": "8248746",
"FrameRate": "25.000",
"FrameCount": "1599",
"StreamSize": "12645964",
"IsStreamable": "Yes",
"Encoded_Application": "Lavf58.24.101",
"Encoded_Library": "Lavf58.24.101",
"extra": {
"ErrorDetectionType": "Per level 1"
}
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
"UniqueID": "1",
"Format": "AVC",
"Format_Profile": "High",
"Format_Level": "4.1",
"Format_Settings_CABAC": "Yes",
"Format_Settings_RefFrames": "4",
"CodecID": "V_MPEG4/ISO/AVC",
"Duration": "63.986000000",
"BitRate": "6453995",
"Width": "1918",
"Height": "1080",
"Stored_Width": "1920",
"Stored_Height": "1088",
"Sampled_Width": "1918",
"Sampled_Height": "1080",
"PixelAspectRatio": "1.000",
"DisplayAspectRatio": "1.776",
"FrameRate_Mode": "VFR",
"FrameRate": "25.000",
"FrameCount": "1599",
"ColorSpace": "YUV",
"ChromaSubsampling": "4:2:0",
"BitDepth": "8",
"ScanType": "Progressive",
"Delay": "0.000",
"StreamSize": "51599695",
"Title": "title video",
"Language": "fr",
"Default": "Yes",
"Forced": "No",
"colour_description_present": "Yes",
"colour_description_present_Source": "Container / Stream",
"colour_range": "Limited",
"colour_range_Source": "Container / Stream",
"colour_primaries_Source": "Stream",
"transfer_characteristics_Source": "Stream",
"matrix_coefficients": "BT.709",
"matrix_coefficients_Source": "Container / Stream"
},
{
"@type": "Audio",
"@typeorder": "1",
"StreamOrder": "1",
"ID": "2",
"UniqueID": "2",
"Format": "FLAC",
"CodecID": "A_FLAC",
"Duration": "64.005000000",
"BitRate_Mode": "VBR",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1537",
"SamplingRate": "48000",
"SamplingCount": "3072240",
"FrameRate": "31.232",
"FrameCount": "1999",
"BitDepth": "24",
"Compression_Mode": "Lossless",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 flac",
"Language": "en",
"Default": "No",
"Forced": "No"
},
{
"@type": "Audio",
"@typeorder": "2",
"StreamOrder": "2",
"ID": "3",
"UniqueID": "3",
"Format": "AC-3",
"Format_Commercial_IfAny": "Dolby Digital",
"Format_Settings_Endianness": "Big",
"CodecID": "A_AC3",
"Duration": "64.000000000",
"BitRate_Mode": "CBR",
"BitRate": "192000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1536",
"SamplingRate": "48000",
"SamplingCount": "3072000",
"FrameRate": "31.250",
"FrameCount": "1999",
"BitDepth": "32",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 ac3",
"Language": "en",
"ServiceKind": "CM",
"Default": "No",
"Forced": "No",
"extra": {
"bsid": "8",
"dialnorm": "-31",
"dsurmod": "0",
"acmod": "2",
"lfeon": "0",
"dialnorm_Average": "-31",
"dialnorm_Minimum": "-31"
}
},
{
"@type": "Audio",
"@typeorder": "3",
"StreamOrder": "3",
"ID": "4",
"UniqueID": "4",
"Format": "E-AC-3",
"Format_Commercial_IfAny": "Dolby Digital Plus",
"Format_Settings_Endianness": "Big",
"CodecID": "A_EAC3",
"Duration": "64.000000000",
"BitRate_Mode": "CBR",
"BitRate": "192000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1536",
"SamplingRate": "48000",
"SamplingCount": "3072000",
"FrameRate": "31.250",
"FrameCount": "1999",
"BitDepth": "32",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 eac3",
"Language": "en",
"ServiceKind": "CM",
"Default": "No",
"Forced": "No",
"extra": {
"bsid": "16",
"dialnorm": "-31",
"dsurmod": "0",
"acmod": "2",
"lfeon": "0",
"dialnorm_Average": "-31",
"dialnorm_Minimum": "-31"
}
},
{
"@type": "Audio",
"@typeorder": "4",
"StreamOrder": "4",
"ID": "5",
"UniqueID": "5",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "64.004000000",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "3072192",
"FrameRate": "46.875",
"FrameCount": "1999",
"Compression_Mode": "Lossy",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Français E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 aac",
"Language": "fr",
"Default": "Yes",
"Forced": "No"
},
{
"@type": "Audio",
"@typeorder": "5",
"StreamOrder": "5",
"ID": "6",
"UniqueID": "6",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "64.004000000",
"BitRate": "96000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "3072192",
"FrameRate": "46.875",
"FrameCount": "1999",
"Compression_Mode": "Lossy",
"Delay": "0.005",
"Delay_Source": "Container",
"StreamSize": "767616",
"StreamSize_Proportion": "0.01127",
"Title": "Anglais E-AC3 2.0",
"Encoded_Library": "Lavc58.42.102 aac",
"Language": "en",
"Default": "No",
"Forced": "No"
},
{
"@type": "Text",
"StreamOrder": "6",
"ID": "7",
"UniqueID": "7",
"Format": "UTF-8",
"CodecID": "S_TEXT/UTF8",
"Duration": "66.031000000",
"BitRate": "46",
"FrameRate": "0.182",
"FrameCount": "12",
"ElementCount": "12",
"StreamSize": "381",
"Title": "Français",
"Language": "fr",
"Default": "No",
"Forced": "No"
}
]
}
}

View file

@ -1,334 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/qsv_h265.mkv",
"file": "C:/Transcode/Source Folder/qsv_h265.mkv",
"DB": "2MY5YD7P8",
"footprintId": "xkZP3IPR6g",
"hasClosedCaptions": false,
"container": "mkv",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "\"Unable to run CCExtractor\""
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "hevc",
"codec_long_name": "H.265 / HEVC (High Efficiency Video Coding)",
"profile": "Main",
"codec_type": "video",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"width": 1920,
"height": 1080,
"coded_width": 1920,
"coded_height": 1088,
"closed_captions": 0,
"has_b_frames": 1,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "16:9",
"pix_fmt": "yuv420p",
"level": 150,
"color_range": "tv",
"color_space": "bt709",
"color_transfer": "bt709",
"color_primaries": "bt709",
"chroma_location": "left",
"refs": 1,
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/1000",
"start_pts": 21,
"start_time": "0.021000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"DURATION": "00:00:21.341000000"
}
},
{
"index": 1,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"title": "Stereo",
"DURATION": "00:00:21.375000000"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/qsv_h265.mkv",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "21.375000",
"size": "8569883",
"bit_rate": "3207441",
"probe_score": 100,
"tags": {
"creation_time": "2019-09-13T16:46:14.000000Z",
"ENCODER": "Lavf58.20.100"
}
}
},
"file_size": 8.172877311706543,
"video_resolution": "1080p",
"fileMedium": "video",
"video_codec_name": "hevc",
"audio_codec_name": "",
"lastPluginDetails": "none",
"createdAt": 1653029410394,
"bit_rate": 3207441,
"duration": 21,
"statSync": {
"dev": 3832468976,
"mode": 33060,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 1970324841360027,
"size": 8569883,
"blocks": 16744,
"atimeMs": 1653029410381.1382,
"mtimeMs": 1568393195000,
"ctimeMs": 1650864287188.087,
"birthtimeMs": 1650864302270.2063,
"atime": "2022-05-20T06:50:10.381Z",
"mtime": "2019-09-13T16:46:35.000Z",
"ctime": "2022-04-25T05:24:47.188Z",
"birthtime": "2022-04-25T05:25:02.270Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": 0,
"lastUpdate": 1653027918258,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/qsv_h265.mkv",
"errors": [],
"Duration": 21.375,
"ExifToolVersion": 12.4,
"FileName": "qsv_h265.mkv",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "8.2 MiB",
"FileModifyDate": {
"year": 2019,
"month": 9,
"day": 13,
"hour": 17,
"minute": 46,
"second": 35,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2019:09:13 17:46:35+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 20,
"hour": 7,
"minute": 50,
"second": 9,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:20 07:50:09+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 4,
"day": 25,
"hour": 6,
"minute": 25,
"second": 2,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:04:25 06:25:02+01:00"
},
"FilePermissions": "-r--r--r--",
"FileType": "MKV",
"FileTypeExtension": "mkv",
"MIMEType": "video/x-matroska",
"EBMLVersion": 1,
"EBMLReadVersion": 1,
"DocType": "matroska",
"DocTypeVersion": 4,
"DocTypeReadVersion": 2,
"TimecodeScale": "1 ms",
"MuxingApp": "Lavf58.20.100",
"WritingApp": "HandBrake 1.2.2 2019022300",
"DateTimeOriginal": {
"year": 2019,
"month": 9,
"day": 13,
"hour": 16,
"minute": 46,
"second": 14,
"millisecond": 0,
"tzoffsetMinutes": 0,
"rawValue": "2019:09:13 16:46:14Z"
},
"VideoFrameRate": 25,
"ImageWidth": 1920,
"ImageHeight": 1080,
"TrackNumber": 2,
"TrackName": "Stereo",
"TrackLanguage": "und",
"CodecID": "A_AAC",
"TrackType": "Audio",
"AudioChannels": 2,
"AudioSampleRate": 48000,
"TagName": "DURATION",
"TagString": "00:00:21.375000000",
"ImageSize": "1920x1080",
"Megapixels": 2.1
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"UniqueID": "112612991515236890937117095733641799622",
"VideoCount": "1",
"AudioCount": "1",
"Format": "Matroska",
"Format_Version": "4",
"FileSize": "8569883",
"Duration": "21.375",
"OverallBitRate": "3207442",
"FrameRate": "25.000",
"FrameCount": "533",
"IsStreamable": "Yes",
"Encoded_Date": "UTC 2019-09-13 16:46:14",
"Encoded_Application": "HandBrake 1.2.2 2019022300",
"Encoded_Library": "Lavf58.20.100",
"extra": {
"ErrorDetectionType": "Per level 1"
}
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
"UniqueID": "1",
"Format": "HEVC",
"Format_Profile": "Main",
"Format_Level": "5",
"Format_Tier": "Main",
"CodecID": "V_MPEGH/ISO/HEVC",
"Duration": "21.320000000",
"Width": "1920",
"Height": "1080",
"Stored_Height": "1088",
"Sampled_Width": "1920",
"Sampled_Height": "1080",
"PixelAspectRatio": "1.000",
"DisplayAspectRatio": "1.778",
"FrameRate_Mode": "CFR",
"FrameRate": "25.000",
"FrameCount": "533",
"ColorSpace": "YUV",
"ChromaSubsampling": "4:2:0",
"BitDepth": "8",
"Delay": "0.021",
"Default": "Yes",
"Forced": "No",
"colour_description_present": "Yes",
"colour_description_present_Source": "Stream",
"colour_range": "Limited",
"colour_range_Source": "Stream",
"colour_primaries": "BT.709",
"colour_primaries_Source": "Stream",
"transfer_characteristics": "BT.709",
"transfer_characteristics_Source": "Stream",
"matrix_coefficients": "BT.709",
"matrix_coefficients_Source": "Stream"
},
{
"@type": "Audio",
"StreamOrder": "1",
"ID": "2",
"UniqueID": "2",
"Format": "AAC",
"Format_Settings_SBR": "No (Explicit)",
"Format_AdditionalFeatures": "LC",
"CodecID": "A_AAC-2",
"Duration": "21.375000000",
"Channels": "2",
"ChannelPositions": "Front: L R",
"ChannelLayout": "L R",
"SamplesPerFrame": "1024",
"SamplingRate": "48000",
"SamplingCount": "1026000",
"FrameRate": "46.875",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"Title": "Stereo",
"Default": "Yes",
"Forced": "No"
}
]
}
}

View file

@ -1,314 +0,0 @@
{
"_id": "C:/Transcode/Source Folder/sample__-__-__libmp3lame__30s__audio.mkv",
"file": "C:/Transcode/Source Folder/sample__-__-__libmp3lame__30s__audio.mkv",
"DB": "2MY5YD7P8",
"footprintId": "xpsr-dmmd",
"hasClosedCaptions": false,
"container": "mkv",
"scannerReads": {
"ffProbeRead": "success",
"exiftoolRead": "success",
"mediaInfoRead": "success",
"closedCaptionRead": "\"Unable to run CCExtractor\""
},
"ffProbeData": {
"streams": [
{
"index": 0,
"codec_name": "mp3",
"codec_long_name": "MP3 (MPEG audio layer 3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "128000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"HANDLER_NAME": "GPAC ISO Audio Handler",
"ENCODER": "Lavc57.107.100 libmp3lame",
"DURATION": "00:00:30.023000000"
}
},
{
"index": 1,
"codec_name": "mp3",
"codec_long_name": "MP3 (MPEG audio layer 3)",
"codec_type": "audio",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "48000",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/1000",
"start_pts": 0,
"start_time": "0.000000",
"bit_rate": "128000",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0,
"captions": 0,
"descriptions": 0,
"metadata": 0,
"dependent": 0,
"still_image": 0
},
"tags": {
"HANDLER_NAME": "GPAC ISO Audio Handler",
"ENCODER": "Lavc57.107.100 libmp3lame",
"DURATION": "00:00:30.023000000"
}
}
],
"format": {
"filename": "C:/Transcode/Source Folder/sample__-__-__libmp3lame__30s__audio.mkv",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "30.023000",
"size": "979815",
"bit_rate": "261083",
"probe_score": 100,
"tags": {
"title": "Big Buck Bunny, Sunflower version",
"GENRE": "Animation",
"MAJOR_BRAND": "isom",
"MINOR_VERSION": "1",
"COMPATIBLE_BRANDS": "isomavc1",
"COMPOSER": "Sacha Goedegebure",
"ARTIST": "Blender Foundation 2008, Janus Bager Kristensen 2013",
"COMMENT": "Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net",
"ENCODER": "Lavf57.83.100"
}
}
},
"file_size": 0.9344244003295898,
"video_resolution": "",
"fileMedium": "audio",
"video_codec_name": "",
"audio_codec_name": "mp3",
"lastPluginDetails": "none",
"createdAt": 1653224430511,
"bit_rate": 261083,
"duration": 30,
"statSync": {
"dev": 3832468976,
"mode": 33206,
"nlink": 1,
"uid": 0,
"gid": 0,
"rdev": 0,
"blksize": 4096,
"ino": 10133099162447292,
"size": 979815,
"blocks": 1920,
"atimeMs": 1653224430487.7,
"mtimeMs": 1653224386734.2915,
"ctimeMs": 1653224395573.211,
"birthtimeMs": 1653224386247.453,
"atime": "2022-05-22T13:00:30.488Z",
"mtime": "2022-05-22T12:59:46.734Z",
"ctime": "2022-05-22T12:59:55.573Z",
"birthtime": "2022-05-22T12:59:46.247Z"
},
"HealthCheck": "",
"TranscodeDecisionMaker": "",
"lastHealthCheckDate": 0,
"holdUntil": 0,
"lastTranscodeDate": 0,
"bumped": false,
"history": "",
"oldSize": 0,
"newSize": 0,
"videoStreamIndex": -1,
"meta": {
"SourceFile": "C:/Transcode/Source Folder/sample__-__-__libmp3lame__30s__audio.mkv",
"errors": [],
"Duration": 30.023,
"ExifToolVersion": 12.4,
"FileName": "sample__-__-__libmp3lame__30s__audio.mkv",
"Directory": "C:/Transcode/Source Folder",
"FileSize": "957 KiB",
"ZoneIdentifier": "Exists",
"FileModifyDate": {
"year": 2022,
"month": 5,
"day": 22,
"hour": 13,
"minute": 59,
"second": 46,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:22 13:59:46+01:00"
},
"FileAccessDate": {
"year": 2022,
"month": 5,
"day": 22,
"hour": 14,
"minute": 0,
"second": 29,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:22 14:00:29+01:00"
},
"FileCreateDate": {
"year": 2022,
"month": 5,
"day": 22,
"hour": 13,
"minute": 59,
"second": 46,
"millisecond": 0,
"tzoffsetMinutes": 60,
"rawValue": "2022:05:22 13:59:46+01:00"
},
"FilePermissions": "-rw-rw-rw-",
"FileType": "MKA",
"FileTypeExtension": "mka",
"MIMEType": "audio/x-matroska",
"EBMLVersion": 1,
"EBMLReadVersion": 1,
"DocType": "matroska",
"DocTypeVersion": 4,
"DocTypeReadVersion": 2,
"TimecodeScale": "1 ms",
"Title": "Big Buck Bunny, Sunflower version",
"MuxingApp": "Lavf57.83.100",
"WritingApp": "Lavf57.83.100",
"TrackNumber": 2,
"TrackLanguage": "und",
"CodecID": "A_MPEG/L3",
"TrackType": "Audio",
"AudioChannels": 2,
"AudioSampleRate": 48000,
"AudioBitsPerSample": 32,
"TagName": "DURATION",
"TagString": "00:00:30.023000000"
},
"mediaInfo": {
"@ref": "",
"track": [
{
"@type": "General",
"UniqueID": "301354878049300200919944107613778820882",
"AudioCount": "2",
"Format": "Matroska",
"Format_Version": "4",
"FileSize": "979815",
"Duration": "30.023",
"OverallBitRate_Mode": "CBR",
"OverallBitRate": "261084",
"StreamSize": "19079",
"IsStreamable": "Yes",
"Title": "Big Buck Bunny, Sunflower version",
"Track": "Big Buck Bunny, Sunflower version",
"Encoded_Application": "Lavf57.83.100",
"Encoded_Library": "Lavf57.83.100",
"Comment": "Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net",
"extra": {
"ErrorDetectionType": "Per level 1",
"ARTIST": "Blender Foundation 2008, Janus Bager Kristensen 2013",
"COMPOSER": "Sacha Goedegebure",
"GENRE": "Animation"
}
},
{
"@type": "Audio",
"@typeorder": "1",
"StreamOrder": "0",
"ID": "1",
"UniqueID": "1",
"Format": "MPEG Audio",
"Format_Version": "1",
"Format_Profile": "Layer 3",
"Format_Settings_Mode": "Joint stereo",
"Format_Settings_ModeExtension": "MS Stereo",
"CodecID": "A_MPEG/L3",
"Duration": "30.023000000",
"BitRate_Mode": "CBR",
"BitRate": "128000",
"Channels": "2",
"SamplingRate": "48000",
"SamplingCount": "1441104",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "480368",
"StreamSize_Proportion": "0.49026",
"Encoded_Library": "Lavc57.107.100 libmp3lame",
"Default": "Yes",
"Forced": "No"
},
{
"@type": "Audio",
"@typeorder": "2",
"StreamOrder": "1",
"ID": "2",
"UniqueID": "2",
"Format": "MPEG Audio",
"Format_Version": "1",
"Format_Profile": "Layer 3",
"Format_Settings_Mode": "Joint stereo",
"Format_Settings_ModeExtension": "MS Stereo",
"CodecID": "A_MPEG/L3",
"Duration": "30.023000000",
"BitRate_Mode": "CBR",
"BitRate": "128000",
"Channels": "2",
"SamplingRate": "48000",
"SamplingCount": "1441104",
"Compression_Mode": "Lossy",
"Delay": "0.000",
"Delay_Source": "Container",
"StreamSize": "480368",
"StreamSize_Proportion": "0.49026",
"Encoded_Library": "Lavc57.107.100 libmp3lame",
"Default": "Yes",
"Forced": "No"
}
]
}
}