From 91b12d5b8360ccdcef4ac8e372529f9502d90c9e Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Wed, 25 May 2022 08:19:25 +0100 Subject: [PATCH 1/3] Update re-ordering of mp4 files --- ...gin_00td_action_re_order_all_streams_v2.js | 6 ++ ...gin_00td_action_re_order_all_streams_v2.js | 92 ++++++++++++++++++- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js b/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js index 4f162b2..9639b9a 100644 --- a/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js +++ b/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js @@ -102,6 +102,12 @@ const plugin = (file, librarySettings, inputs, otherArguments) => { + 'This may be due to a corrupt file or permissions issue when scanning the file.'); } + if (file.container === 'mp4' && file.ffProbeData.streams[0].codec_type === 'video') { + response.infoLog += 'File is mp4 and already has the video stream in the correct order!' + + ' Due to FFmpeg issues when reordering streams in mp4 files, other stream ordering will be skipped'; + return response; + } + let { streams } = JSON.parse(JSON.stringify(file.ffProbeData)); streams.forEach((stream, index) => { diff --git a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js index 2567bac..8b7fa50 100644 --- a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js +++ b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js @@ -1,10 +1,11 @@ /* eslint max-len: 0 */ +const _ = require('lodash'); const run = require('../helpers/run'); const tests = [ { input: { - file: require('../sampleData/media/sampleH264_1.json'), + file: _.cloneDeep(require('../sampleData/media/sampleH264_1.json')), librarySettings: {}, inputs: {}, otherArguments: {}, @@ -15,7 +16,7 @@ const tests = [ container: '.mp4', handBrakeMode: false, FFmpegMode: true, - infoLog: 'Streams are in the correct order!', + infoLog: 'File is mp4 and already has the video stream in the correct order! Due to FFmpeg issues when reordering streams in mp4 files, other stream ordering will be skipped', }, }, { @@ -47,7 +48,7 @@ const tests = [ // })) input: { - file: require('../sampleData/media/sampleH264_2.json'), + file: _.cloneDeep(require('../sampleData/media/sampleH264_2.json')), librarySettings: {}, inputs: { processOrder: 'codecs,channels,languages,streamTypes', @@ -67,6 +68,91 @@ const tests = [ infoLog: 'Streams are not in the correct order!', }, }, + { + input: { + file: (() => { + const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json')); + const s4 = file.ffProbeData.streams[4]; + file.ffProbeData.streams[4] = file.ffProbeData.streams[4]; + file.ffProbeData.streams[5] = s4; + return file; + })(), + librarySettings: {}, + inputs: { + processOrder: 'codecs,channels,languages,streamTypes', + languages: 'eng,fre', + streamTypes: 'video,audio,subtitle', + codecs: 'flac,ac3,eac3,aac', + channels: '7.1,5.1,2,1', + }, + otherArguments: {}, + }, + output: { + processFile: false, + preset: '', + container: '.mkv', + handBrakeMode: false, + FFmpegMode: true, + infoLog: 'Streams are in the correct order!', + }, + }, + + { + input: { + file: (() => { + const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json')); + file.container = 'mp4'; + return file; + })(), + librarySettings: {}, + inputs: { + processOrder: 'codecs,channels,languages,streamTypes', + languages: 'fre,eng', + streamTypes: 'video,audio,subtitle', + codecs: 'ac3,flac,eac3,aac', + channels: '7.1,5.1,2,1', + }, + otherArguments: {}, + }, + output: { + processFile: false, + preset: '', + container: '.mp4', + handBrakeMode: false, + FFmpegMode: true, + infoLog: 'File is mp4 and already has the video stream in the correct order! Due to FFmpeg issues when reordering streams in mp4 files, other stream ordering will be skipped', + }, + }, + { + input: { + file: (() => { + const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json')); + const s0 = file.ffProbeData.streams[0]; + // eslint-disable-next-line prefer-destructuring + file.ffProbeData.streams[0] = file.ffProbeData.streams[1]; + file.ffProbeData.streams[1] = s0; + file.container = 'mp4'; + return file; + })(), + librarySettings: {}, + inputs: { + processOrder: 'codecs,channels,languages,streamTypes', + languages: 'fre,eng', + streamTypes: 'video,audio,subtitle', + codecs: 'ac3,flac,eac3,aac', + channels: '7.1,5.1,2,1', + }, + otherArguments: {}, + }, + output: { + processFile: true, + preset: ' -c copy -map 0:1 -map 0:4 -map 0:2 -map 0:0 -map 0:3 -map 0:5 -map 0:6', + container: '.mp4', + handBrakeMode: false, + FFmpegMode: true, + infoLog: 'Streams are not in the correct order!', + }, + }, ]; run(tests); From 384f652466f1f13557adf8c0a2ccb381b30874a4 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Wed, 25 May 2022 08:49:29 +0100 Subject: [PATCH 2/3] Fix lint --- .../Tdarr_Plugin_00td_action_re_order_all_streams_v2.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js index 8b7fa50..9dd2de4 100644 --- a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js +++ b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js @@ -73,7 +73,9 @@ const tests = [ file: (() => { const file = _.cloneDeep(require('../sampleData/media/sampleH264_2.json')); const s4 = file.ffProbeData.streams[4]; - file.ffProbeData.streams[4] = file.ffProbeData.streams[4]; + + // eslint-disable-next-line prefer-destructuring + file.ffProbeData.streams[4] = file.ffProbeData.streams[5]; file.ffProbeData.streams[5] = s4; return file; })(), From 03329da35b7778c296cf591cf1e6c7b813da649a Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Wed, 25 May 2022 08:56:59 +0100 Subject: [PATCH 3/3] If mp4, only set video stream first, skip other stream ordering --- ...arr_Plugin_00td_action_re_order_all_streams_v2.js | 12 +++++++++--- ...arr_Plugin_00td_action_re_order_all_streams_v2.js | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js b/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js index 9639b9a..21881b2 100644 --- a/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js +++ b/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js @@ -102,9 +102,15 @@ const plugin = (file, librarySettings, inputs, otherArguments) => { + 'This may be due to a corrupt file or permissions issue when scanning the file.'); } - if (file.container === 'mp4' && file.ffProbeData.streams[0].codec_type === 'video') { - response.infoLog += 'File is mp4 and already has the video stream in the correct order!' - + ' Due to FFmpeg issues when reordering streams in mp4 files, other stream ordering will be skipped'; + if (file.container === 'mp4' && file.fileMedium === 'video') { + if (file.ffProbeData.streams[0].codec_type === 'video') { + response.infoLog += 'File is mp4 and already has the video stream in the correct order!' + + ' Due to FFmpeg issues when reordering streams in mp4 files, other stream ordering will be skipped'; + return response; + } + response.processFile = true; + response.infoLog += 'File is mp4 and contains video but video is not first stream, remuxing'; + response.preset = ',-map 0:v? -map 0:a? -map 0:s? -map 0:d? -map 0:t? -c copy'; return response; } diff --git a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js index 9dd2de4..96ca95f 100644 --- a/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js +++ b/tests/Community/Tdarr_Plugin_00td_action_re_order_all_streams_v2.js @@ -148,11 +148,11 @@ const tests = [ }, output: { processFile: true, - preset: ' -c copy -map 0:1 -map 0:4 -map 0:2 -map 0:0 -map 0:3 -map 0:5 -map 0:6', + preset: ',-map 0:v? -map 0:a? -map 0:s? -map 0:d? -map 0:t? -c copy', container: '.mp4', handBrakeMode: false, FFmpegMode: true, - infoLog: 'Streams are not in the correct order!', + infoLog: 'File is mp4 and contains video but video is not first stream, remuxing', }, }, ];