gpt4 book ai didi

node.js - 如何使用 ffmpeg、fluent-ffmpeg 和 express js 从视频中获取缩略图并将其作为响应发送

转载 作者:行者123 更新时间:2023-12-04 23:18:31 31 4
gpt4 key购买 nike

我正在使用 ffmpeg 和 fluent-ffmpeg 从这样的视频中获取缩略图

ffmpeg({
source: `../../uploadedVideo/${filepath}`,
}).takeScreenshots({
filename: "example.jpg",
timemarks: [2, 4, 6, 8],
folder: "../../thumbnail/",
});
但我想做的不是将缩略图保存到我想将它作为一个文件夹发送
api 响应,这是整个代码。
const ffmpegPath = require("@ffmpeg-installer/ffmpeg").path;
const ffmpeg = require("fluent-ffmpeg");
ffmpeg.setFfmpegPath(ffmpegPath);

router.post("/upload", (req, res) => {

const file = req.files.video;
const filepath = `${uuid()}${path.extname(file.name)}`;

// imagine the file is saved to the server at this point

ffmpeg({
source: `../../uploadedVideo/${filepath}`,
}).takeScreenshots({
filename: "example.jpg",
timemarks: [2, 4, 6, 8],
folder: "../../thumbnail/",
});

res.send({ msg: "success", thumbnail });

});
任何帮助或建议将不胜感激。

最佳答案

在 FFmpeg 中,您需要为每个屏幕截图时间运行以下内容 t :

ffmpeg -ss t -i source.mp4 -f mjpeg -vframe 1 -s wxh -
和子进程的标准输出吐出帧大小宽度为 w的jpeg数据按高度 h .因此,您需要在 t = 2, 4, 6, & 8 调用此行 4 次。 (这实际上是 fluent-ffmpeg 所做的。
现在,我不确定这一切如何转化为 fluent-ffmpeg .你是对的,你需要使用 pipe() .这是我的粗略看法(我已经多年没有使用 JavaScript,如果我搞砸了,请原谅我)

var outStream = fs.createWriteStream('/path/to/output.mp4');

ffmpeg(`../../uploadedVideo/${filepath}`)
.format('mjpeg') // -f mjpeg
.frames(1) // -vframes 1
.size('320x240') // -s 320x240 : w = 320, h = 240
.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('end', function() {
console.log('Processing finished !');
})
.pipe(outStream, { end: true });
我在 fluent-ffmpeg 上修改了一个示例文档。

关于node.js - 如何使用 ffmpeg、fluent-ffmpeg 和 express js 从视频中获取缩略图并将其作为响应发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71566632/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com