Here's a simple example of recording and encoding the OpenGL window(s) from an application. For more information see https://github.com/nullkey/glc/wiki. For recording videos of non-OpenGL windows, see VideoScreenshots.

Install glc

<!> First follow the Ubuntu steps under Other distributions at https://github.com/nullkey/glc/wiki/Install

Once you type

bash glc-build.sh

you'll be asked a series of questions; it's recommended to hit Enter at each prompt, taking the default answer.

<!> In case downloading the tarballs fails, you can try changing the script to download them from here

You should see some messages indicating installation, e.g.:

info  : Fetching sources...
info  : Unpacking sources...
info  : Building elfhacks...
info  : Building packetstream...
info  : Building glc...
info  : Installing elfhacks...
info  : Installing packetstream...
info  : Installing glc...
info  : Done :)
info  : You may need to add following lines to your .bashrc:
export PATH="${PATH}:/usr/bin"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib"
info  : If you want to remove glc, execute:
sudo rm \
/usr/lib/libglc-core.so* \
/usr/lib/libglc-capture.so* \
/usr/lib/libglc-play.so* \
/usr/lib/libglc-export.so* \
/usr/lib/libglc-hook.so* \
/usr/lib/libelfhacks.so* \
/usr/lib/libpacketstream.so* \
/usr/include/elfhacks.h \
/usr/include/packetstream.h \
/usr/bin/glc-capture \
/usr/bin/glc-play

Use glc to capture

Now, start the application with glc wrapping it:

glc-capture ./bin/nav_view

To start recording, press shift-F8. shift-F8 will also stop recording. GLC will by default record into a file named "application_name-pid-0.glc". Each time you start recording, it will append to that file. shift-F9 will record to a different file each time: "application_name-pid-[0-n].glc"

Use glc to playback

Now you can playback these files with the glc playback tool. If you want to try it:

glc-play <filename>.glc

Use glc to encode

To encode the .glc file to something else, like an mp4, you can use the encode.sh script that came with the glc source that was downloaded during the glc installation step. This script is not installed anywhere, so you'll have to find it in the glc source tree, which was laid down wherever you ran glc-build.sh. E.g., if you ran glc-build.sh from ~/Desktop:

~/Desktop/glc/scripts/encode.sh <filename>.glc -o <output_filename>.mp4

The resulting .mp4 file is playable by various software, including mplayer and vlc (on both Linux and OS X). It is not playable by Apple Quicktime Player.

If your .glc video file has multiple video streams (multiple video windows open up when you play it), you can specify the video stream number that you want to encode with the "-v NUM" option.

Note that you must install lame and mencoder for encoding. On Ubuntu, you can:

sudo apt-get install lame mencoder

Encoding to other formats

To encode video that can be played by Apple Quicktime and edited with iMovie, use glc-play together with mencoder and specify the Motion JPEG codec:

glc-play <filename>.glc -y 1 -o - | mencoder -demuxer y4m - -ovc lavc -lavcopts vcodec=mjpeg -o <output_filename>.avi

Or using ffmpeg:

glc-play test.glc -o - -y 1 | ffmpeg -i - -sameq -y video.mp4

You can read about more glc options here.

There are presumably other ways to invoke glc-play and/or mencoder to produce other video formats. If you figure out useful combinations, please document them here.

Alternate methods

Output to separate PNG files:

glc-play myMovie.glc -p 1 -o myMovie-%010d.png

Subsequent conversion of PNG files to MP4:

ffmpeg -sameq -i myMovie-%10d.png myMovie.mp4

Wiki: RecordingOpenGLAppsWithGLC (last edited 2012-12-03 11:00:44 by SebastianHoefer)