Sunday, 7 September 2008

Making High Quality Screencasts

Ok, I think I have finally figured a good way how to make high quality screencasts. So I'll write here about it here, both so that I have a place to look to when I forgot and for my readers ;-)

Needed Software (Package Names)

subtitleeditor (or any other subtitle editor)

All the software is available in Fedora.

Recording the screencast

First, it's good to prepare what you are going to show so that you can record the screencast in one go. When you have decided what are you gonna show and how, open Applications -> Sound & Video -> gtk-recordMyDesktop. In the opened window you see a preview of your desktop in which you can select the area of the desktop you are going to record. If you are going to record just one application it might be useful to let it select the are for you by selecting a window you are going to record.

Set Video Quality to 100 (you want to record the screencast in highest possible quality, don't you) and if you don't want to record sound (which I do not) uncheck the check box to the left of Sound Quality. By clicking Save As you can select which the filename (and directory) to which the screencast will be saved.

Now, when you set everything, hide the window either by clicking ctrl+H or right-clicking on "record" icon in your notify are and selecting hide. Then you can start recording by left-clicking the record icon in your notify are. The icon will change to "stop". When recording, when you right-click on it the recording will pause (and the icon will change to "pause"), when you right-click on it once more it will resume. When you'll left-click on it the recording will stop and encoding (unless you encode on the fly, which can be set in settings) will start.

Once the encoding is finished you can close the gtk-recordMyDesktop and extract usefull data from it (since the .ogv file generated by it contains some skeleton track it renders it almost impossible to work with). We'll do that using oggSplit. Just open terminal, navigate to the directory you have the .ogv file in and run oggSplit <filename>.ogv. It will extract the video (and audio) track(s) into usable files. The file with video track will be named theora_*.ogg. Rename it to your liking.

Creating Subtitle Commentary

Now it's time to create subtitle commentary. You can do it with your favourite subtitle editor, the one I chose is subtitleeditor. I'll not delve into how can you create subtitles because it's pretty straightforward. Just bear in mind that you need the subtitles kept on the screen long enough so that the readers will be able to read them and they should better explain what is happening in the screencast.

Creating the subtitle commentary is good practice mostly because:

  • Deaf people can read it

  • It's easier to translate than spoken word

  • Text does not have "strange whatever accent"

Combining Things Together

Now the most important thing is to put things together in one file. Open Applications -> Sound & Video -> mkvmerge GUI. You'll probably need only the Input tabs but if you are creating some more sophisticated/long screencast the other tabs might come handy too. First add all source files (the ogg file with video, the file(s) with subtitle(s), file with audio, ...) - just click on Add and add anything you want.

In General Track Options you can set for each track various settings. For audio and subtitle tracks it is good practice to select a language it is in. It is also not a bad idea to add Track name to each track.

Finaly set output filename (ending with .mkv) and hit Start muxing and you are done.

Adding Translation

The very same way you put the things together in the previous step, you can also add other tracks to already finished Matroska file. But, in case you'd like to add new subtitle translation you'll probably need one of the subtitle file in the screencast first so that you won't have to do it all from the start.

First open Applications -> Sound & Video -> mkvinfo. In it open the screencast Matroska file you'd like to translate and look for tracks. If the Matroska file has subtitle track, then sooner or later you'll find a track which will have Track type: subtitles at ... See whats Track number of that track. Suppose it's 2. Now open terminal and run mkvextract tracks <filename>.mkv 2:<subtitle-filename>. It might look like this:

$ mkvextract tracks echo-add-new-icon.mkv 2:echo-add-new-icon.ass
Extracting track 2 with the CodecID 'S_TEXT/ASS' to the file 'echo-add-new-icon.ass'. Container format: SSA/ASS text subtitles
progress: 100%

Now translate the subtitles using your favourite subtitle editor save them into some file and add it to the original screencast using mkvmerge GUI tool.

Some Screencasts Created This Way

Originally I researched how to do high quality screencasts because I needed to create screencasts accompanying various Echo tutorials.

Here are some:


recordMyDesktop Homepage
oggvideotools Homepage
mkvtoolnix Homepage
Matroska Homepage
Theora Homepage
New high-quality totaly open (as in freedom) video compression format Dirac and its Schrodinger implementation (available in Fedora repositories)
Wikipedia article about Matroska container, OGG container, Theora video, Free Lossless Audio Codec (FLAC), Vorbis audio, Dirac/Schrodinger video.


Kevin Kofler said...

Kaffeine fails to read these files. :-( It can read Theora, of course, it works fine in a standard .ogg or .ogv file, but it doesn't like the Matroska .mkv. As far as I can tell, xine-lib doesn't support the Ogg formats in non-Ogg containers (and it doesn't currently support Dirac at all - except maybe through ffmpeg, but that doesn't currently support Dirac in Matroska nor Ogg containers).

The problem if you use anything out of the mainstream is that apps just can't handle it.

Anonymous said...

VLC can read the mkv format, but doesn't recognise the video codec.

Martin said...

Not good both for vlc and xine-lib. Gstreamer and mplayer is just fine with those. As for dirac, so far I was able to play it only with gstreamer (and it was really, really slow), but I guess its still new and it will get better audience in the future.

I think I'll file a bug against xine-lib, it should be able to handle it fine - it knows matroska (tested with mkv+h264 combo), it knows theora (in ogg), why it does not know the combination?

I wonder, can KDE4 use gstreamer as its backend? Lately it gives best results to me along with mplayer in that that it is able to play virtually everything (providing you have all the plugins from fedora and livna installed).

Dunno how much in linux, but in general matroska is much more used for video than ogg/ogm, I would not call it "out of the mainstream", though the combination of theora in matroska is not that much used...

Kevin Kofler said...

KDE 4's Phonon can use GStreamer, it's not the default though (i.e. if both phonon-backend-xine and phonon-backend-gstreamer are installed, KDE will pick the xine-lib one) and the output device selection isn't really integrated with the rest of Phonon (there's a setting for the "sink" to use, which is the API, e.g. alsasink, pulsesink etc., and the devices Phonon sees are then only the devices supported by that "sink") which means PulseAudio support is hit or miss. And Kaffeine hasn't been ported to KDE 4 and Phonon yet, it's a KDE 3 app using xine-lib directly. Dragon Player uses Phonon, but it has nowhere near the features Kaffeine has, it follows a more minimalistic design approach, almost like a GNOME app.

As for "out of the mainstream", I call putting Theora into anything other than an Ogg container like that. ;-) In theory, containers and codecs should be completely orthogonal, but in practice some combinations are rarely used and thus poorly supported.

Chan said...

If you are using wondows, DemoCreator would be a easy tool for you to make wonderful screencasts.

Adrian said...

Nice tutorial.