Handbrake will do anything – but re-encodes the whole movie frame by frame, so is very slow (depending how powerful your machine is, and the quality of the source and target files). Can take hours.
Most “source” files I use are MKVs, which don’t need a full re-encode to get to MP4/M4V, the just need a “re-mux” which is essentially re-packaging the file, and only takes a few minutes. I use Mp4Tools, which I like, but lots of people use Subler. They are both free.
a couple of caveats: for re-muxing to work, they have to be encoded using the right codec h264, and the sound has to be AAC instead of DTS (from memory – could be wrong).
The biggest ball-ache for me is forced subs. If anyone has figured-out a foolproof way to spot these prior to encode/remux, I would be extremely interested!