ffmpeg output images filename with time position

落爺英雄遲暮 提交于 2019-11-28 05:33:33

问题


I am using ffmpeg to get some jpg from my video at a specific rate (one screenshot every 5 seconds) with this command :

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

This works and give me sequential filenames :

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

What if I need to know at which time those screenshots have been taken ? Something like a timestamp :

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

or the number of seconds :

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

I tried again with the new -frame_pts option :

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

I got similar sequential filenames, but now they are starting from zero :

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

回答1:


Use

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

frame_pts will assign a serial number to the image name, where the number represents the frame position as per the output timebase. So the calculated time position is frame # x timebase. The timebase is the reciprocal of the output framerate e.g. for a 12 fps stream, timebase is 1/12. So output file image212 represents a time of 212 x 1/12 = 17.67s

To represent seconds, you need to generate a 1 fps stream and then pick every 5th frame, to get a frame from every 5th second. The vsync 0 is added to prevent ffmpeg from duplicating frames to generate a constant frame rate stream.



来源:https://stackoverflow.com/questions/50099869/ffmpeg-output-images-filename-with-time-position

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!