const express = require('express') const multer = require('multer') const ffmpeg = require('fluent-ffmpeg') const fs = require('fs') const path = require('path') const archiver = require('archiver') const app = express() const upload = multer({ dest: '/tmp' }) app.post('/upload', upload.single('video'), (req, res) => { const video = req.file.path const out = `/tmp/f_${Date.now()}` fs.mkdirSync(out) ffmpeg(video) .output(`${out}/frame_%d.png`) .on('end', () => { const zip = `${out}.zip` const stream = fs.createWriteStream(zip) const archive = archiver('zip') stream.on('close', () => { fs.rmSync(video) fs.rmSync(out, { recursive: true, force: true }) res.download(zip, () => fs.unlinkSync(zip)) }) archive.pipe(stream) archive.directory(out, false) archive.finalize() }) .run() }) app.listen(7860)