@calipsa/video-utils
Version:
Video utilities
44 lines • 1.87 kB
JavaScript
;
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