First we rename all *.JPG files based on their creation date. Sometimes cameras change the file name or just ordering them is somehow not what we want. However, renaming them by the creation date always work:

jhead -n%Y%m%d-%H%M%S *.JPG

After that we put this list in a file:

ls -1tr | grep -v files.txt > files.txt

And then use mencoder to create an AVI video using 20 fps. Note that this will generate a huge video file, usually around the same size of all the pictures summed.

I usually take pictures for timelapse with the lowest resolution of my camera (5 MP), which has a 4:3 aspec ratio. To generate a proper 1080p video the image is first re-scalled to 1920 pixels of width and then I crop it to 1080 of height. This way I am not changing the photos' content, just cropping:

Blender is a good solution if you're dealing with motion timelapse (hyperlapse) or unsteady footage. It has motion tracking capabilities so you can choose a fixed point to track throughout the timelapse. You can also fix rotation issues.