This is a bug in VLC (which still exists in version 3.0.6). After some experiments I realized that VLC crashes for videos with FPS less than 10. So all videos with 10 FPS or more shouldn't be a problem. So there is currently no clean way to get a video with 1 FPS which is playable in VLC (don't give up, keep reading).
One workaround is -as shown in the answer above- to fake the effect of 1 FPS by duplicating the images (when we actually have an FPS equals to 10 or more, which is ok for VLC).
Example: if you have a folder with 12 images, and you would like to generate a video with 1 FPS (which is playable in VLC), then you need to duplicate each image multiple times (let's say 10 times), and then tell FFMPEG to generate a 10 FPS video. In this way we will get a video with a total frames of 120, where each image will be played for 1 seconds (as it is duplicated 10 times), which is simply a fake for 1 FPS.
I prefer to use fps parameter rather than -r (which is shown in another answer) which may in some case be problematic (according to the official documentation).
ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv
As the input -framerate is lower than the output fps, FFMPEG will duplicate frames to reach your desired output frame rate (which is 10 according to the command above).
It is also important to notice that the order of -framerate and -vf fps is important, as this configuration will be applied to the next mentioned video (in- or output). That is according to the official docs:
options are applied to the next specified file. Therefore, order is important...
ffmpegis smart enough to figure out the video codec just from the container format file extension,.mp4. Try adding-vcodec libx264 -vpre hqto the command line, to tell it the codec and encoding parameters.-r 1.