X

FFmpeg: Как разбить видео на картинки с определенным промежутком времени

Понадобилось мне из одного большого вебинара вытащить некоторые кадры с презентации, на которую время от времени переключался ведущий. На ум сразу пришло, перематывать и делать скриншоты. Но, уже на 5 кадре, я понял, что это не удобно, т.к. перематывать видео и ловить эти кадры не очень удобно. Я придумал, сделать раскадровку видео, т.е. конвертировать видео файл в картинки с определенным шагом. Имея раскадровку удалить лишнее будет просто. Благо, все уже придумали до нам и сделать это можно с помощью ffmpeg...

Я уже писал, об этой утилите вот тут: Скачать youtube видео и разбить его по кадрам в jpeg, но, продублирую команды для нового описанного.

1) Вытащить кадр из видео по определенному времени и сохранить в картинку

ffmpeg -i input.flv -ss 00:00:14.435 -vframes 1 out.png

тут, утилита возьмет 1 кадр из видео с позиции 0h:0m:14sec:435msec и запишет в png файл

2) Записывать по 1 кадру каждую секунду

ffmpeg -i input.flv -vf fps=1 out%d.png

на выходе получим раскадровку в файлах out1.png, out2.png, out3.png ..

3) Вытащить кадры с интервалом 15 сек и записать их в формате img00007.jpg

ffmpeg -i myvideo.avi -vf fps=1/15 img%05d.jpg

каждую минуту

ffmpeg -i myvideo.avi -vf fps=1/60 img%05d.jpg

каждые 10 минут

ffmpeg -i myvideo.avi -vf fps=1/600 img%05d.jpg

4) Вытащить ключевые кадры

ffmpeg -i input.flv -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png

Как видите решить задачу с ffmpeg довольно просто, мне понадобилось всего 10 минут, на обработку 3х часового видео.