LWN.net Logo

Screencasting Stars of the Linux World (Linux.com)

Nathan Willis looks at some tools for capturing full-motion video and audio of your desktop. "The leading screen recorders at present are recordMyDesktop and Istanbul. The feature sets are roughly comparable: both record to Theora-encoded video with Vorbis audio, both allow you to select just the portion of the screen you are interested in recording, and work in multiple desktop environments."
(Log in to post comments)

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 18, 2011 21:48 UTC (Mon) by taq (guest, #62595) [Link]

Broken link?

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 18, 2011 21:57 UTC (Mon) by corbet (editor, #1) [Link]

It does seem that they've pulled the article. Grumble. I'll withdraw this one too for now; maybe it will come back later...

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 19, 2011 1:41 UTC (Tue) by bronson (subscriber, #4806) [Link]

It resolves now. If only the web worked more like NNTP or P2P: if you hit publish, it's PUBLISHED.

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 18, 2011 21:59 UTC (Mon) by zelmo (✭ supporter ✭, #48367) [Link]

Hmm, Google has a cached version of Linux.com's tutorials page that shows it posted, but it's not coming up on the live site.

rfbproxy

Posted Jul 19, 2011 14:22 UTC (Tue) by endecotp (guest, #36428) [Link]

I have done this using a VNC server and rfbproxy. Here's a wrapper scipt that I use to output MPEG4:

#!/bin/bash

function usage() {
echo "Usage: vncrecord rec [server] <output.fbs>"
echo " vncrecord conv [quality] <input.fbs> <output.mp4>"
echo "First record to .fbs file; default server is localhost. Ctrl-C when done."
echo "Then convert the saved .fbs file to e.g. MPEG-4. Quality is ffmpeg's "
echo "-qscale; default is 5, smaller is better quality, range is 2 to 31."
exit 1
}

function record()
{
case $# in
1) SRV=localhost:0 ; OUT=$1 ;;
2) SRV=$1 ; OUT=$2 ;;
*) usage ;;
esac

rfbproxy --server="${SRV}" -rs "${OUT}"
}

function convert()
{
case $# in
2) Q=5; IN=$1; OUT=$2 ;;
3) Q=$1; IN=$2; OUT=$3 ;;
*) usage ;;
esac

rfbproxy -x "${IN}" |
ppmtoy4m -S 420jpeg |
ffmpeg -f yuv4mpegpipe -i - -qscale $Q -y "${OUT}"
}

case $# in
0) usage ;;
*) ;;
esac

OP=$1
shift

case "${OP}" in
"rec") record $* ;;
"conv") convert $* ;;
*) usage ;;
esac

But all of these options seem to only do the basic screen recording. The proprietary applications, like Camtasia, also have a post-recording video editing element where you can add titles, captions, zoom to follow the mouse pointer, fade between segments, add a commentary etc. etc. While some of this can be done with a general-purpose video editor, screencasting is sufficiently different that a more focused tool can be useful.

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 20, 2011 0:24 UTC (Wed) by Company (guest, #57006) [Link]

I need to work on marketing my software (or Nathan didn't look at Byzanz a lot). Byzanz these days happily records Theora or WebM video, complete with audio if you want to.
It has evolved just like its target and still does record a running X desktop to an animation suitable for presentation in a web browser.

Also, it might have been useful to note that gnome-shell has screen recording capabilities built-in.

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 20, 2011 8:12 UTC (Wed) by gervin23 (guest, #13977) [Link]

I just tried your tool in Ubuntu 11.04 (currently at 0.2.2) and yours is the first that recorded a fairly multimedia heavy screencast perfectly (using .flv). Well done and thanks!

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 20, 2011 1:01 UTC (Wed) by popey (subscriber, #53979) [Link]

I've found pretty much every screencasting app on Linux is flawed in one way or another. So I've resorted to using a script (below) to do what I want. It uses ffmpeg to record the audio from a microphone and video from the desktop as lossless aac/x264 encoded in an MKV container. The audio from the sound card is captured by parec via sox to a wav file.

Once recording is complete the audio from the video file is extracted, mixed with the audio from the sound card and added back to the video. It's neither elegant nor perfect, but works. The video created is large (given it's lossless) but makes for a good master from which smaller compressed versions can be made easily. The video opens fine in Pitivi on my desktop and is accepted by YouTube and others.

I record at 1280x720 but have used the same script to record at 1920x1080 successfully. My PC isn't very powerful (by todays standards).

Comments about how I suck at shell scripting welcome :D

#!/bin/bash
SCHOME="/home/$USER/Videos/`date +%Y`/`date +%m`/`date +%d`"
mkdir -p $SCHOME/archive
SCHMS="$SCHOME/`date +%H%M%S`"
MONITOR=$(pactl list | grep -A2 '^Source #' | grep 'Name: .*\.monitor$' | awk '{print $NF}' | tail -n1)
parec -d "$MONITOR" | sox -t raw -r 44100 -sLb 16 -c 2 - $SCHMS-internal.wav &
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x720 -i :0.0 -aq 100 -acodec libfaac -vcodec libx264 -vpre lossless_ultrafast -threads 0 -sameq $SCHMS-screencast.mkv
killall parec
ffmpeg -i $SCHMS-screencast.mkv -acodec pcm_s16le -ar 44100 -f wav $SCHMS-extractedaudio.wav
sox -m $SCHMS-internal.wav $SCHMS-extractedaudio.wav $SCHMS-mixedaudio.wav
ffmpeg -i $SCHMS-screencast.mkv -i $SCHMS-mixedaudio.wav -vcodec copy -acodec libfaac $SCHMS-final.mkv
mv $SCHMS-screencast.mkv $SCHMS-internal.wav $SCHMS-extractedaudio.wav $SCHMS-mixedaudio.wav $SCHOME/archive

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 24, 2011 14:20 UTC (Sun) by ballombe (subscriber, #9523) [Link]

Why not date +"%Y/%m/%d" ?

Screencasting Stars of the Linux World (Linux.com)

Posted Jul 24, 2011 23:07 UTC (Sun) by popey (subscriber, #53979) [Link]

No reason. :D

Screencasting with FFmpeg, jack_capture and Xephyr

Posted Jul 20, 2011 9:24 UTC (Wed) by AutoStatic (guest, #71722) [Link]

Another option: http://wiki.linuxaudio.org/wiki/screencasttutorial

Not satisfied with the quality of the screencasts made with recordMyDesktop I started looking for an alternative that might yield better results, especially the video part. The JACK support of recordMyDesktop is a big plus and quite solid too but recordMyDesktop converts all video to Theora only and this has proved inconvenient when uploaded to a webservice like YouTube. The video quality just degraded too much.
So I needed a different toolset. For the video part I chose FFmpeg for its unrivaled flexibility and support for input and output formats. FFmpeg also has JACK support but I found the JACK input client to be too xrun prone so for the audio part I chose jack_capture, a lightweight, flexible commandline driven recording tool.
To prevent webservices like YouTube having to downscale or upscale your videos, which deteriorates the quality of your videos drastically, I run the whole screencast session in a nested X server with the help of Xephyr.

Copyright © 2011, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds