Use
VLC to play them. It's caused by people incorrectly combining multiple MPEG video clips.
A simplified explanation would be that the MPEG header at the start of the file tells QT how long the file is, so it plays only that length, then when it gets to the end of that clip, it reads the new header, but since it's already done playing, it just stops.
If you want to fix it permanently you need to demux the MPEG file and remux it (you can use
bbDemux to demux it and
MPEG2 Works or
ffmpegX for remuxing).