Слишком много времени, чтобы создать ScreenShot в ffmpeg - PullRequest
0 голосов
/ 08 ноября 2018

Я создаю снимок экрана с помощью ffmpeg. Он генерирует миниатюру, но занимает слишком много времени (более 2 минут).

Я ссылался на эту ссылку

создание миниатюр из больших фильмов с помощью FFmpeg занимает слишком много времени

Но я должен установить в своем коде 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 голосов
/ 29 ноября 2018

Я не фанат команды 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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...