UNPKG

@calipsa/video-utils

Version:
44 lines 1.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const getFrameAt_1 = __importDefault(require("../getFrameAt")); exports.default = async ({ path, numFrames, videoMetadata, ffmpegCommandOptions, configureFfmpeg, }) => { const videoStreamMetaData = videoMetadata.streams.find(item => item.codec_type === 'video'); if (!videoStreamMetaData) { throw new Error('No video streams found'); } const { nb_frames: numInputFramesStr, start_time: startTime = 0, duration: durationStr, } = videoStreamMetaData; const duration = durationStr === undefined ? undefined : +durationStr; if (!duration || !Number.isFinite(duration)) { throw new TypeError(`ffprobe returned invalid duration: ${durationStr}`); } if (numFrames === 1) { const frame = await (0, getFrameAt_1.default)({ path, time: startTime + duration / 2, ffmpegCommandOptions, configureFfmpeg, }); return [frame]; } const numInputFrames = numInputFramesStr === undefined ? undefined : +numInputFramesStr; const interval = numInputFrames ? duration / (numFrames - 1) * (1 - 1 / numInputFrames) : duration / numFrames; const promises = (0, lodash_1.range)(numFrames).map(async (i) => { const time = startTime + i * interval; const buffer = await (0, getFrameAt_1.default)({ path, time, ffmpegCommandOptions, configureFfmpeg, }); return buffer?.length > 0 && buffer; }); const arr = await Promise.all(promises); return (0, lodash_1.compact)(arr); }; //# sourceMappingURL=index.js.map