FFMPEG多个屏幕截图命令

如何解决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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?