With ffmpeg:
# in older ffmpeg
ffmpeg -y -r 1 -loop_input -shortest -i <IMAGE> -acodec copy -i <AUDIO> output.avi
# in newer ffmpeg:
ffmpeg -y -r 1 -loop 1 -i <IMAGE> -i <AUDIO> -acodec copy -shortest output.avi
-y – overwrite output,
-r 1 – fps=1,
-loop_input / -loop 1 – loop image,
-shortest – end when we run out of inputs,
-acodec copy – don’t recode
