UNPKG

framo

Version:

Glorious media processing right in your browser with Typescript support

49 lines 2.62 kB
"use strict"; 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