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...
ffmpeg
is smart enough to figure out the video codec just from the container format file extension,.mp4
. Try adding-vcodec libx264 -vpre hq
to the command line, to tell it the codec and encoding parameters.-r 1
.