This is for FFmpeg (see here for Windows versions).
First, prepare your images so they are named image-001.jpg, image-002.jpg, et cetera. Put them into one folder.
Now, use the following command:
ffmpeg -y -loop 1 -f image2 -r 0.5 -i image-%03d.jpg -s:v 1280x720 -b:v 1M \
-i soundtrack.mp3 -t 01:05:00 -map 0:0 -map 1:0 out.avi
You can of course change the parameters. Here's an explanation of what they do:
-loop_input – loops the images. Disable this if you want to stop the encoding when all images are used or the soundtrack is finished.
-r 0.5 – sets the framerate to 0.5, which means that each image will be shown for 2 seconds. Just take the inverse, for example if you want each image to last for 3 seconds, set it to 0.33.
-i image-%03d.jpg – use these input files. %03d means that there will be three digit numbers for the images.
-s 1280x720 – sets the output frame size.
-b 1M – sets the bitrate. You want 500MB for one hour, which equals to 4000MBit in 3600 seconds, thus a bitrate of approximately 1MBit/s should be sufficient.
-i soundtrack.mp3 – use this soundtrack file. Can be any format.
-t 01:05:00 – set the output length in hh:mm:ss format.
out.avi – create this output file. Change it as you like, for example using another container like MP4.