I have been asked to produce a number of videos lately, mostly tutorial screencasts. These videos usually involve a series of screen recordings (video screen captures) with audio. Since some of these videos are for my employer, it is important that I am as productive as those using tools on other platforms. I would prefer to pay for a supported tool if I could depend on it to produce quality results with minimal effort. After a lot of experimentation and research, I developed a process that seems to be working. My process is meant to produce videos suitable for publication on YouTube.
I realized that my research would be useful to other Linux users, so I started putting together this blog post, but it ended up taking too much time. As this research is likely to go out of date before I get time to put everything together, I am going to publish it even though it is incomplete.
It is surprisingly hard to find a tool that can reliably grab a portion of my screen and save a video file that I can then edit. I looked at a lot of tools for this.
- ffmpeg: A swiss army knife audio / video tool. Command line only with lots of options to learn. Many of the other tools reviewed use this under the hood.
- Libav avconv: A fork of ffmpeg. It is also command line only with lots of power, but required me to make lots of decisions that I wanted a GUI to walk me through.
- VLC: The UI is geared towards media playback, but it appears to be able to capture a screen recording. I didn't get it to work though.
- Qarbon ViewletBuilder: Proprietary. Old versions supported Linux (through Java), but their current products do not. Though their new (non-Linux) versions support many video formats, but the old Linux version only supports saving to Flash.
- Wink: Proprietary freeware that only saves to flash. Doesn't look actively developed.
- SPx Screen Recorder by Cambridge Pixel: Appears to be geared at archiving the screen contents by recording in the background (radar applications).
- DemoRecorder: Proprietary but supported recording application that appears to do all of what I want, but with a very cumbersome interface. The price isn't bad when compared to Adobe products, so I will investigate this option further if I can't get one of the others to work. Audio recording requires installation of alsa_oss; it doesn't appear to know about pulse.
- xvidcap: Not maintained and so dropped from the Debian repositories.
- Istanbul: Easy to use, but doesn't get much development attention. Sluggish. Can't record a selection on the second desktop.
- Kazam: This is a newer project with active development and a lot of promise, but the dependencies for installing it on Debian Wheezy kept me from trying it.
- RecordMyDesktop: Though RecordMyDesktop hasn't been maintained in years, it still was the easiest to use and most reliable tool I tried. However, I had odd artifacts in my recordings that I was unable to solve. I tried tweaking my NVidia driver settings, but it didn't seem to help. This tool is great for personal use, but the artifacts made the resulting videos look amateurish.
- Freeseer: This project is surprisingly feature-rich and recorded flawless video. It is also under active development and rapidly improving. This is my tool of choice at the moment.
Sometimes mplayer would play OGG files with the audio out of sync. It appeared to be a problem with mplayer and would go away once I transcoded the video to another format.
Audio Capture and Editing
Audacity is the most popular open source tool for audio capture and editing. It met all of my needs and I didn't research anything else.
Audacity understands audio hardware and allows you to select the device you want to capture from. The screen recording tools listed above all use PulseAudio, so if the capture is not using the tool you want (it's using the laptop mic instead of the headset), then check your levels in KMix and use pavucontrol to assign the appropriate device to the capture stream.
Sometimes I need to recording video that is not on my desktop, usually of me talking. I tried to use my laptop's integrated web cam, but the audio was out-of-sync. Then I tried to use an external Logitech webcam with a microphone, but the audio was not sufficiently clear. I finally used my Canon point-and-shoot camera that I use for videos of my kids. It's optical zoom was better than that provided by my phone.
Finding reliable a reliable video editing application on Linux was almost as hard as finding a screen recording program, but there were fewer options to choose from. I knew very little about video editing when I started, so I am grateful for Doran Barton (@fozzmoo) presenting on the topic at PLUG last November.
- Cinelerra: A very confusing program. I don't know enough about video to understand this program.
- Avidemux: Appears to be a simple video editor that has been around a while and is still under active development. I didn't really try it.
- OpenShot: Pretty easy to use and under active development. But it couldn't handle the Ogg files I was producing with RecordMyDesktop and FreeSeer. Google says that is probably fixed in the latest version.
- Kdenlive: I was initially mystified by Kdenlive. It is complex to use, it doesn't always clue you in to what functionality is available, the version I used was very buggy, and the documentation is "in progress". But it works, and it has tons of features. The UI is consistent, so once I figured out the basics then I was able to figure out the rest. And they say the new version is less buggy. I daresay I might even be growing an affection for the application. Unless you have previously used a video editor, I highly recommend you have someone teach you the basics as the documentation will just add to your aggravation (but that is a blog post for another day).
My current process is:
- Record video and audio with my Canon point-and-shoot camera,
- Record screen captures with FreeSeer,
- Enable Audio Recording, Audio Source: autoaudiosrc
- Video Resolution: 720p
- Jeff Potts shared with me his trick of recording the screen cast with the mic set to high audio sensitivity to pick up all the clicks, but to record the voice-over seperately. It is a lot easier to be smooth this way, and it gives me a chance to reherse my audio while doing the demo click-through.
- Record audio to the screen capture with Audacity,
- Use KDE Mix to set the mic sensitivity low enough to not pick up breathing,
- Use Host ALSA
- Set the device to my USB headset (hw:2,0)
- Turn off "Overdub"
- Turn off "Software Playthrough"
- Sample Rate: 48kHz, 32 bit (digital tape)
- Export as FLAC
- Import it all into KDEnlive,
- Project template: HD 720p 30 fps
- Render with Destination: YouTube 1280x720
- Export audio
- Export metadata
- 2 pass (single pass produced corrupted videos)
For reference, this is the command that produced reasonable results with RecordMyDesktop:
recordmydesktop --width 1280 --height 720 -x 638 -y 4 --full-shots --fps 30 --channels 1 --device "hw:2,0" --v_quality 63 --s_quality 63 --v_bitrate 2000000 -o/home/richard/kdenlive/screen_capture/capture.ogv --delay 5
I hope that by taking the time to document the results of this research I save you hassle and headaches. If you know of better ways to accomplish these goals, please let me know either through a comment or an email.