gpt4 book ai didi

javascript - FFMPEG 多截图命令

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

我正在尝试编写一个使用 ffmpeg 从视频文件创建图像的函数。
但现在我想知道如何使用 ffmpeg 制作它命令 确切地说,因为我使用包装器,现在我有一些限制,所以我必须以原生方式。
所以,首先我决定使用一个叫做 node-fluent-ffmpeg 的 Wrapper。
这是我使用 Wrapper 的解决方法:

ffmpeg({
source: `The video file...`,
})
.on("filenames", async (filenames) => {
})
.on("error", function (err) {
console.log("Error in filenames section: " + JSON.stringify(err));
})
.on("end", function () {
console.log("Screenshots taken");
})
.screenshots({
count: 60,
folder: "tmp/",
filename: "thumbnail-at-%i.png",
size: "1600x900",
})
.on("end", function (stdout, stderr) {
let newImg = await fs.createReadStream(`/tmp/${img}`);
destparams = await {
Bucket: dstBucket,
Key: "uploaded-" + img,
Body: newImg,
ContentType: "image",
};
await s3.putObject(destparams).promise();
});
更好理解我的注释:
  • 我仍然想在 node.js 中制作它
  • 假设文件是​​:“视频文件...”
  • 我正在以随机的方式从视频中截取60张截图,喜欢它
    不管视频的长度如何,从开始到结束只需要 60 张截图。
  • 每一个截图都会有一个前缀和有序的数字和名称。
    例如: thumbnail-at-1.png、thumbnail-at-2.png、thumbnail-at-3.png 并继续直到达到 60 个屏幕截图限制。
  • 每个屏幕截图都将以 1600x900 分辨率保存。
  • 每个屏幕截图都将保存在 TMP 文件夹中。
  • 不要介意阅读此内容:毕竟我会将每个屏幕截图上传到 s3 存储桶。
  • 我搜索了很多旧论坛,但似乎 ffmpeg 有
    一个糟糕的文档(我被卡住了,很难理解)。

  • 所以我的主要目标是:
    我如何使用 FFMPEG 命令准确地实现我在代码示例和快速注释中显示的功能? (不使用包装)
    (对不起,我试图让它更简单)
    我的意思是, 我必须使用哪些命令,以及以下代码示例中的 FFMPEG 命令?
    顺便说一句:它是node.js,
    真的不知道该怎么办,抱歉
    spawnSync(
    "/opt/ffmpeg/ffmpeg",
    [
    "-i",
    ``,
    "-f",
    "",
    ``
    ],
    { stdio: "inherit" }
    );
    谢谢你的耐心!
    环境:
  • Node.js 12.x
  • FFMPEG (4.3.1)
  • 最佳答案

    主要问题是获取视频的持续时间,所以只要你有 ffprobe 你应该能够做到这一点:
    获取持续时间然后除以 60,将数字转换为时间戳 .ffprobe -v quiet -print_format json -show_format -show_streams "<FILENAME>"然后解析 format.duration 的 JSON ,然后将其除以您想要的屏幕数。
    然后通过执行 dateformat('H:i:s', i * (format.duration / 60)) 循环超过 60 次以获得特定时间戳的单个帧(伪):

    ffmpeg -ss 00:00:00 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-0.png"
    ffmpeg -ss 00:00:10 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-1.png"
    ffmpeg -ss 00:00:20 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-2.png"
    ...
    ffmpeg -ss 00:09:30 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-57.png"
    ffmpeg -ss 00:09:40 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-58.png"
    ffmpeg -ss 00:09:50 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-59.png"

    关于javascript - FFMPEG 多截图命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64254067/

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