1
This commit is contained in:
78
api/controller_front/video_effects.js
Normal file
78
api/controller_front/video_effects.js
Normal file
@@ -0,0 +1,78 @@
|
||||
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 });
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user