QSV Mpeg4 fix

- Fall back to software transcode when video is mpeg4.
- Check for stream tags before trying to access them.
This commit is contained in:
David Ambler 2020-05-22 21:49:43 +01:00
parent 4308c596ea
commit a21852d233

View file

@ -184,7 +184,6 @@ function buildAudioConfiguration(_inputs, file, logger) {
var configuration = new Configurator(["-c:a copy"]); var configuration = new Configurator(["-c:a copy"]);
var hasNonAc3MultiChannelAudio = false; var hasNonAc3MultiChannelAudio = false;
var hasMultiChannelAudio = false; var hasMultiChannelAudio = false;
loopOverStreamsOfType(file, "audio", function (stream, id) { loopOverStreamsOfType(file, "audio", function (stream, id) {
hasMultiChannelAudio = stream.channels >= 6; hasMultiChannelAudio = stream.channels >= 6;
if (stream.codec_name !== "ac3" && stream.channels >= 6) { if (stream.codec_name !== "ac3" && stream.channels >= 6) {
@ -192,7 +191,7 @@ function buildAudioConfiguration(_inputs, file, logger) {
hasNonAc3MultiChannelAudio = true; hasNonAc3MultiChannelAudio = true;
} }
if ("title" in stream.tags) { if ("tags" in stream && "title" in stream.tags) {
if ( if (
stream.tags.title.toLowerCase().includes("commentary") || stream.tags.title.toLowerCase().includes("commentary") ||
stream.tags.title.toLowerCase().includes("description") || stream.tags.title.toLowerCase().includes("description") ||
@ -241,27 +240,29 @@ function buildSubtitleConfiguration(inputs, file, logger) {
return; return;
} }
// Remove unwated languages if ("tags" in stream) {
if ("language" in stream.tags) { // Remove unwated languages
if (languages.indexOf(stream.tags.language.toLowerCase()) === -1) { if ("language" in stream.tags) {
configuration.AddOutputSetting(`-map -0:s:${id}`); if (languages.indexOf(stream.tags.language.toLowerCase()) === -1) {
logger.AddError( configuration.AddOutputSetting(`-map -0:s:${id}`);
`Removing subtitle in language ${stream.tags.language}` logger.AddError(
); `Removing subtitle in language ${stream.tags.language}`
);
}
} }
}
// Remove commentary subtitles // Remove commentary subtitles
if ("title" in stream.tags) { if ("title" in stream.tags) {
if ( if (
stream.tags.title.toLowerCase().includes("commentary") || stream.tags.title.toLowerCase().includes("commentary") ||
stream.tags.title.toLowerCase().includes("description") || stream.tags.title.toLowerCase().includes("description") ||
stream.tags.title.toLowerCase().includes("sdh") stream.tags.title.toLowerCase().includes("sdh")
) { ) {
configuration.AddOutputSetting(`-map -0:s:${id}`); configuration.AddOutputSetting(`-map -0:s:${id}`);
logger.AddError( logger.AddError(
`Removing Commentary or Description subtitle: ${stream.tags.title}` `Removing Commentary or Description subtitle: ${stream.tags.title}`
); );
}
} }
} }
}); });
@ -286,7 +287,6 @@ function buildVideoConfiguration(inputs, file, logger) {
return; return;
} }
// If MKV file with hevc codec, don't need to do anything
if (stream.codec_name === "hevc" && file.container === "mkv") { if (stream.codec_name === "hevc" && file.container === "mkv") {
logger.AddSuccess("File is in HEVC codec and in MKV"); logger.AddSuccess("File is in HEVC codec and in MKV");
return; return;
@ -301,15 +301,14 @@ function buildVideoConfiguration(inputs, file, logger) {
// Check if should Transcode. // Check if should Transcode.
if (stream.codec_name !== "hevc") { if (stream.codec_name !== "hevc") {
var bitrate = calculateBitrate(file); var bitrate = calculateBitrate(file);
if (inputs.minimum_target_bitrate !== "") { if (
if ( inputs.minimum_target_bitrate !== "" &&
bitrate.target < inputs.minimum_target_bitrate bitrate.target < inputs.minimum_target_bitrate
) { ) {
logger.AddError( logger.AddError(
`Skipping video encoding as target bitrate (${bitrate.target}) too low` `Skipping video encoding as target bitrate (${bitrate.target}) too low`
); );
return; return;
}
} }
var bitrateSettings = `-b:v ${bitrate.target}k -minrate ${bitrate.min}k -maxrate ${bitrate.max}k -bufsize ${bitrate.original}k`; 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 * Intel Quick Sync configuration
*/ */
if (inputs.qsv === "true") { if (inputs.qsv === "true" && stream.codec_name !== "mpeg4") {
configuration.AddInputSetting( configuration.AddInputSetting(
"-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi" "-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"); 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.RemoveOutputSetting("-c:v copy");
configuration.AddOutputSetting(`-c:v libx265 ${bitrateSettings}`); configuration.AddOutputSetting(`-c:v libx265 ${bitrateSettings}`);
logger.AddError("Transcoding to HEVC"); logger.AddError("Transcoding to HEVC (software)");
} }
logger.Add( 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.preset = `${videoSettings.GetInputSettings()},${videoSettings.GetOutputSettings()} ${audioSettings.GetOutputSettings()} ${subtitleSettings.GetOutputSettings()} -max_muxing_queue_size 4096`;
response.processFile = response.processFile =
audioSettings.shouldProcess || videoSettings.shouldProcess || subtitleSettings.shouldProcess; audioSettings.shouldProcess ||
videoSettings.shouldProcess ||
subtitleSettings.shouldProcess;
if (!response.processFile) { if (!response.processFile) {
logger.AddSuccess("No need to process file"); logger.AddSuccess("No need to process file");