问题描述
使用 React,我正在使用 Fluent FFMPEG 上传视频文件以在 Node 服务器中进行转换。文件已正确上传并且正在转换,但我试图在期间和之后运行两件事。我在控制台中获得了转换进度,并希望将其发送回前端以在条形图中显示,其次,我想在文件完成后下载文件,这似乎失败了。我可以在下载功能中放置另一个文件并将其发送到浏览器控制台,但此视频文件不会在浏览器中触发下载。视频文件已成功上传、转换并创建水印。只需要一种发回进度并最终在完成后下载文件的方法。
/// 路线
router.post("/",upload.single("file"),controller.getVideo);
//// 控制器
const getVideo = async (req,res) => {
try {
if (!req.file) {
throw new Error("No file selected");
}
await transcodeAndWatermarkVideo(
req.file.path,req.file.filename,"prores","Watermark name"
).then((message) => {
console.log("MESSAGE",message); // Undefined
const file = `convertedMedia/${req.file.filename}-vsiwm.mov`;
res.download(file);
});
} catch (e) {
res.status(404).send(e);
}
};
//// 辅助函数
const transcodeAndWatermarkVideo = function (
path,originalName,codec,watermark
) {
return new Promise((resolve,reject) => {
ffmpeg()
.input(path)
.videoCodec(codec)
.size("1920x1080")
.videoFilters(
`drawtext='fontsize=100:fontcolor=white@0.4:fontfile=FreeSerif.ttf:text=${watermark}:x=if(eq(mod(t\,05)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,(h-text_h))\,y)'`
)
.format("mov")
.on("error",function (err) {
console.log("An error occurred: " + err.message);
})
.on("progress",function (progress) {
console.log("Processing: " + progress.percent + "% done");
})
.on("end",function () {
fs.unlink(path,(err) => {
if (err) {
console.error(err);
return;
}
console.log("Original video deleted");
resolve(console.log("Conversion completed"));
});
})
.save(`convertedMedia/${originalName}-vsiwm.mov`);
});
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)