I wanted to check what the lowest FPS is that the human eye cannot notice as flicker.

I created a white jpg and a black JPG. I started with 25 fps which means that I have 24 jpg of white and 1 of black.

Than I used this command:

ffmpeg -r 25 -i %d.jpg -vcodec mpeg4 test.avi

The movie was 3 seconds long (I had 75 jpg in total). I could easily see the black picture.

Then I moved to 100 fps, and I was still able to see it – but not 3 times as before (here I had 300 JPG, 3 of them were black). When I moved to 200 fps, I wasn't able to see the black JPG flicker (I 600 JPGs).

Is there any lower limit for FPS where humans cannot perceive a difference between two frames?

The codec I used for sure showed these images… or there is a way of compression where the black frame wouldn't be shown in the movie? If so, which codec should I use?

  • Note to close voters: this question does involve ffmpeg, thus computer software. The answer also states how it technically is not possible, relating to the hardware. – slhck Apr 26 '14 at 12:12

What you want is basically impossible with the hardware you have. You can create a video with 600 frames per second without issues, but no consumer monitor can play that back. Typical computer monitors have refresh rates from 60 to 100 Hz, the best being 3D-capable monitors that can display up to 120 Hz.

So what happens is that you see an interpolation of the actual video, where only some of the frames are shown.

Note that humans already perceive individual images as motion with frame rates around 10 to 15 Hz. This might not be as pronounced with high-contrast black and white images though, but going up to 60 Hz or more is unnecessary. As soon as the duration of an individual frame is below 13 milliseconds (which roughly equals to 60 Hz), it will not be recognizable as such – and this should answer your question.

To be precise, you might not want to ask when the human eye perceives the image, but the human visual system as a complex apparatus. The eye might as well be able to pick up the image, but the brain doesn't have to handle it because it's way beyond the threshold of what is useful to process for it.

If you want research material on that subject, I recommend you to read something along these papers:

  • Potter, Mary C., et al. "Detecting meaning in RSVP at 13 ms per picture." Attention, Perception, & Psychophysics (2013): 1-10.

  • Watson, Andrew B. "Temporal sensitivity." Handbook of perception and human performance 1 (1986): 6-1.

  • Thompson, Peter, and Leland S. Stone. "Contrast affects flicker and speed perception differently." Vision research 37.10 (1997): 1255-1260.

  • So basically if i creating a video with 60 hz == 30 fps , the human eye should now recognize it? witch codec i should use for that? – USer22999299 Apr 26 '14 at 12:07
  • 60 Hz means 60 frames per second. That roughly equals to 16ms per frame, so you should in theory be able to see it. The codec does not matter as much, but if you want to be sure, use an I-frame only codec like MJPEG (-vcodec mjpeg). – slhck Apr 26 '14 at 12:11
  • how can i make sure that this one is progressive and not interlace ? in interlace 2 fields are 1 frame.. – USer22999299 Apr 26 '14 at 16:09
  • It will be progressive, since you don't have any interlaced source. You're just taking single pictures. – slhck Apr 26 '14 at 17:07
  • Thanks a lot , you were right , used mjpeg at -r 60, and i could not noticed the injected frame. Is there some how to do post processing to the video to make sure that the specific frame is different? (just to check my self) – USer22999299 Apr 27 '14 at 5:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.