This commit is contained in:
HaveAGitGat 2020-05-15 01:26:35 +01:00
parent d28272f6d4
commit 9c8ac98728
60 changed files with 5481 additions and 5980 deletions

View file

@ -1,313 +1,276 @@
module.exports = function transcodeAddAudioStream(
file,
audioEncoder,
langTag,
channelCount
) {
// response.preset = library.actions.transcodeAddAudioStream(file, 'aac', 'en', 1).preset
//Function required responses
// preset
// processFile
// note
module.exports = function transcodeAddAudioStream(file, audioEncoder, langTag, channelCount) {
try {
var audioCodec = audioEncoder;
langTag = langTag.toLowerCase();
// response.preset = library.actions.transcodeAddAudioStream(file, 'aac', 'en', 1).preset
if (audioEncoder == "dca") {
audioCodec = "dts";
}
//Function required responses
// preset
// processFile
// note
if (audioEncoder == "libmp3lame") {
audioCodec = "mp3";
}
try {
//Step 1: Check if the file already has the required stream codec/langtag/channel count
var audioCodec = audioEncoder
langTag = langTag.toLowerCase()
if (audioEncoder == 'dca') {
audioCodec = 'dts'
var hasStreamAlready = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.codec_name === audioCodec &&
stream.tags.language.toLowerCase().includes(langTag.toLowerCase()) &&
stream.channels == channelCount
) {
return true;
}
} catch (err) {}
if (audioEncoder == 'libmp3lame') {
audioCodec = 'mp3'
return false;
});
if (hasStreamAlready.length > 0) {
return {
preset: "",
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels\n`,
};
}
//Step 2: Check if file has streams with specified lang tag
var streamsWithLangTag = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.tags.language.toLowerCase().includes(langTag)
) {
return true;
}
} catch (err) {}
//Step 1: Check if the file already has the required stream codec/langtag/channel count
return false;
});
var hasStreamAlready = file.ffProbeData.streams.filter(stream => {
console.log("streamsWithLangTag:" + streamsWithLangTag);
try {
if (stream.codec_type == 'audio' && stream.codec_name === audioCodec && stream.tags.language.toLowerCase().includes(langTag.toLowerCase()) && stream.channels == channelCount) {
return true
}
if (streamsWithLangTag.length != 0) {
return attemptMakeStreamLang(langTag);
} else {
return attemptMakeStreamUnd("und");
}
} catch (err) { }
function attemptMakeStreamLang(langTag) {
var streamsWithLangTag = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.tags.language.toLowerCase().includes(langTag)
) {
return true;
}
} catch (err) {}
return false
})
return false;
});
var highestChannelCount = streamsWithLangTag.reduce(getHighest);
function getHighest(first, second) {
if (first.channels > second.channels && first) {
return first;
} else {
return second;
}
}
if (parseInt(highestChannelCount.channels) >= parseInt(channelCount)) {
var hasStreamAlready = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.codec_name === audioCodec &&
stream.tags.language
.toLowerCase()
.includes(langTag.toLowerCase()) &&
stream.channels == channelCount
) {
return true;
}
} catch (err) {}
return false;
});
if (hasStreamAlready.length > 0) {
return {
preset: '',
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels\n`
}
}
//Step 2: Check if file has streams with specified lang tag
var streamsWithLangTag = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.tags.language.toLowerCase().includes(langTag)) {
return true
}
} catch (err) { }
return false
})
console.log("streamsWithLangTag:" + streamsWithLangTag)
if (streamsWithLangTag.length != 0) {
return attemptMakeStreamLang(langTag)
} else {
return attemptMakeStreamUnd('und')
}
function attemptMakeStreamLang(langTag) {
var streamsWithLangTag = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.tags.language.toLowerCase().includes(langTag)) {
return true
}
} catch (err) { }
return false
})
var highestChannelCount = streamsWithLangTag.reduce(getHighest)
function getHighest(first, second) {
if (first.channels > second.channels && first) {
return first
} else {
return second
}
}
if (parseInt(highestChannelCount.channels) >= parseInt(channelCount)) {
var hasStreamAlready = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.codec_name === audioCodec && stream.tags.language.toLowerCase().includes(langTag.toLowerCase()) && stream.channels == channelCount) {
return true
}
} catch (err) { }
return false
})
if (hasStreamAlready.length > 0) {
return {
preset: '',
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels \n`
}
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${channelCount}`,
processFile: true,
note: `The required channel count ${channelCount} is lower than the highest available channel count (${highestChannelCount.channels}). Adding! \n`
}
}
} else {
console.log('here3')
var hasStreamAlready = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.codec_name === audioCodec && stream.tags.language.toLowerCase().includes(langTag.toLowerCase()) && stream.channels == highestChannelCount.channels) {
return true
}
} catch (err) { }
return false
})
if (hasStreamAlready.length > 0) {
return {
preset: '',
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${highestChannelCount.channels} channels (Highest available) \n`
}
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${highestChannelCount.channels}`,
processFile: true,
note: `The required channel count (${channelCount}) is higher than the highest channel available in specified lang tag (${highestChannelCount.channels}). Adding lower channel track. \n`
}
}
}
}
function attemptMakeStreamUnd(langTag) {
console.log('No tracks with specified lang tag exist. Checking undefined tracks.')
console.log(langTag)
var streamsWithLangTag = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && (stream.tags == undefined || stream.tags.language == undefined || stream.tags.language.toLowerCase().includes(langTag))) {
return true
}
} catch (err) { }
return false
})
if (streamsWithLangTag.length == 0) {
return {
preset: ``,
processFile: false,
note: `Unable to add audio stream in ${langTag}/und with ${channelCount} channels \n`
}
}
var highestChannelCount = streamsWithLangTag.reduce(getHighest)
function getHighest(first, second) {
if (first.channels > second.channels && first) {
return first
} else {
return second
}
}
if (parseInt(highestChannelCount.channels) >= parseInt(channelCount)) {
var hasStreamAlready = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.codec_name === audioCodec && (stream.tags == undefined || stream.tags.language == undefined || stream.tags.language.toLowerCase().includes(langTag)) && stream.channels == channelCount) {
return true
}
} catch (err) { }
return false
})
if (hasStreamAlready.length > 0) {
return {
preset: '',
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels \n`
}
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${channelCount}`,
processFile: true,
note: `The required channel count ${channelCount} is lower than the highest available channel count (${highestChannelCount.channels}). Adding! \n`
}
}
} else {
var hasStreamAlready = file.ffProbeData.streams.filter(stream => {
try {
if (stream.codec_type == 'audio' && stream.codec_name === audioCodec && (stream.tags == undefined || stream.tags.language == undefined || stream.tags.language.toLowerCase().includes(langTag)) && stream.channels == highestChannelCount.channels) {
return true
}
} catch (err) { }
return false
})
if (hasStreamAlready.length > 0) {
return {
preset: '',
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${highestChannelCount.channels} channels (Highest available) \n`
}
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${highestChannelCount.channels}`,
processFile: true,
note: `The required channel count (${channelCount}) is higher than the highest channel available in specified lang tag (${highestChannelCount.channels}). Adding lower channel track. \n`
}
}
}
}
} catch (err) {
return {
preset: '',
return {
preset: "",
processFile: false,
note: `library.actions.transcodeAddAudioStream error: ${err} \n`
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels \n`,
};
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${channelCount}`,
processFile: true,
note: `The required channel count ${channelCount} is lower than the highest available channel count (${highestChannelCount.channels}). Adding! \n`,
};
}
} else {
console.log("here3");
var hasStreamAlready = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.codec_name === audioCodec &&
stream.tags.language
.toLowerCase()
.includes(langTag.toLowerCase()) &&
stream.channels == highestChannelCount.channels
) {
return true;
}
} catch (err) {}
return false;
});
if (hasStreamAlready.length > 0) {
return {
preset: "",
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${highestChannelCount.channels} channels (Highest available) \n`,
};
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${highestChannelCount.channels}`,
processFile: true,
note: `The required channel count (${channelCount}) is higher than the highest channel available in specified lang tag (${highestChannelCount.channels}). Adding lower channel track. \n`,
};
}
}
}
}
function attemptMakeStreamUnd(langTag) {
console.log(
"No tracks with specified lang tag exist. Checking undefined tracks."
);
console.log(langTag);
var streamsWithLangTag = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
(stream.tags == undefined ||
stream.tags.language == undefined ||
stream.tags.language.toLowerCase().includes(langTag))
) {
return true;
}
} catch (err) {}
return false;
});
if (streamsWithLangTag.length == 0) {
return {
preset: ``,
processFile: false,
note: `Unable to add audio stream in ${langTag}/und with ${channelCount} channels \n`,
};
}
var highestChannelCount = streamsWithLangTag.reduce(getHighest);
function getHighest(first, second) {
if (first.channels > second.channels && first) {
return first;
} else {
return second;
}
}
if (parseInt(highestChannelCount.channels) >= parseInt(channelCount)) {
var hasStreamAlready = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.codec_name === audioCodec &&
(stream.tags == undefined ||
stream.tags.language == undefined ||
stream.tags.language.toLowerCase().includes(langTag)) &&
stream.channels == channelCount
) {
return true;
}
} catch (err) {}
return false;
});
if (hasStreamAlready.length > 0) {
return {
preset: "",
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${channelCount} channels \n`,
};
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${channelCount}`,
processFile: true,
note: `The required channel count ${channelCount} is lower than the highest available channel count (${highestChannelCount.channels}). Adding! \n`,
};
}
} else {
var hasStreamAlready = file.ffProbeData.streams.filter((stream) => {
try {
if (
stream.codec_type == "audio" &&
stream.codec_name === audioCodec &&
(stream.tags == undefined ||
stream.tags.language == undefined ||
stream.tags.language.toLowerCase().includes(langTag)) &&
stream.channels == highestChannelCount.channels
) {
return true;
}
} catch (err) {}
return false;
});
if (hasStreamAlready.length > 0) {
return {
preset: "",
processFile: false,
note: `File already has ${langTag} stream in ${audioEncoder}, ${highestChannelCount.channels} channels (Highest available) \n`,
};
} else {
return {
preset: `,-map 0:v -map 0:${highestChannelCount.index} -map 0:a -map 0:s? -map 0:d? -c copy -c:a:0 ${audioEncoder} -ac ${highestChannelCount.channels}`,
processFile: true,
note: `The required channel count (${channelCount}) is higher than the highest channel available in specified lang tag (${highestChannelCount.channels}). Adding lower channel track. \n`,
};
}
}
}
} catch (err) {
return {
preset: "",
processFile: false,
note: `library.actions.transcodeAddAudioStream error: ${err} \n`,
};
}
};