You can burn text subtitles with one of two filters: subtitles or ass.
As of Nov 29, 2012 you can also simply use the subtitles filter:
ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi
This filter requires ffmpeg to be compiled with --enable-libass (if you are building FFmpeg yourself, look for the libass-dev package on Debian-like distributions).
ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi
As with the subtitles filter, this filter requires ffmpeg to be compiled with --enable-libass.
If your subtitle is in SubRip, MicroDVD or any other supported text subtitles, you have to convert it to ASS before using the filter:
ffmpeg -i subtitle.srt subtitle.ass
For Windows users this link may be useful, as you have to setup font paths just right to get libass to work
picture based subtitles
You can burn "picture based" subtitles into a movie as well (for instance, dvdsub is a type of picture based overlay subtitles), by using the overlay filter to overlay the images. Here is an example - an MKV with dvdsub subtitles in a separate stream:
ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a <output options> output.mkv
If you have multiple subtitle streams, you can select which one to use by replacing [0:s] with [0:s:0] to select the first subtitle stream or [0:s:1] to select the second subtitle stream, and so on. See also the official documentation; search for "hardcode".