How to encode a video at 30 FPS from images taken at 7 FPS
Image inputs
Default frame rate for image inputs is 25. You can change it with the -framerate input option. Example for 24 fps:
ffmpeg -framerate 24 -i input_%03d.jpg -vf format=yuv420p output.mp4


-vf format=yuv420p (or the legacy alias -pix_fmt yuv420p) will ensure compatible chroma subsampling for MP4. Otherwise, ffmpeg will try to preserve color fidelity, but most players can't handle advanced chroma subsampling.
The output will use the same frame rate as the input. So you do not need to set an output frame rate. But there are a few reasons to do so. See Using a different frame rate for image inputs and video output below.

Video inputs
Use the -r output option:
ffmpeg -i input.mp4 -r 25 output.mp4


Using a different frame rate for image inputs and video output
Why? For example, you may want all images to be displayed for 1 second each (1 fps). But most players can't play very low frame rates (about 6 fps or lower). So you can make ffmpeg use a different output frame rate. The output will look like 1 fps, but will actually be a normal frame rate, such as 25 fps.
Example: input images at 1 fps, but make the output 25 fps.
ffmpeg -framerate 1 -i input_%03d.png -r 25 output.mp4


Frames will be duplicated or dropped to match the desired output frame rate.
The image demuxer uses -framerate, while the output frame rate is set using -r.

Error: Option framerate not found
The -framerate option:

Is not a generic option. It doesn't work for everything.
Is only an input option.
Only works with certain demuxers (including: images, x11grab, rawvideo).
You probably only need to use the -r output option. See the Video inputs section above.