gpt4 book ai didi

node.js - Node : generating thumbnail image from video buffer (not file path)

转载 作者:行者123 更新时间:2023-12-04 22:54:19 25 4
gpt4 key购买 nike

我有一个 Node API,它接受通过客户端 FormData 上传的视频文件。结果是 req.file目的:

{
fieldname: 'media',
originalname: 'IMG_6288.MOV',
encoding: '7bit',
mimetype: 'video/quicktime',
buffer: <Buffer 00 00 00 14 66 74 79 70 71 74 20 20 00 00 00 00 71 74 20 20 00 00 00 08 77 69 64 65 01 ed db 13 6d 64 61 74 21 20 03 40 68 1c 21 4e e6 ff f9 80 e7 ff ... 32390609 more bytes>,
size: 32390659
}
我正在尝试从视频文件中的给定帧创建缩略图。
但是,我在缩略图生成(即 ffmpeg)中发现的几乎所有内容都需要一个路径来处理视频,但未提供该路径。
有没有办法在没有文件路径的情况下创建缩略图?也许来自提供的缓冲区,直接或先将其转换为流?
TIA 为您提供帮助

最佳答案

我用下面的代码让它工作。
这并不完美,有时会抛出 EPIPE错误,因为 ffmpeg 将标准输入关闭到快速,但它的工作和您的用例的坚实基础:

const { exec } = require("child_process");
const fs = require("fs");

// this (data) is your input file, that you pipe into ffmepg
const data = fs.readFileSync("./input.avi");
console.log("input data read, size:", data.length);



const ffmpeg = exec(`ffmpeg -ss 00:10:00 -y -f avi -i pipe: -vframes 1 output.jpg`);

ffmpeg.on("error", (err) => {
console.log("FFMEPG-ERROR", err)
});

ffmpeg.on("close", (code) => {
console.log("ffmepg exited", code);
});

ffmpeg.stdin.on("error", (err) => {
if (err.code === "EPIPE") {

// ignore EPIPE error
// throws sometimes a EPIPE error, ignore as long ffmpeg exit with code 0

} else {
console.log("ffmepg stdin error", err);
}
});

ffmpeg.stdin.write(data);

基本上产生 ffmepg,从标准输入读取, -i pipe:-i - ,并开始将数据泵入标准输入。
要测试 ffmpeg 命令,您可以运行以下命令。
这会在输入数据的 10 秒处创建一个缩略图。
请记住调整文件类型( -f 选项)以匹配您的输入数据,因为 ffmepg 在从标准输入读取时无法自动检测它。 -y标志是覆盖一个已经存在的输出文件。
cat input.avi | ffmpeg -ss 00:10:00 -y -f avi -i pipe: -vframes 1 output.jpg
有人提到使用 -ss作为寻求更快的第一选择,但它对我的测试没有影响。你可以在这里阅读更多: https://stackoverflow.com/a/27573049/5781499
如果您需要任何进一步的帮助,请告诉我。

关于node.js - Node : generating thumbnail image from video buffer (not file path),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69826300/

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