花太长时间才能在ffmpeg中生成ScreenShot

时间:2018-11-08 06:22:30

标签: 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分钟。如何解决此问题。

1 个答案:

答案 0 :(得分:0)

我不喜欢fluent-ffmpeg“ screenshot”命令。 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”,它将为视频的每一帧拍摄屏幕截图。

为说明该功能的强大之处,以下命令可以使整个视频连续生成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?