Created
May 30, 2024 11:32
-
-
Save gssariev/0586cfd571b494069c525a360bf110d7 to your computer and use it in GitHub Desktop.
Modified plugin to keep both original and transcoded audio tracks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* eslint-disable */ | |
const details = () => { | |
return { | |
id: "Tdarr_Plugin_a9hd_FFMPEG_Transcode_Specific_Audio_Stream_Codecs", | |
Stage: "Pre-processing", | |
Name: "Transcode Specific Audio Stream Codecs", | |
Type: "Audio", | |
Operation: "Transcode", | |
Description: `[Contains built-in filter] Transcode audio streams with specific codecs into another codec while keeping the original. \n\n`, | |
Version: "1.01", | |
Tags: "pre-processing,audio only,ffmpeg,configurable", | |
Inputs: [ | |
{ | |
name: "codecs_to_transcode", | |
type: 'string', | |
defaultValue: 'ac3', | |
inputUI: { | |
type: 'text', | |
}, | |
tooltip: `Specify the codecs which you'd like to transcode | |
\\nExample:\\n | |
ac3 | |
\\nExample:\\n | |
eac3,ac3,aac | |
`, | |
}, | |
{ | |
name: "codec", | |
type: 'string', | |
defaultValue: 'aac', | |
inputUI: { | |
type: 'text', | |
}, | |
tooltip: `Specify the codec you'd like to transcode into: | |
\\n aac | |
\\n ac3 | |
\\n eac3 | |
\\n dts | |
\\n flac | |
\\n mp2 | |
\\n mp3 | |
\\n truehd | |
\\nExample:\\n | |
eac3 | |
`, | |
}, | |
{ | |
name: "bitrate", | |
type: 'string', | |
defaultValue: '', | |
inputUI: { | |
type: 'text', | |
}, | |
tooltip: `Specify the transcoded audio bitrate (optional): | |
\\n 384k | |
\\n 640k | |
\\nExample:\\n | |
640k | |
`, | |
}, | |
], | |
}; | |
}; | |
// eslint-disable-next-line @typescript-eslint/no-unused-vars | |
const plugin = (file, librarySettings, inputs, otherArguments) => { | |
const lib = require('../methods/lib')(); | |
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign | |
inputs = lib.loadDefaultValues(inputs, details); | |
//Must return this object | |
var response = { | |
processFile: false, | |
preset: "", | |
container: ".mp4", | |
handBrakeMode: false, | |
FFmpegMode: false, | |
reQueueAfter: false, | |
infoLog: "", | |
}; | |
if (inputs.codecs_to_transcode === undefined || inputs.codec === undefined ) { | |
response.processFile = false; | |
response.infoLog += "☒ Inputs not entered! \n"; | |
return response; | |
} | |
var encoder = inputs.codec; | |
if (encoder == "mp3") { | |
encoder = `libmp3lame`; | |
} else if (encoder == "dts") { | |
encoder = `dca`; | |
} | |
var codecs_to_transcode = inputs.codecs_to_transcode.split(","); | |
var hasStreamsToTranscode = false; | |
var ffmpegCommand = `, -c copy -map 0:v `; | |
for (var i = 0; i < file.ffProbeData.streams.length; i++) { | |
if ( | |
file.ffProbeData.streams[i].codec_type.toLowerCase() == "audio" && | |
file.ffProbeData.streams[i].codec_name && | |
codecs_to_transcode.includes( | |
file.ffProbeData.streams[i].codec_name.toLowerCase() | |
) | |
) { | |
// Map the original stream | |
ffmpegCommand += ` -map 0:${i} -c:${i} copy `; | |
// Map the transcoded stream | |
ffmpegCommand += ` -map 0:${i} -c:a ${encoder} `; | |
if (inputs.bitrate !== '') { | |
ffmpegCommand += `-b:a ${inputs.bitrate} `; | |
} | |
hasStreamsToTranscode = true; | |
} else if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "audio") { | |
ffmpegCommand += ` -map 0:${i}`; | |
} | |
} | |
ffmpegCommand += ` -map 0:s? -map 0:d? -max_muxing_queue_size 9999`; | |
if (hasStreamsToTranscode == false) { | |
response.processFile = false; | |
response.infoLog += | |
"☑ File does not have any streams that need to be transcoded! \n"; | |
return response; | |
} else { | |
response.processFile = true; | |
response.preset = ffmpegCommand; | |
response.container = "." + file.container; | |
response.handBrakeMode = false; | |
response.FFmpegMode = true; | |
response.reQueueAfter = true; | |
response.infoLog += `☒ File has streams which aren't in desired codec! \n`; | |
return response; | |
} | |
}; | |
module.exports.details = details; | |
module.exports.plugin = plugin; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment