Let me explain you how this works
ffmpeg is complete, cross platform command line tool capable of recording, converting and streaming digital audio and video in various formats.
ffmpeg -f image2 -r duration_per_frame -i input_frame_path -i audio_path -s 640x640 -vcodec libx264 -c:a aac -strict experimental -b:a 192k -y out_video_path
-f is used to force a particular type of format for video conversion
-r is used to set the frame rate of video. i.e. no. of frames to be extracted into images per second.The default value is 25, using which, would have yielded a large number of images.
-i is used to specify the input file
-s is used to set the frame size of the final video
-vcodec is used to force the video codec for video conversion
-c is used to encode or decode with a particular codec, since you mentioned -c:a aac it means encoding the audio stream with aac.
-strict experimental Some encoders, such as the native FFmpeg AAC encoder (aac), are considered experimental and require the addition of -strict experimental
-b is used to set the audio/video bit rate. Since you used -b:a 192k the audio bit rate is set to 192k.
-y is used to overwrite output files.
Now let us come to your question of video file not being created. This could be because of you are using a still image or the image stream is just not getting populated, may be you can add -loop 1 to your command and check. This may not be a complete solution but it could be a start. we need to dig more deeper.
ffmpeg -f image2 -r duration_per_frame -loop 1 -i input_frame_path -i audio_path -s 640x640 -vcodec libx264 -c:a aac -strict experimental -b:a 192k -y out_video_path
I would still recommend you to provide us all the paths you are using in the command. And give more idea of what you are trying to do.