128 lines
4.9 KiB
JavaScript
128 lines
4.9 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createAudio = void 0;
|
|
const path_1 = __importDefault(require("path"));
|
|
const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
|
|
const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
|
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
const compress_audio_1 = require("./compress-audio");
|
|
const delete_directory_1 = require("./delete-directory");
|
|
const logger_1 = require("./logger");
|
|
const merge_audio_track_1 = require("./merge-audio-track");
|
|
const audio_codec_1 = require("./options/audio-codec");
|
|
const preprocess_audio_track_1 = require("./preprocess-audio-track");
|
|
const truthy_1 = require("./truthy");
|
|
const createAudio = async ({ assets, onDownload, fps, logLevel, onProgress, downloadMap, remotionRoot, indent, binariesDirectory, audioBitrate, audioCodec, cancelSignal, chunkLengthInSeconds, trimLeftOffset, trimRightOffset, forSeamlessAacConcatenation, }) => {
|
|
const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
|
|
assets,
|
|
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
|
|
downloadMap,
|
|
indent,
|
|
logLevel,
|
|
binariesDirectory,
|
|
});
|
|
(0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
|
|
const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
|
|
logger_1.Log.verbose({ indent, logLevel, tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
|
|
const preprocessProgress = new Array(assetPositions.length).fill(0);
|
|
let mergeProgress = 0;
|
|
let compressProgress = 0;
|
|
const updateProgress = () => {
|
|
const preprocessProgressSum = preprocessProgress.length === 0
|
|
? 1
|
|
: preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length;
|
|
const totalProgress = preprocessProgressSum * 0.7 +
|
|
mergeProgress * 0.1 +
|
|
compressProgress * 0.2;
|
|
onProgress(totalProgress);
|
|
};
|
|
const audioTracks = await Promise.all(assetPositions.map(async (asset, index) => {
|
|
const filterFile = path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
|
|
const result = await (0, preprocess_audio_track_1.preprocessAudioTrack)({
|
|
outName: filterFile,
|
|
asset,
|
|
fps,
|
|
downloadMap,
|
|
indent,
|
|
logLevel,
|
|
binariesDirectory,
|
|
cancelSignal,
|
|
onProgress: (progress) => {
|
|
preprocessProgress[index] = progress;
|
|
updateProgress();
|
|
},
|
|
chunkLengthInSeconds,
|
|
trimLeftOffset,
|
|
trimRightOffset,
|
|
forSeamlessAacConcatenation,
|
|
audioStreamIndex: asset.audioStreamIndex,
|
|
});
|
|
preprocessProgress[index] = 1;
|
|
updateProgress();
|
|
return result;
|
|
}));
|
|
await downloadMap.inlineAudioMixing.finish({
|
|
indent,
|
|
logLevel,
|
|
binariesDirectory,
|
|
cancelSignal,
|
|
});
|
|
const inlinedAudio = downloadMap.inlineAudioMixing.getListOfAssets();
|
|
const preprocessed = [
|
|
...audioTracks.filter(truthy_1.truthy),
|
|
...inlinedAudio.map((asset) => ({
|
|
outName: asset,
|
|
filter: {
|
|
filter: null,
|
|
pad_start: null,
|
|
pad_end: null,
|
|
},
|
|
})),
|
|
];
|
|
const merged = path_1.default.join(downloadMap.audioPreprocessing, 'merged.wav');
|
|
const extension = (0, audio_codec_1.getExtensionFromAudioCodec)(audioCodec);
|
|
const outName = path_1.default.join(downloadMap.audioPreprocessing, `audio.${extension}`);
|
|
await (0, merge_audio_track_1.mergeAudioTrack)({
|
|
files: preprocessed,
|
|
outName: merged,
|
|
downloadMap,
|
|
remotionRoot,
|
|
indent,
|
|
logLevel,
|
|
binariesDirectory,
|
|
cancelSignal,
|
|
fps,
|
|
onProgress: (progress) => {
|
|
mergeProgress = progress;
|
|
updateProgress();
|
|
},
|
|
chunkLengthInSeconds,
|
|
});
|
|
await (0, compress_audio_1.compressAudio)({
|
|
audioBitrate,
|
|
audioCodec,
|
|
binariesDirectory,
|
|
indent,
|
|
logLevel,
|
|
inName: merged,
|
|
outName,
|
|
cancelSignal,
|
|
chunkLengthInSeconds,
|
|
fps,
|
|
onProgress: (progress) => {
|
|
compressProgress = progress;
|
|
updateProgress();
|
|
},
|
|
});
|
|
(0, delete_directory_1.deleteDirectory)(merged);
|
|
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
preprocessed.forEach((p) => {
|
|
(0, delete_directory_1.deleteDirectory)(p.outName);
|
|
});
|
|
return outName;
|
|
};
|
|
exports.createAudio = createAudio;
|