Primarily, I use a combination of AVISynth+, VirtualDub and Audacity. It’s not the easiest way of editing, but all the tools used are entirely free. I edit by writing an AVISynth script for the video, and check it using VirtualDub (VirtualDub is also vital in order to get the frame numbers to use in your AVISynth scripts). I then export the video’s audio using VirtualDub, and edit in my narration with Audacity. If further edits are necessary, those are done by modifying the AVISynth script accordingly.
The videos are then encoded in h.264 using either x264 or ffmpeg (using nVidia's hardware encoding), the audio is separately encoded to AAC, and the two are combined using MP4Box. I've automated
many of these steps by writing scripts for them.