Javascript FFMPEG多屏幕截图命令

Javascript FFMPEG多屏幕截图命令,javascript,node.js,amazon-web-services,ffmpeg,fluent-ffmpeg,Javascript,Node.js,Amazon Web Services,Ffmpeg,Fluent Ffmpeg,我正在尝试编写一个函数,该函数使用ffmpeg从视频文件创建图像 但现在我想知道如何使用ffmpeg命令准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须采用本机方式 所以,首先,我决定使用一个名为node fluent ffmpeg的包装器 这是我在包装方面的工作: ffmpeg({ source: `The video file...`, }) .on("filenames", async (filenames)

我正在尝试编写一个函数,该函数使用ffmpeg从视频文件创建图像

但现在我想知道如何使用ffmpeg命令准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须采用本机方式

所以,首先,我决定使用一个名为node fluent ffmpeg的包装器

这是我在包装方面的工作:

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\u format json-show\u format-show\u streams”“

然后将JSON解析为
格式.duration
,然后将其除以所需的屏幕数

然后通过执行
dateformat('H:i:s',i*(format.duration/60))
(pseudo),循环60次,以获得特定时间戳的单个帧:


哇,巴迪谢谢你,但我有两个问题:1-有了这个命令,我怎么能以特定的分辨率拍摄这些截图?2-r和-f是什么意思?(对不起,我是本地ffmpeg的新手)
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"