79 lines
1.7 KiB
JavaScript
79 lines
1.7 KiB
JavaScript
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 });
|
|
},
|
|
};
|