我正在使用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分钟。如何解决此问题。
答案 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?