FFMPEG多个屏幕截图命令

问题描述

试图尝试使用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_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"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...