node.js - 在 ffmpeg 中生成屏幕截图花费太长时间

标签 node.js ffmpeg

我正在使用 ffmpeg 生成屏幕截图。它生成了缩略图,但花费的时间太长(超过 2 分钟)。

我已引用此链接

create thumbnails from big movies with FFmpeg takes too long

但是我必须在我的nodejs代码中设置

ffmpeg(main_folder_path)
  .on('filenames', function(filenames) {
    console.log('Will generate ' + filenames.join(', '))
  })
  .on('end', function() {
    console.log('Screenshots taken');
  })
  .screenshots({
pro_root_path+'public/uploads/inspection/'+req.body.clientID+'/images/'
timestamps: [30.5, '20%', '01:10.123'],
filename: 'thumbnail-at-%s-seconds.png',
folder: pro_root_path+'public/uploads/inspection/'+req.body.clientID+'/images/',
size: '320x240'
  });

我使用了时间戳,但即使它花费了超过 2 分钟。我该如何解决这个问题。

最佳答案

我不喜欢 fluence-ffmpeg“屏幕截图”命令。 ffmpeg 具有内置的屏幕截图功能,而且更加灵活。最值得注意的是,它允许您利用 ffmpeg 快速查找“输入”而不是“输出”的能力。 (“寻找输出”基本上意味着它将处理视频开始和您想要屏幕截图之间的每一帧。)

幸运的是,Fluent-ffmpeg 允许您通过 outputOptions 的方式使用任何命令行参数。以下命令将在 15 分钟标记处截取屏幕截图。在我的机器上大约需要 1 秒。

ffmpeg('video.mp4')
    .seekInput('15:00.000')
    .output('output/screenshot.jpg')
    .outputOptions(
        '-frames', '1'  // Capture just one frame of the video
    )
    .on('end', function() {
      console.log('Screenshot taken');
    })
    .run()

如果没有命令“-frames 1”,它将对视频的每一帧进行屏幕截图。

为了说明其功能有多么强大,以下命令可以制作整个视频的连续 Sprite 5x5 图像(每个文件 25 个图像)。非常适合制作缩略图。

ffmpeg('video.mp4')
    .on('end', function() {
      console.log('Screenshots taken');
    })
    .output('output/screenshot-%04d.jpg')
    .outputOptions(
        '-q:v', '8',
        '-vf', 'fps=1/10,scale=-1:120,tile=5x5',
    )
    .run()

// fps=1/10: 1 frame every 10 seconds
// scale=-1:120: resolution of 120p
// tile=5x5: 25 screenshots per jpg file
// -q:v 8: quality set to 8. 0=best, 69=worst?

关于node.js - 在 ffmpeg 中生成屏幕截图花费太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53202448/

相关文章:

java - 使用 Xuggler 通过 Java 检测网络摄像头

node.js - 使用 grep 提取 NodeJS 实例的永久 ID

javascript - 将值传递给不同的网页表单

node.js - LTS 版本和 node.js 的稳定版本有什么区别?

PHP-FFMpeg 视频输出被截断

ffmpeg/avconv : transcode using same codec and params as input

c++ - 如何调用使用 token 粘贴的宏?

javascript - 带有 Express 和 Handlebars 的 NodeJs -handlebars.engine 未定义

javascript - 为什么我无法通过 id 获取一件商品?

FFMPEG - 单个视频文件多个音频文件流到 YouTube