a blog about things that I've been thinking hard about

How to Make High Quality Screencasts in Linux (and Put Them on the Internet)

2 October, 2013
HD screencasting: record, edit, upload

1. Sign up for Vimeo Plus, so you can upload 1280×720 HD videos.

2. Use SimpleScreenRecorder to record, at 1280×720 & 24 FPS.

3. Use Kdenlive to do simple editing and rendering.

4. Upload, tweak a couple of things, and let your audience watch ...


The word "quality" means many things in relation to a screencast, but this article is mostly about the technical quality of the audio and the video. (In relation to my own presentation style, we can generously describe that as "under development".)

More so than for other types of video, screencasts are sensitive to anything that spoils the visual quality, such as:

What we want is "pixel perfect".

Another thing we want is audio properly synced with video.

Linux versus other Operating Systems

I record my screencasts on Linux because, well, I use Linux.

Much of the advice I give here is applicable to other operating systems, but you might have to choose different software tools.

My own experience of trying to do video on a home computer (on a tight budget) is this:

First Choice: Where to Host Your Video

A screencast can only be considered high quality if it plays back as high quality when your audience is watching it.

So to achieve quality, you have to choose a hosting solution, and then work backwards from there.

After a certain amount of experimentation (which included making videos and hosting them directly on Amazon's S3), the hosting solution I settled on is the Vimeo Plus Plan.

This plan does cost actual money, but it's not that much. As of writing this, it costs about US$10 a month, which is a good option for trying it out, or about US$60 a year once you've decided you like it (note: "about" = "5 cents less than").

There is a free plan, but it only allows 1 HD video upload per week, and when you are making screencasts you will want all of your uploads to be HD. Also, the Plus plan lets you set the default resolution for any video to HD, the alternative being to tell your viewers that they have to manually choose HD.

And with the Plus plan you can upload 5G of videos a week, which is a lot of screencasts. And your uploads don't have to sit in a processing queue. And various other benefits – but it is the HD features which matter the most.

Second Choice: Screen Size

There are two choices of "HD" resolution at Vimeo: 1920×1080 and 1280×720.

There are a number of reasons why 1920×1080 is too large for screencasts, including:

So, choose 1280×720.

Third Choice: Screen-Recording Software

I have found just one Linux screen-recorder which works satisfactorily on my system, which is SimpleScreenRecorder by Maarten Baert.

(I mentioned audio/video sync above, and one thing that SimpleScreenRecorder seems to do better than other screen-recording options is keeping things in sync.)

On Ubuntu, SimpleScreenRecorder is one of those applications that has its own repository, so you follow the steps given on its web page to add the PPA to your system's list of repositories, and then you can do all the usual steps for installation and updating.

How to Record

The UI for SimpleScreenRecorder is relatively straightforward. The most important choice is what size area of screen to record. You want to produce a video at 1280×720, so you have to record a screen area of 1280×720.

If you happen to have a monitor and graphic card combo that displays at 1280×720, then possibly you can record fullscreen. My system doesn't have that, so I just set my display to 1920×1080 (which is my native screen resolution) and then I choose the option to record a screen rectangle.

When recording a screen rectangle, you need to choose exactly 1280 by 720, so don't bother trying to set the recording area with your mouse – instead type the numbers 1280 and 720 into the Width and Height fields, and choose suitable values for Left and Top. (0 and 150 work well for me, leaving just enough room for the SimpleScreenRecord UI on the right side of my screen.)

Then align your various target windows within the recording area.

Although SimpleScreenRecorder shows a border rectangle when you type in the rectangle position fields, this disappears as soon as you click on another window. So the process of arranging target windows will be a slightly fiddly process of moving them, then clicking in a position field to see the border again, then adjusting the target window, and so on. But once you have them positioned, you are good to go.

Select a framerate of 24, because that is what you want to upload to Vimeo. (25 and 30 are also available, but most screencasts look fine at 15, so there is no reason to choose a higher frame rate.)

Also, don't scale your video, and make sure you have chosen a suitable microphone input.

For video and audio options, a combination of Matroska (.mkv), H.264 and AAC with default options should work fine.

In the recording page, you can use the preview window as a double check on your target window positioning (but you might not want to show the preview while recording, if it loads your system more, or if it's a distaction).

I found it is good to enable the "recording hotkey", and Ctrl-P works well for me (easy to reach with one finger from each hand), as long as that's not a key combination you need to use in the application you are screencasting.

Screen Annotations

One thing you might want to do in your screencast is to draw things on the screen, like arrows, or perhaps rectangles, to point to and highlight things that you are talking about.

There are a couple of screen annotation tools that you can use with Linux:

In the default Ubuntu distribution, Annotate is already installed, and all you have to do is enable it from CompizConfig Settings Manager, and maybe choose some different mouse shortcuts (I prefer to avoid setting mouse shortcuts with a Super modifier, because I always end up triggering the file/application selector invoked when you press the Super key).

gromit-mpx is not provided as a Debian package, so it has to be built from source, but that is not too difficult if you follow the instructions.

The Annotate plugin does freehand drawing, rectangles and ellipses. gromit-mbx only does freehand drawing, but because it uses a hot-key to initiate drawing, you can draw with an unmodified left-mouse click-and-drag, which is not possible with Annotate (or it might be possible, but you get warned there will be a conflict with existing settings, and you really don't want to set something that permanently hijacks left-mouse click).

There is an older gromit application in the Ubuntu repositories, but this simply doesn't work with current Ubuntu distributions (gromit is quite old, so it might not work with any modern distribution), and it looks like gromit-mbx was created to overcome the issues with gromit.

Editing: Kdenlive

Once you have recorded the video, you can save it, and then you'll want to edit it and render it.

My own preference is to do everything as much as possible live. So I'm talking as I do whatever it is I'm screencasting. And if something is going to happen that doesn't want to be in the final video, I use the recording hotkey to pause, and to restart when it's ready to restart, which is slightly less work than working out which bit I have to delete when I'm editing the video at some later time.

For editing I use Kdenlive, which is available from the standard Ubuntu repository.

There is actually one annoying bug in this program, where the edits get messed up if you add a second video clip to the same video track as your first video clip. But for simple playing the video and deleting any bits that need to be deleted it works well enough for me. (There are also some annoying inconsistencies in how the "scissors" work, but you'll probably figure out how to deal with that.)

For rendering, you want to choose the correct output options. Luckily Kdenlive knows all about Vimeo video formats, so your options to choose are:

Then press "Render to file", and go off and do something else for a little while.


Uploading to your Vimeo account is fairly straighforward, but there are a few things to note:

The Last Mile, and Some Examples

The last part of quality control is what you can't control: how your audience chooses to watch your screencast.

If you go to my own Screencasts page, you will see a section on "Viewing Tips", which helps the audience to optimise their screencasting viewing experience. You might want to add some similar viewing tips to your own screencast listings.

Also, you can look at my screencasts to see some examples of screencasts created using the process describe in this article (except for "Learning Python: Variables", which I haven't yet redone at 1280×720).

Hosting Alternatives

I gave Vimeo as a best choice for hosting videos. But what about other hosting services?

My experience so far is there aren't any free options that are as good as Vimeo Plus, but, I have not tried every hosting option that is available. (And I will confess that, beyond a certain point, I prefer to just pay the money and get on with the actual business of making screencasts.)


YouTube lets you upload HD videos for free.

My experience of rendering, uploading and viewing on YouTube is:


You can see two of my screencasts uploaded to Screencast.com here.

Actual video quality of playback seems to be OK, but, I experience very long delays when a new video starts playing. Which if you want life to be pleasant for your viewers, is a bit of a deal-breaker.

A second difficulty, for me, is that uploads over 100MB require a separate upload utility, which is only available for Windows and Mac OX. So I cannot upload my Domkol demo video, because that is 118MB as a rendered file.

Update (5 Oct 2013): Thanks to Maarten Baert for some suggestions to improve this article. In particular that there is no reason to use 2-pass rendering for screencasts, and also that I should describe my experience with other hosting options.
Vote for or comment on this article on Reddit or Hacker News ...