Most capable video editors provide at least some kind of subtitling ability, and this is usually very straightforward: position the video, type some text, it appears on the screen and is saved as a part of the clip.
Simple? Yes, but this approach has problems: the video must be re-encoded, reducing image quality; the subtitles will probably become a little blurred, and the file size is likely to increase.
"Softsubbing" -- creating the subtitles in a separate file -- may be a preferable solution. It adds complexity, as your player must support your subtitle format. But there’s no re-encoding, no loss of quality, and your subtitles can be turned off when required, or edited later with a tool like the open source, cross-platform (Windows and Mac) Aegisub.
The program gives you an enormous amount of control. The Style Editor, for example, allows you to choose your text font, size, style, colors, scale, rotation, spacing, encoding, margin and alignment.
Subtitle timing is equally professional. You’re not left to manually judge when subtitles should appear; instead, waveform and spectrum analyzer modes help to place them with absolute precision.
Aegisub includes a host of supporting functions to help you through the process: a spell checker, translation assistant, color picker, visual timing tools, and more. You even get Lua scripting, for extreme configurability.
There’s support for importing just about every video type, of course. And your finished work may be exported in all the usual formats: SRT, SUB, ASS/ SSA, STL, ENCORE.TXT, TTXT, TRANSTATION.TXT, or just TXT).
This can seem complex, at least initially. If you just want to add a couple of captions to a home movie then using a basic video editor is probably a better idea.
Aegisub is well designed, though, with excellent online help, and if you need to create professional quality subtitles on a regular basis -- and you’re willing to spend some time learning the fundamentals -- then it’ll be a great choice.