framo
Version:
Glorious media processing right in your browser with Typescript support
49 lines • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FrameStitcherService = void 0;
const tslib_1 = require("tslib");
const generic_model_1 = require("../models/generic.model");
const utility_1 = require("../utility/utility");
const ffmpeg_service_1 = require("./ffmpeg.service");
const totalDigitsInFilename = 6;
const outputFPS = 30;
class FrameStitcherService {
constructor() {
this.ffmpegService = ffmpeg_service_1.FfmpegService.getInstance();
this.stitchFrames = (config) => tslib_1.__awaiter(this, void 0, void 0, function* () {
try {
const inputFilenames = config.files.map((_, index) => utility_1.Utility.getFilenameWithPadding(index, 'in', totalDigitsInFilename, config.inputExtension));
const inputFilenameTemplate = `in_%0${totalDigitsInFilename}d.${config.inputExtension}`;
yield Promise.all(this.ffmpegService.fetchFiles(config.files, inputFilenames));
const { parameters, outputFilename } = this.getParameters(config, inputFilenameTemplate);
yield this.ffmpegService.ffmpeg.run(...parameters);
const data = this.ffmpegService.ffmpeg.FS("readFile", outputFilename);
return new Blob([data.buffer]);
}
catch (error) {
throw new Error(error);
}
});
this.getParameters = (config, inputFilenameTemplate) => {
var _a, _b;
const outputFilename = `out.${config.videoExtension}`;
const framerate = config.frameDuration ? (1 / config.frameDuration).toFixed(2) : outputFPS;
const inParameters = ['-framerate', `${framerate}`, '-i', inputFilenameTemplate, '-r', `${outputFPS}`, '-pix_fmt', 'yuv420p', '-preset', (_b = (_a = config.extras) === null || _a === void 0 ? void 0 : _a.preset) !== null && _b !== void 0 ? _b : generic_model_1.Presets.SUPERFAST];
const outParameters = [outputFilename];
const auxillaryParameters = ["-y"];
const response = {
parameters: [...inParameters, ...outParameters, ...auxillaryParameters],
outputFilename,
};
return response;
};
}
static getInstance() {
if (!FrameStitcherService.instance) {
FrameStitcherService.instance = new FrameStitcherService();
}
return FrameStitcherService.instance;
}
}
exports.FrameStitcherService = FrameStitcherService;
//# sourceMappingURL=frame-stitcher.service.js.map