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.

57 lines (55 loc) 2.03 kB
const { rawDirectory, mergedFramesDirectory, firstFrameDirectory, stripNamePng, createBaseFolder, } = require('./utils.js'); const fs = require('fs'); const gm = require('gm').subClass({imageMagick: true}) exports.mergeFramePairs = (rawDirectory,videoNames) => { const response = { startedAt: new Date(), videoNames: videoNames, numberOfVideos: videoNames.length, numberOfFrames: 0, } return new Promise((resolve,reject) => { var backgroundPath = firstFrameDirectory + fs.readdirSync(firstFrameDirectory)[0] var videoImages = {} var videoImagePairs = [] videoNames.forEach((videoName) => { const videoFolder = rawDirectory + videoName + '/' videoImages[videoName] = fs.readdirSync(videoFolder) videoImages[videoName].forEach((filename) => { const n = stripNamePng(filename) if(!videoImagePairs[n])videoImagePairs[n] = [] videoImagePairs[n].push(videoFolder + filename) }) }) if(videoImagePairs.length > 0){ videoImagePairs.forEach(async (pair,n) => { var newImage = gm() .in('-geometry', '+0+0') .in(backgroundPath) pair.forEach((imagePath) => { newImage .in('-geometry', '+0+0') .in(imagePath) }) await newImage.flatten() .write(`${mergedFramesDirectory}${n}.jpg`, function (err) { ++response.numberOfFrames if (err){console.log(err)}; if(n === videoImagePairs.length - 1){ response.endedAt = new Date() response.timeSpent = response.endedAt - response.startedAt resolve(response) } }); }) }else{ resolve(response) } }) }