commit
e3d27da87f
@ -1,23 +0,0 @@
|
||||
name: Node.js CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: ['**']
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- run: npm i
|
||||
- run: npm run checkPlugins && npm run lint
|
||||
@ -0,0 +1,34 @@
|
||||
name: Node.js CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: ['**']
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
os:
|
||||
[
|
||||
["ubuntu-20.04"],
|
||||
["windows-2019"],
|
||||
["macos-11.0"],
|
||||
]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Set git to use LF
|
||||
run: |
|
||||
git config --global core.autocrlf false
|
||||
git config --global core.eol lf
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- run: npm i
|
||||
- run: npm run checkPlugins
|
||||
- run: npm run lint
|
||||
- run: npm run test
|
||||
@ -0,0 +1,86 @@
|
||||
const details = () => ({
|
||||
id: 'Tdarr_Plugin_00td_filter_by_codec_tag_string',
|
||||
Stage: 'Pre-processing',
|
||||
Name: 'Filter by codec tag string',
|
||||
Type: 'Video',
|
||||
Operation: 'Filter',
|
||||
Description: 'Only allow files with specified codec tag strings to be processed \n\n',
|
||||
Version: '1.00',
|
||||
Tags: 'filter',
|
||||
Inputs: [
|
||||
{
|
||||
name: 'codecTagStringsToProcess',
|
||||
type: 'string',
|
||||
defaultValue: '',
|
||||
inputUI: {
|
||||
type: 'text',
|
||||
},
|
||||
tooltip: `
|
||||
Enter a comma separated list of codec tag strings to be processed.
|
||||
Leave blank if using codecTagStringsToNotProcess`,
|
||||
},
|
||||
{
|
||||
name: 'codecTagStringsToNotProcess',
|
||||
type: 'string',
|
||||
defaultValue: '',
|
||||
inputUI: {
|
||||
type: 'text',
|
||||
},
|
||||
tooltip: `
|
||||
Enter a comma separated list of codec tag strings to be not be processed.
|
||||
Leave blank if using codecTagStringsToProcess`,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const plugin = (file, librarySettings, inputs, otherArguments) => {
|
||||
const lib = require('../methods/lib')();
|
||||
// eslint-disable-next-line no-unused-vars,no-param-reassign
|
||||
inputs = lib.loadDefaultValues(inputs, details);
|
||||
const response = {
|
||||
processFile: false,
|
||||
infoLog: '',
|
||||
};
|
||||
|
||||
let fileCodecTagStrings = [];
|
||||
if (file.ffProbeData && file.ffProbeData.streams) {
|
||||
fileCodecTagStrings = file.ffProbeData.streams.map((row) => row.codec_tag_string);
|
||||
}
|
||||
|
||||
const checkInclude = (inputArr) => {
|
||||
for (let i = 0; i < fileCodecTagStrings.length; i += 1) {
|
||||
if (inputArr.includes(fileCodecTagStrings[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
if (inputs.codecTagStringsToProcess !== '') {
|
||||
const codecTagStrings = inputs.codecTagStringsToProcess.split(',');
|
||||
if (checkInclude(codecTagStrings)) {
|
||||
response.processFile = true;
|
||||
response.infoLog += 'File is in codecTagStringsToProcess. Moving to next plugin.';
|
||||
} else {
|
||||
response.processFile = false;
|
||||
response.infoLog += 'File is not in codecTagStringsToProcess. Breaking out of plugin stack.';
|
||||
}
|
||||
}
|
||||
|
||||
if (inputs.codecTagStringsToNotProcess !== '') {
|
||||
const codecTagStrings = inputs.codecTagStringsToNotProcess.split(',');
|
||||
if (checkInclude(codecTagStrings)) {
|
||||
response.processFile = false;
|
||||
response.infoLog += 'File is in codecTagStringsToNotProcess. Breaking out of plugin stack.';
|
||||
} else {
|
||||
response.processFile = true;
|
||||
response.infoLog += 'File is not in codecTagStringsToNotProcess. Moving to next plugin.';
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
};
|
||||
|
||||
module.exports.details = details;
|
||||
module.exports.plugin = plugin;
|
||||
@ -0,0 +1,92 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,74 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,66 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,89 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,72 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,65 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,66 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,64 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,59 @@
|
||||
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);
|
||||
@ -0,0 +1,59 @@
|
||||
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);
|
||||
@ -0,0 +1,74 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,64 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,41 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,81 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,41 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,41 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,41 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,43 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,62 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,44 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,112 @@
|
||||
/* eslint max-len: 0 */
|
||||
const _ = require('lodash');
|
||||
const run = require('../helpers/run');
|
||||
|
||||
const tests = [
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: true,
|
||||
preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset medium -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 967680 -maxrate 1257984 -minrate 677376 -bufsize 1205959 -map_metadata:g -1',
|
||||
container: '.mp4',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
infoLog: 'No valid resolution selected, defaulting to 8KUHD.\n'
|
||||
+ 'Video details: h264-720p \n'
|
||||
+ ' 1280x720x25@8 bits.\n'
|
||||
+ 'Video bitrate is 1206Kbps, overall is 1591Kbps. Calculated target is 1613Kbps.\n'
|
||||
+ '☒H264 Resolution is 720p, bitrate was 1206Kbps. HEVC target bitrate will be 968Kbps.\n'
|
||||
+ '☒Transcoding to HEVC.',
|
||||
},
|
||||
}, {
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
ffmpegPreset: 'veryslow',
|
||||
container: 'mkv',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: true,
|
||||
preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 3207442 -maxrate 4717440 -minrate 2540160 -bufsize 3628800 -map_metadata:g -1',
|
||||
container: '.mkv',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
infoLog: 'No valid resolution selected, defaulting to 8KUHD.\n'
|
||||
+ 'Video details: hevc-1080p \n'
|
||||
+ ' 1920x1080x25@8 bits.\n'
|
||||
+ 'Video bitrate is NaNKbps, overall is 3207Kbps. Calculated target is 3629Kbps.\n'
|
||||
+ '☒HEVC Bitrate for 1080p could not be determined, \n'
|
||||
+ ' using sensible default of 3207Kbps.\n'
|
||||
+ '☒Transcoding to HEVC.',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
maxResolution: '720p',
|
||||
ffmpegPreset: 'veryslow',
|
||||
container: 'mkv',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: true,
|
||||
preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid -resize 1280x720 ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 -b:v 1612800 -maxrate 2096640 -minrate 1128960 -bufsize 1612800 -map_metadata:g -1',
|
||||
container: '.mkv',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
infoLog: 'Resizing to 1280x720.\n'
|
||||
+ 'Video details: hevc-1080p \n'
|
||||
+ ' 1920x1080x25@8 bits.\n'
|
||||
+ 'Video bitrate is NaNKbps, overall is 3207Kbps. Calculated target is 1613Kbps.\n'
|
||||
+ '☒HEVC Bitrate for 1080p could not be determined, \n'
|
||||
+ ' using sensible default of 1613Kbps.\n'
|
||||
+ '☒Transcoding to HEVC.',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
// modify so no processing needed
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json'));
|
||||
file.ffProbeData.streams[0].codec_name = 'hevc';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
maxResolution: '1080p',
|
||||
ffmpegPreset: 'veryslow',
|
||||
container: 'mkv',
|
||||
compressionFactor: '1',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: false,
|
||||
preset: '-vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v hevc_cuvid ,-map 0:v -map 0:a -map 0:s? -map -:d? -c copy -c:v:0 hevc_nvenc -preset veryslow -profile:v main10 -rc-lookahead 32 -spatial_aq:v 1 -aq-strength:v 8 -max_muxing_queue_size 4096 ',
|
||||
container: '.mkv',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
infoLog: 'Video details: hevc-1080p \n'
|
||||
+ ' 1918x1080x25@8 bits.\n'
|
||||
+ 'Video bitrate is 6454Kbps, overall is 8249Kbps. Calculated target is 51786Kbps.\n'
|
||||
+ '☑HEVC Bitrate is within limits.\n',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
run(tests);
|
||||
@ -0,0 +1,75 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,139 @@
|
||||
/* 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: {
|
||||
win32: {
|
||||
container: '.mkv',
|
||||
processFile: true,
|
||||
preset: ', -sn -map 0:v -c:v hevc_qsv -load_plugin hevc_hw -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 - ',
|
||||
},
|
||||
linux: false,
|
||||
darwin: {
|
||||
container: '.mkv',
|
||||
processFile: true,
|
||||
preset: ', -sn -map 0:v -c:v hevc_videotoolbox -profile main -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: {
|
||||
win32: {
|
||||
container: '.mkv',
|
||||
processFile: true,
|
||||
preset: ', -sn -map 0:v -c:v hevc_qsv -load_plugin hevc_hw -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 - ',
|
||||
},
|
||||
linux: false,
|
||||
darwin: {
|
||||
container: '.mkv',
|
||||
processFile: true,
|
||||
preset: ', -sn -map 0:v -c:v hevc_videotoolbox -profile main -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);
|
||||
@ -0,0 +1,59 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,145 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,145 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,45 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,46 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,98 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,72 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,90 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,103 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,46 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,47 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,107 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,106 @@
|
||||
/* 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,
|
||||
infoLog: 'File is already H264 but file is not in mkv. Remuxing \n',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
container: '.mkv',
|
||||
preset: ', -map 0 -c copy ',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'mkv';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: false,
|
||||
infoLog: 'File is already H264 and in mkv \n',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
container: '.mkv',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: false,
|
||||
infoLog: 'Target bitrate could not be calculated. Skipping this plugin. \n',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
container: '.mkv',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.ffProbeData.streams[0].codec_name = 'hevc';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: true,
|
||||
infoLog: 'Container for output selected as mkv. \n'
|
||||
+ 'Current bitrate = 1526 \n'
|
||||
+ 'Bitrate settings: \n'
|
||||
+ 'Target = 1526 \n'
|
||||
+ 'Minimum = 1068 \n'
|
||||
+ 'Maximum = 1983 \n'
|
||||
+ 'File is not h264. Transcoding. \n',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
container: '.mkv',
|
||||
preset: 'undefined,-map 0 -c:v h264_nvenc -preset fast -crf 23 -tune film -b:v 1526k -minrate 1068k -maxrate 1983k -bufsize 1526k -c:a copy -c:s copy -max_muxing_queue_size 9999 -pix_fmt yuv420p ',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
container: 'mp4',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
processFile: false,
|
||||
infoLog: 'File is already H264 and in mp4 \n',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
container: '.mp4',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
run(tests);
|
||||
@ -0,0 +1,505 @@
|
||||
/* 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: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 27 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 2 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH265_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 26 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 2 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'webm';
|
||||
file.ffProbeData.streams[0].codec_name = 'vp9';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☑ File is in proper video format\n'
|
||||
+ '☑ No video processing necessary\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -c:v copy \n -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'webm';
|
||||
file.ffProbeData.streams[0].codec_name = 'vp9';
|
||||
file.ffProbeData.streams[1].codec_name = 'opus';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☑ No audio processing necessary\n'
|
||||
+ '☑ File is in proper video format\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 \n -c:a copy -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '16',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 28 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 2 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '240p';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '16',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 33 -threads 64 -speed 1 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 0 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '360p';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '16',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 32 -threads 64 -speed 1 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 1 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '480p';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '16',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 29 -threads 64 -speed 1 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 1 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '1080p';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '16',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 27 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 2 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '4KUHD';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '17',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 16 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 3 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '8KUHD';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '17',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Audio is not in proper codec, will format\n'
|
||||
+ '☒ Transcoding file to VP9\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -pix_fmt yuv420p10le -c:v libvpx-vp9 -b:v 0 -crf 17 -threads 64 -speed 2 \n'
|
||||
+ ' -quality good -static-thresh 0 -tile-columns 3 -tile-rows 0 -frame-parallel 0 -row-mt 1 \n'
|
||||
+ ' -aq-mode 0 -g 240 \n'
|
||||
+ ' -c:a libopus -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'webm';
|
||||
file.ffProbeData.streams[0].codec_name = 'vp9';
|
||||
file.ffProbeData.streams[1].codec_name = 'opus';
|
||||
file.ffProbeData.streams[1].tags.language = 'eng';
|
||||
|
||||
file.ffProbeData.streams[2] = _.cloneDeep(file.ffProbeData.streams[1]);
|
||||
file.ffProbeData.streams[2].codec_type = 'subtitle';
|
||||
file.ffProbeData.streams[2].tags.title = 'commentary';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '17',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng,und',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☑ No audio processing necessary\n'
|
||||
+ '☑ File is in proper video format\n'
|
||||
+ '☑ No video processing necessary\n'
|
||||
+ '☒ Removing Commentary or Description subtitle: commentary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -c:v copy \n -c:a copy -c:s copy -map -0:s:0',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'webm';
|
||||
file.ffProbeData.streams[0].codec_name = 'vp9';
|
||||
file.ffProbeData.streams[1].codec_name = 'opus';
|
||||
file.ffProbeData.streams[1].tags.language = 'eng';
|
||||
|
||||
file.ffProbeData.streams[2] = _.cloneDeep(file.ffProbeData.streams[0]);
|
||||
file.ffProbeData.streams[2].codec_name = 'mjpeg';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '17',
|
||||
audio_language: 'eng,und,fre',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng,und',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☑ No audio processing necessary\n'
|
||||
+ '☑ File is in proper video format\n'
|
||||
+ '☒ Removing mjpeg\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -c:v copy -map -0:v:1 \n -c:a copy -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.container = 'webm';
|
||||
file.ffProbeData.streams[0].codec_name = 'vp9';
|
||||
file.ffProbeData.streams[1].codec_name = 'opus';
|
||||
file.ffProbeData.streams[1].tags.language = 'eng';
|
||||
|
||||
file.ffProbeData.streams[2] = _.cloneDeep(file.ffProbeData.streams[1]);
|
||||
file.ffProbeData.streams[2].tags.language = 'fre';
|
||||
return file;
|
||||
})(),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
CQ_240p: '33',
|
||||
CQ_360p: '32',
|
||||
CQ_480p: '29',
|
||||
CQ_720p: '28',
|
||||
CQ_1080p: '27',
|
||||
CQ_4KUHD: '16',
|
||||
CQ_8KUHD: '17',
|
||||
audio_language: 'eng,und',
|
||||
audio_commentary: 'true',
|
||||
subtitle_language: 'eng,und',
|
||||
subtitle_commentary: 'true',
|
||||
remove_mjpeg: 'true',
|
||||
},
|
||||
otherArguments: {},
|
||||
},
|
||||
output: {
|
||||
container: '.webm',
|
||||
FFmpegMode: true,
|
||||
handBrakeMode: false,
|
||||
infoLog: '☒ Removing audio track in language fre\n'
|
||||
+ '☑ File is in proper video format\n'
|
||||
+ '☑ No video processing necessary\n'
|
||||
+ '☑ No subtitle processing necessary',
|
||||
processFile: true,
|
||||
preset: ',-map 0 -map -0:d -c:v copy \n -c:a copy -map -0:a:1 -c:s copy',
|
||||
reQueueAfter: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
run(tests);
|
||||
@ -0,0 +1,42 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,66 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,66 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,45 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,68 @@
|
||||
/* 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: {
|
||||
originalLibraryFile: _.cloneDeep(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: _.cloneDeep(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: _.cloneDeep(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);
|
||||
@ -0,0 +1,68 @@
|
||||
/* 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: {
|
||||
originalLibraryFile: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
},
|
||||
},
|
||||
output: {
|
||||
processFile: false,
|
||||
preset: '',
|
||||
handBrakeMode: false,
|
||||
FFmpegMode: true,
|
||||
reQueueAfter: true,
|
||||
infoLog: 'New file has duration 5.312 s which is 100.000% of original file duration: 5.312 s',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
upperBound: '110',
|
||||
lowerBound: '35',
|
||||
},
|
||||
otherArguments: {
|
||||
originalLibraryFile: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.mediaInfo.track.filter((row) => row['@type'] === 'General')[0].Duration = 20;
|
||||
return file;
|
||||
})(),
|
||||
},
|
||||
},
|
||||
output: 'New file duration not within limits. New file has duration 5.312 s which is 26.560% of original file duration: 20 s. lowerBound is 35%',
|
||||
error: {
|
||||
shouldThrow: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')),
|
||||
librarySettings: {},
|
||||
inputs: {
|
||||
upperBound: '110',
|
||||
lowerBound: '35',
|
||||
},
|
||||
otherArguments: {
|
||||
originalLibraryFile: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.mediaInfo.track.filter((row) => row['@type'] === 'General')[0].Duration = 1;
|
||||
return file;
|
||||
})(),
|
||||
},
|
||||
},
|
||||
output: 'New file duration not within limits. New file has duration 5.312 s which is 531.200% of original file duration: 1 s. upperBound is 110%',
|
||||
error: {
|
||||
shouldThrow: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
run(tests);
|
||||
@ -0,0 +1,45 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,59 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,160 @@
|
||||
/* 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: {
|
||||
linux: {
|
||||
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',
|
||||
},
|
||||
win32: {
|
||||
processFile: true,
|
||||
preset: '-fflags +genpts -hwaccel qsv -c:v h264_qsv<io> -map 0 -c:v hevc_qsv -load_plugin hevc_hw -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',
|
||||
},
|
||||
darwin: {
|
||||
processFile: true,
|
||||
preset: '-fflags +genpts -hwaccel qsv -c:v h264_qsv<io> -map 0 -c:v hevc_videotoolbox -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: {
|
||||
linux: {
|
||||
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',
|
||||
},
|
||||
win32: {
|
||||
processFile: true,
|
||||
preset: '-fflags +genpts -hwaccel qsv<io> -map 0 -c:v hevc_qsv -load_plugin hevc_hw -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',
|
||||
},
|
||||
darwin: {
|
||||
processFile: true,
|
||||
preset: '-fflags +genpts -hwaccel qsv<io> -map 0 -c:v hevc_videotoolbox -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);
|
||||
@ -0,0 +1,49 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,50 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,47 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,62 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,110 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,97 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,99 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,96 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,94 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,48 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,85 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,68 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,66 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,42 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,50 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,42 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,44 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,67 @@
|
||||
/* 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);
|
||||
@ -0,0 +1,84 @@
|
||||
/* 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: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: _.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',
|
||||
},
|
||||
},
|
||||
{
|
||||
input: {
|
||||
file: (() => {
|
||||
const file = _.cloneDeep(require('../sampleData/media/sampleH264_1.json'));
|
||||
file.video_resolution = '4KUHD';
|
||||
return file;
|
||||
})(),
|
||||
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: "☒ 4K file isn't in hevc! \n",
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
run(tests);
|
||||
@ -0,0 +1,63 @@
|
||||
/* 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);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue