At least on Windows, I sought to combine the strengths of both methods and add some of my own ideas:
In FitzQuake Mark V Revision 5 (download + source | readme ) All the source code changes are marked with #ifdefs making it rather straightforward to assimilate a modification, see quakedef.h in the source code to see the marking names.
In FitzQuake Mark V:
1) If the command includes, say, "+capturedemo demo1" it will exit after demo record. This means someone could use batch files to turn a lot of demos in videos.
2) I essentially eliminated the need to specify a video codec. There are only 4 viable video codecs out in the wild (*): vp80 (Google's WebM), xvid, divx and uncompressed (no codec).
(*) Because some video codecs are too slow to encode video --- do you want it to take hours? ---- and some generate video of poor quality or other encoders like H.264 you have to pay for. Google's WebM and XVID and DIVX are free (and open source too). YouTube supports them all, obviously.
3) One of the most annoying aspects of video capture is wanting to know how much longer completion is going to take. Like DirectQ does with some things, I put this in the window caption (elapsed time and estimated time remaining).The engine attempts to use VP80. If that fails, tries XVID and then tries DIVX. All fail, it uses no codec and does an uncompressed video stream. Google's WebM/VP8 ( http://www.optimasc.com/products/vp8vfw/index.html <--- download ) makes files of slightly higher quality and much smaller file size than XVID (although XVID is a bit faster). WebM is also open source and free. cl_capturevideo_codec defaults to "AUTO" (use best one available) --- cl_capturevideo_codec "xvid" would force the xvid codec and cl_capturevideo_codec "none" would use no codec.
4) No need to name the video file. "capturevideo toggle" autonames the video file, so merely binding "capturevideo toggle" to a key can be used to capture snippets of video. VirtualDub (free and open source) can easily be used to combine separate video files of the same codec into a single stream.
5) capturedemo aborts the playing of the demo if it couldn't create the video file for some reason. I also have capturedemo automatically NOT record the console (I have a better and funnier solution not implemented that would be even better ... do a glFinish before drawing the console, do a glReadPixels -- this is the "capture" --- and then draw the console and then swapbuffers. The video stream would never include the console of a capturedemo but you'd see the console on-screen. My reason for not implementing this yet is not having a plan to prevent the con_notify text from appearing.)