ffmpeg выводит изображение с именем файла с временной позицией - PullRequest
0 голосов
/ 30 апреля 2018

Я использую ffmpeg, чтобы получить jpg из моего видео с определенной скоростью (один снимок экрана каждые 5 секунд) с помощью этой команды:

ffmpeg -i source -f image2 -r 1/5 %d.jpg

Это работает и дает мне последовательные имена файлов:

1.jpg
2.jpg
3.jpg
4.jpg

Что, если мне нужно знать, когда были сделаны эти снимки экрана? Что-то вроде отметки времени:

00:00:00.0000.jpg
00:00:05.0000.jpg
00:00:10.0000.jpg
00:00:15.0000.jpg

или количество секунд:

0.jpg
5.jpg
10.jpg
15.jpg

Я попытался снова с новой опцией -frame_pts :

ffmpeg -i source -f image2 -r 1/5 -frame_pts 1 %d.jpg

Я получил похожие последовательные имена файлов, но теперь они начинаются с нуля:

0.jpg
1.jpg
2.jpg
3.jpg

1 Ответ

0 голосов
/ 30 апреля 2018

Используйте

ffmpeg -i source -vf fps=1,select='not(mod(t,5))' -vsync 0 -frame_pts 1 z%d.jpg

frame_pts назначит серийный номер имени изображения, где номер представляет позицию кадра в соответствии с временной базой выходных данных. Таким образом, рассчитанная временная позиция составляет frame # x timebase. Временной интервал является обратной величиной выходной частоты кадров, например для потока 12 к / с, временная база составляет 1/12. Таким образом, выходной файл image212 представляет время 212 x 1/12 = 17.67s

Чтобы представить секунды, вам нужно сгенерировать поток 1 кадр / с, а затем выбрать каждый 5-й кадр, чтобы получить кадр с каждой 5-й секунды. vsync 0 добавлен для предотвращения дублирования кадров ffmpeg для создания потока с постоянной частотой кадров.

...