Where total number of select clauses is equal to the number of frames needed from each set of X frames. ![]() You can use the offset device n c or n-c if one of the denominators is a multiple of the others.Ī cruder way to do this is ffmpeg -i in.mp4 -vf select='not(mod(n,12)) not(mod(n 3,12)) not(mod(n 5,12)) not(mod(n 7,12)) not(mod(n 11,12))` -vsync 0 frames%d.jpg The idea is to represent your frequency as a sum of reciprocals, 1/f = 1/m 1/n 1/p. Since, in this case, the latter will coincide with the former selection, we can pick one frame earlier i.e. You can decompose that as 1 out of 3 1 out of 12. ![]() So that means you need 5 frames from every 12. Let's take f = 2.4 which is the same as 12/5. There is a way to do this directly with select filter if you can decompose the frequency into a rational number (and do a bit of maths). If you have a list of frames, you can just run ffmpeg -i in.mp4 -vf select='eq(n,5) eq(n,11) eq(n,15).' -vsync 0 frames%d.jpg Then am I able to pass that (the frames list) into the ffmpeg command? Or can I tell ffmpeg to do something similar? to get the frames I would do something like this: nframes = 72 # number of frames in video Maybe I could use a for loop to generate a list of the frames closest to the desired interval and then pass that in as the select filter?Į.g. Whats the best way to get exactly 30? - obviously the interval wouldn't be identical but thats fine. I think the mod has to be an integer (?) so I could either round down and use 2 which gives me 36 images or round up which gives me 24 images I'm running this from a python script so i'm doing something like the following for the filter: select='not(mod(n\," str(mod) "))' I've tried using the 'select' with 'mod' but if the total number of frames does not fit neatly into the desired number of images (30) then I sometimes end up with more images, sometimes less.įor example if my video is 72 frames long, my 'mod' would be 72 / 30, which is 2.4. ffmpeg -i < framed.jpg > -f image2 < video.mpg video.gif > To quickly extract a single frame from a video at time mm:ss and save it as a 128x128 resolution image: ffmpeg -ss < mm:ss > -i < video.mp 4> -frames 1 -s < 128x 128> -f image2 < image.![]() I want to create a maximum of 30 images from a video (and tile them for a sprite sheet).
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |