From a21852d233dfcd567e8603bae79189dc9fe5c7ca Mon Sep 17 00:00:00 2001 From: David Ambler Date: Fri, 22 May 2020 21:49:43 +0100 Subject: [PATCH] QSV Mpeg4 fix - Fall back to software transcode when video is mpeg4. - Check for stream tags before trying to access them. --- ...darr_Plugin_drdd_standardise_all_in_one.js | 74 ++++++++++--------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/Community/Tdarr_Plugin_drdd_standardise_all_in_one.js b/Community/Tdarr_Plugin_drdd_standardise_all_in_one.js index 525939b..7b64137 100644 --- a/Community/Tdarr_Plugin_drdd_standardise_all_in_one.js +++ b/Community/Tdarr_Plugin_drdd_standardise_all_in_one.js @@ -184,7 +184,6 @@ function buildAudioConfiguration(_inputs, file, logger) { var configuration = new Configurator(["-c:a copy"]); var hasNonAc3MultiChannelAudio = false; var hasMultiChannelAudio = false; - loopOverStreamsOfType(file, "audio", function (stream, id) { hasMultiChannelAudio = stream.channels >= 6; if (stream.codec_name !== "ac3" && stream.channels >= 6) { @@ -192,7 +191,7 @@ function buildAudioConfiguration(_inputs, file, logger) { hasNonAc3MultiChannelAudio = true; } - if ("title" in stream.tags) { + if ("tags" in stream && "title" in stream.tags) { if ( stream.tags.title.toLowerCase().includes("commentary") || stream.tags.title.toLowerCase().includes("description") || @@ -241,27 +240,29 @@ function buildSubtitleConfiguration(inputs, file, logger) { return; } - // Remove unwated languages - if ("language" in stream.tags) { - if (languages.indexOf(stream.tags.language.toLowerCase()) === -1) { - configuration.AddOutputSetting(`-map -0:s:${id}`); - logger.AddError( - `Removing subtitle in language ${stream.tags.language}` - ); + if ("tags" in stream) { + // Remove unwated languages + if ("language" in stream.tags) { + if (languages.indexOf(stream.tags.language.toLowerCase()) === -1) { + configuration.AddOutputSetting(`-map -0:s:${id}`); + logger.AddError( + `Removing subtitle in language ${stream.tags.language}` + ); + } } - } - // Remove commentary subtitles - if ("title" in stream.tags) { - if ( - stream.tags.title.toLowerCase().includes("commentary") || - stream.tags.title.toLowerCase().includes("description") || - stream.tags.title.toLowerCase().includes("sdh") - ) { - configuration.AddOutputSetting(`-map -0:s:${id}`); - logger.AddError( - `Removing Commentary or Description subtitle: ${stream.tags.title}` - ); + // Remove commentary subtitles + if ("title" in stream.tags) { + if ( + stream.tags.title.toLowerCase().includes("commentary") || + stream.tags.title.toLowerCase().includes("description") || + stream.tags.title.toLowerCase().includes("sdh") + ) { + configuration.AddOutputSetting(`-map -0:s:${id}`); + logger.AddError( + `Removing Commentary or Description subtitle: ${stream.tags.title}` + ); + } } } }); @@ -286,7 +287,6 @@ function buildVideoConfiguration(inputs, file, logger) { return; } - // If MKV file with hevc codec, don't need to do anything if (stream.codec_name === "hevc" && file.container === "mkv") { logger.AddSuccess("File is in HEVC codec and in MKV"); return; @@ -301,15 +301,14 @@ function buildVideoConfiguration(inputs, file, logger) { // Check if should Transcode. if (stream.codec_name !== "hevc") { var bitrate = calculateBitrate(file); - if (inputs.minimum_target_bitrate !== "") { - if ( - bitrate.target < inputs.minimum_target_bitrate - ) { - logger.AddError( - `Skipping video encoding as target bitrate (${bitrate.target}) too low` - ); - return; - } + if ( + inputs.minimum_target_bitrate !== "" && + bitrate.target < inputs.minimum_target_bitrate + ) { + logger.AddError( + `Skipping video encoding as target bitrate (${bitrate.target}) too low` + ); + return; } var bitrateSettings = `-b:v ${bitrate.target}k -minrate ${bitrate.min}k -maxrate ${bitrate.max}k -bufsize ${bitrate.original}k`; @@ -317,7 +316,7 @@ function buildVideoConfiguration(inputs, file, logger) { /** * Intel Quick Sync configuration */ - if (inputs.qsv === "true") { + if (inputs.qsv === "true" && stream.codec_name !== "mpeg4") { configuration.AddInputSetting( "-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi" ); @@ -359,10 +358,13 @@ function buildVideoConfiguration(inputs, file, logger) { logger.AddError("Transcoding to HEVC using NVidia NVENC"); } - if (inputs.qsv !== "true" && inputs.nvenc !== "true") { + if ( + (inputs.qsv !== "true" && inputs.nvenc !== "true") || + stream.codec_name === "mpeg4" + ) { configuration.RemoveOutputSetting("-c:v copy"); configuration.AddOutputSetting(`-c:v libx265 ${bitrateSettings}`); - logger.AddError("Transcoding to HEVC"); + logger.AddError("Transcoding to HEVC (software)"); } logger.Add( @@ -403,7 +405,9 @@ function plugin(file, _librarySettings, inputs) { response.preset = `${videoSettings.GetInputSettings()},${videoSettings.GetOutputSettings()} ${audioSettings.GetOutputSettings()} ${subtitleSettings.GetOutputSettings()} -max_muxing_queue_size 4096`; response.processFile = - audioSettings.shouldProcess || videoSettings.shouldProcess || subtitleSettings.shouldProcess; + audioSettings.shouldProcess || + videoSettings.shouldProcess || + subtitleSettings.shouldProcess; if (!response.processFile) { logger.AddSuccess("No need to process file");