Я не фанат команды 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?