Я хочу создать анимированный GIF-файл в качестве эскиза для видео. Я использовал эту командную строку, чтобы получить 20 кадров из видео:
ffmpeg -i input.mkv -ss 00:05:14.435 -vframes 20 ./thumbs/out%02d.png
Это помогло получить образец, из которого я могу создать .gif. Но в более длинном видео есть несколько сцен, очевидно, и я хотел получить еще 20 кадров из другой части и так далее еще несколько раз, чтобы получить несколько сцен. Конечно, это представляет проблему, как решить, откуда брать кадры.
Я искал и нашел этот вопрос, ответ на который действительно кажется близким к тому, что я хочу - значимые миниатюры для видео с использованием FFmpeg. В этом ответе они предлагают команду:
ffmpeg -ss 3 -i input.mkv -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf fps=fps=1/600 ./thumbs/out%02d.jpg
который получает один кадр в начале каждого из пяти изменений сцены. Я был взволнован, потому что захват 10 или 20 кадров из каждой из этих сцен был бы потрясающим и просто хочу, чтобы я захотел.
Я не мог сказать, как объединить две концепции: найти места, где происходят изменения сцены, и получить несколько кадров из каждого места. -frames: v и -vframes кажутся одним и тем же параметром, и в одной команде они говорят ffmpeg захватывать 10 последовательных кадров, а в другой говорят, что ограничение захвата кадров из разрывов сцены составляет 5.
Как я могу создать команду, которая будет захватывать n кадров от каждой сцены до y? Черт возьми, я был бы не в состоянии контролировать, как могут происходить разрывы сцен, за которые были захвачены n кадров.