UNPKG

synopsis-video

Version:

Create Video Synopsis from provided videos. Frames are extracted from each video provided and backgrounds are subtracted around moving elements and merged into a single video for quick review.

54 lines (52 loc) 2.09 kB
const { rawDirectory, mergedFramesDirectory, firstFrameDirectory, createBaseFolder, } = require('./utils.js'); const fs = require('fs'); const { extractFramesFromVideo } = require('./extractFramesFromVideosAndRemoveBackgrounds.js'); const { mergeFramePairs } = require('./mergeFramePairs.js'); const { createVideoFromJpegImages } = require('./createVideoFromMergedFrames.js'); exports.extractFramesFromVideo = extractFramesFromVideo exports.mergeFramePairs = mergeFramePairs exports.createVideoFromJpegImages = createVideoFromJpegImages exports.run = async (options) => { if(!options.videos)return console.log('No Videos Provided') const videos = options.videos // create folders createBaseFolder(rawDirectory) createBaseFolder(firstFrameDirectory) createBaseFolder(mergedFramesDirectory) // extract frames and remove backgrounds, BackgroundSubtractorMOG2 for (let i = 0; i < videos.length; i++) { const videoName = videos[i]; console.log(`Extracting frames from video named "${videoName}.mp4"...`) await extractFramesFromVideo(videoName); console.log(`Done extracting frames from "${videoName}.mp4"!`) } // create listing of which frames to overlap then merge them and write into ${rawDirectory} console.log("Merging Frames Extracted...") const mergeFramePairsResponse = await mergeFramePairs( //folder where files are rawDirectory, //file list (videoNames only, not full path) fs.readdirSync(rawDirectory) ) // create a video from merged frames console.log("Create Video From Merged Frames...") const buildResponse = await createVideoFromJpegImages( //folder where files are mergedFramesDirectory, //file list (filenames only, not full path) fs.readdirSync(mergedFramesDirectory), //fps options.fps || 25 ) console.log("Completed Building!") console.log(buildResponse) return { mergeFramePairs: mergeFramePairsResponse, videoBuild: buildResponse, } }