Быстро извлечь несколько кадров из нескольких видео - PullRequest
0 голосов
/ 11 мая 2019

У меня есть папка с видеофайлами, и мне нужно извлечь более 2 кадров из каждого из них, используя скрипт bash для Linux.В настоящее время я делаю это для каждого видеофайла в цикле:

ffmpeg -nostdin -loglevel fatal -ss 15 -i "${filename}" -frames:v 1 "${out1}"
ffmpeg -nostdin -loglevel fatal -sseof -15 -i "${filename}" -frames:v 1 "${out2}"

Это извлекает кадр 15 с и еще один кадр 15 с конца.Для N видеофайлов мне нужно 2N вызовов ffmpeg.Я экспериментировал с -vf select, как меня спросили здесь , но это было намного медленнее, особенно с требованием выбирать кадры в начале и в конце.Кроме того, я уже использую параллель GNU, что имеет большое значение.

Производительность на самом деле не так уж плоха.Но мой вопрос, это может быть улучшено дальше?Я надеюсь найти способ

  • для извлечения обоих кадров за один вызов ffmpeg (быстрее, чем два отдельных вызова) или
  • для подачи ffmpeg более одного файла за вызов (дляуменьшить накладные расходы при запуске процесса)

1 Ответ

2 голосов
/ 11 мая 2019

Вы можете использовать один и тот же вход несколько раз, а также несколько входов в одной команде.

Базовая структура команд:

ffmpeg -nostdin -loglevel fatal
       -ss 15     -i "${filename}"
       -sseof -15 -i "${filename}"
       -ss 15     -i "${filename2}"
       -sseof -15 -i "${filename2}"
       -map 0:v:0 -frames:v 1 "${file1-head}"
       -map 1:v:0 -frames:v 1 "${file1-tail}"
       -map 2:v:0 -frames:v 1 "${file2-head}"
       -map 3:v:0 -frames:v 1 "${file2-tail}"
...

Я сомневаюсь, что это приведет к значительному улучшению для небольшого набора файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...