【发布时间】:2021-03-06 06:20:02
【问题描述】:
我有这个代码:
const ffmpegPath = require("@ffmpeg-installer/ffmpeg").path;
const ffmpeg = require("fluent-ffmpeg");
ffmpeg.setFfmpegPath(ffmpegPath);
app.put("/upload-content", async (req, res) => {
// 1. Get video and save locally to the server
const video = req.files.video;
const localTempPath = "./tmp/" + video.name;
video.mv(localTempPath, function (error) {
if (error) return res.send(error);
});
// 2. Convert video and apply settings
processVideo(localTempPath).catch((err) => {
return res.send(err);
});
return res.send("done");
});
function processVideo(localTempPath) {
return new Promise((resolve, reject) => {
ffmpeg(localTempPath)
.withVideoCodec("libx264")
.withSize("630x320")
.withOutputFormat("avi")
.on("error", (error) => reject("Failed to process video: " + error))
.on("progress", (progress) => console.log(progress))
.on("end", resolve("Successfully processed video"))
.saveToFile(localTempPath);
});
}
没有任何效果,我尝试过仅删除音频,尝试更改视频编解码器,尝试输出而不是保存,尝试在承诺之外尝试。我也尝试过不同的路径等。
发送请求时,res.send('done') 实际上会立即发送,因此清除也没有运行,没有错误,而且我知道该函数正在运行,因为我已将调试语句放入其中...仍然没有。
【问题讨论】:
-
@kg99 对不起,忘了说,我也是这样,还是没有。我只是在我的问题中加上“改变了承诺”。如果您愿意,我也可以添加该代码>
-
等待承诺。
-
类似 try { await processVideo(localTempPath);返回 res.send("完成"); } catch (err) { return res.send(err); }
-
@kg99 恐怕还是不行。
-
会发生什么?你得到输出了吗
标签: javascript node.js express ffmpeg fluent-ffmpeg