const { plu_upgrade, op } = require("../../middleware/baseModel"); const { encoder } = require("../service/ffmpeg/encoder"); const fs = require('fs'); const stream = require("stream"); const path = require("path"); const getStreamContentTobase64Stream = async (file) => { let p = new Promise((resolve, reject) => { const readStream = fs.createReadStream(file.path) const readStream2 = new stream.Readable(); let str = '' readStream.on('data', data => { str += data.toString() }) readStream.on('end', () => { let base64Array = str.split('data:image/png;base64,') console.log('count', base64Array.length) for (let i = 0; i < base64Array.length; i++) { let base64 = base64Array[i].replace(/^data:\w+\/\w+;base64,/, '') const buffer = Buffer.from(base64, "base64"); readStream2.push(buffer); } readStream2.push(null) resolve(readStream2) }) readStream.on('error', err => { reject(err) console.log(err) }) }) return p } module.exports = { "POST /video_effects/build": async (ctx, next) => { const files = ctx.request.files; // 获取上传文件 let file = files.file let frameStream = await getStreamContentTobase64Stream(file) const output = await encoder({ silent: false, frameStream: frameStream, backgroundVideo: { videoPath: path.join(__dirname, "../../config/media/demo_out.mp4"), inSeconds: 1, outSeconds: 30, }, output: "output/test.mp4", fps: { input: 30, output: 30, }, }); console.log("process done,", output.path); return ctx.success({ path: output.path }); }, };