With only the information you provided this what I can think of.
Let's go by pieces:
As there is only one image added to the video. I m wondering if there is a way to reduce the video size eg force bit rate/second = 1 instead of 28 ?
As it is a still image, no need to change. just stay still.
What you're talking about there it's frames per second (fps) not bitrate. And you're right in the concept. Beign just one still image 1 fps wouldn't be a problem.
Is it a reasonable size for mp4? Does image size matter a lot?
In this case image size wouldn't have a significant weight because we are dealing with just one still picture. If it were a high quality video then it's a different issue.
Should I resize jpg to 1080 * 720, and make additional settings in ffmpeg to output as 720p (what is the ffmpeg setting then :) ?
The resolution you are saying it's 1280x720.
I dont' see the point in the -loop 1
option here, it will only slow down the process. Did you use -shortest
cause the file has more than 1 input stream? If no then there's no reason to use it. Since you used -acodec copy
I will have to assume that you don't want to re-encode it.
For an output of 720p 1fps without re-encoding and not touching bitrate:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4
Beign the case that it has more than one input stream and you want ffmpeg to finish encoding at the shortest stream then:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4
Now if you have to change the bitrate (let's say 1024k as an example);
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4
See: Limit the output bitrate
-c:a copy = Copy the input audio stream so we not re-encode.
-b:v = The bitrate specified to be (not precisely) constant.
-bufsize = It's the interval in which calculates the average bitrate. Meaning the lowest more loss quality image but more accurate
bitrates according to the specified in -b:v.
-s = The actual size of the video output.
-framerate = The input frame rate we want that the output will use.
Note that if you still want a smaller size video at one point you will have to sacrifice quality in order to achieve that. And other ways to do it involve re-encoding with lossy compression.
From what you say, the information you provide and what you are trying to do I think it seems that your target is to embed album-art to mp3. If that's your goal this would fit your requirements better:
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
-map_metadata = The ffmpeg metadata specifier to output file from infile. In this case (zero) the global metadata.
-map 0 = Input stream 1 (audio).
-map 1 = Input stream 2 (image).
If nothing here suits your requests please give more information.