UNPKG

framo

Version:

Glorious media processing right in your browser with Typescript support

57 lines 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FilmstripService = void 0; const tslib_1 = require("tslib"); const utility_1 = require("../utility/utility"); const ffmpeg_service_1 = require("./ffmpeg.service"); class FilmstripService { constructor() { this.ffmpegService = ffmpeg_service_1.FfmpegService.getInstance(); this.makeFilmstrip = (config) => tslib_1.__awaiter(this, void 0, void 0, function* () { try { const fileBlob = yield this.ffmpegService.fetchFile(config.filename, config.file); const mediainfo = yield this.ffmpegService.getMediaInfo(fileBlob); const { parameters, outputFilename } = this.getParameters(config, mediainfo); 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, mediainfo) => { const auxillaryParameters = ["-y"]; const parametersResponse = this.getTimeIntervalBasedParameters(config, mediainfo); const response = { parameters: [...parametersResponse.parameters, ...auxillaryParameters], outputFilename: parametersResponse.outputFilename, }; return response; }; this.getTimeIntervalBasedParameters = (config, mediainfo) => { const outputFilename = utility_1.Utility.getOutputFilename(1, config.outputExtension); const duration = utility_1.Utility.getVideoDuration(mediainfo); const totalFramesInFilmstrip = Math.floor(duration / config.timeInterval); const selectTime = `select=not(mod(n\\,${config.timeInterval})),`; const scale = config.resolution ? `${utility_1.Utility.getScale(config.resolution)},` : ''; const tiles = utility_1.Utility.getFilmstripTileString(totalFramesInFilmstrip, config); const vfString = `${selectTime}${scale}${tiles}`; const inParameters = ['-i', config.filename, '-frames', '1', '-vf', vfString]; const outParameters = [outputFilename]; const response = { parameters: [...inParameters, ...outParameters], outputFilename, }; return response; }; } static getInstance() { if (!FilmstripService.instance) { FilmstripService.instance = new FilmstripService(); } return FilmstripService.instance; } } exports.FilmstripService = FilmstripService; //# sourceMappingURL=filmstrip.service.js.map