When using raspistill
in -ex auto
mode, I noticed that the timeout
(-t
) parameter defines the maximum exposure time; for instance, when setting it to 1000
, it rarely sets an exposure time of 1 second, but instead automatically finds the best exposure time under that value.
However, when trying sports
mode with a shorter timeout value (-t 50
), to my surprise most* pictures had a fixed exposure time of approximately 50 milliseconds, and were overexposed. It's as if timeout
became synonym to shutterspeed
, instead of simply a maximum value.
(*A few pictures were mostly green with a very short exposure time, due to sun glare, but most were exactly 50 milliseconds.)
My ultimate goal was to obtain non-blurred pictures while the camera is moving, choosing sports
to enable higher ISO instead of longer exposure time.
Unfortunately, I cannot easily reproduce outdoors lighting + shaking conditions to test with several combinations of parameters, so I'd like to understand the logic behind it before trying again. The documentation is not very extensive w.r.t. difference between sports and antishake, for instance.
Is it expected that timeout
only works as expected under the auto
exposure mode? Is there another way to obtain a somewhat automatic exposure time, but minimizing blurring by increasing maximum ISO if needed?
Edit: I've finally been able to do some new tests, and here's what seems to be happening, though I don't understand why.
raspistill -?
says the following for the -t
parameter:
-t, --timeout : Time (in ms) before takes picture
and shuts down (if not specified, set to 5s)
So, in theory -t
should have nothing to do with exposure time, however in practice this is not what happens. Note: all the measurements below were done with sports mode (-ex sports
).
First and foremost, if I want the raspicam to immediately take a picture, I should be able to set -t 0
, right?
Well, unfortunately this blocks the command as if I were trying to make a video with infinite length, or something equivalent.
If you specify -t 0
for raspistill, you can wait for a very long time and the command will not stop, and doing Ctrl+C
to exit it will kill the process without producing any output file.
Secondly, setting -t 50
, for instance, should result in waiting for 50 milliseconds, then capturing data for an indeterminate amount of time (depending on exposure settings, available light, etc.).
However, in practice this works almost as setting the exposure time to be approximately equal to the output of -t
.
I tried it with -t 50
, and the exposure time is 1/202 seconds for every picture, resulting in overexposed images.
I then tried it with -t 1
, and the exposure time went to 1/820 seconds, but the pictures were still overexposed.
Finally, I specified no -t
and got the expected "wait 5 seconds" before the picture was taken, and then it was correctly exposed at 1/5587 seconds.
My main question is: using the sports mode (-ex sports
), how can I quickly take correctly-exposed pictures without having to wait 5 seconds between them?
It seems that should be possible, but even after several tests I cannot do that! It could be a bug in option parsing for raspistill
, or I misunderstood the options, but I tried several combinations that seemed to make sense, but I still cannot get it to immediately take a picture with correct exposure time.