Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
wiki:screencasttutorial [2011/12/15 14:35] 151.29.137.72wiki:screencasttutorial [2013/06/02 15:45] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Screencasting with FFmpeg, jack_capture and Xephyr ======
 +
 +===== Introduction =====
 +
 +Not satisfied with the quality of the screencasts made with [[http://recordmydesktop.sourceforge.net/about.php|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 [[http://www.ffmpeg.org/|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 [[apps:all:jack_capture|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, you can optionally run the whole screencast session in a nested X server with the help of [[http://www.freedesktop.org/wiki/Software/Xephyr|Xephyr]]. 
 +
 +===== Requirements =====
 +
 +  * A recent version of FFmpeg compiled with support for the h.264 protocol
 +  * [[apps:all:jack_capture|jack_capture]]
 +  * Xephyr [optional]
 +  * A video editor, I use [[http://www.openshotvideo.com/|OpenShot]] or [[http://www.kdenlive.org/|kdenlive]] myself
 +  * A screen with a minimal horizontal resolution of 1280 pixels
 +
 +
 +===== Screencast script =====
 +
 +I use a simple script like this:
 +
 +<code>#!/bin/bash
 +
 +DATE=`date +%Y%m%d`
 +TIME=`date +%Hh%M`
 +
 +# Start screencast
 +xterm -e jack_capture -b 24 $HOME/Screencasts/screencast_audio_$DATE-$TIME.wav &
 +ffmpeg -an -f x11grab -r 30 -s 1280x720 -i 0:0 -vcodec libx264 -vpre lossless_ultrafast -threads 4 $HOME/Screencasts/screencast_video_$DATE-$TIME.mkv
 +
 +killall jack_capture</code>
 +
 +You might need to adjust the number of threads for the ffmpeg -threads parameter to match the number of cores of your CPU. If unsure, set it to 0, ffmpeg should then set the numbers of threads automatically. 
 +
 +jack_capture by default captures all the audio that is connected to system:ouput. If you want to be able to manually make connections to jack_capture with jack_connect, qjackctl or whatever, you have to pass it the -mc option (you need at least version 0.9.58 for this)
 +
 ===== Optional Xephyr script  ===== ===== Optional Xephyr script  =====
  
Line 17: Line 53:
 After you ran this Xephyr script, you should run the above screencast script, taking care of making the following changes to it:  After you ran this Xephyr script, you should run the above screencast script, taking care of making the following changes to it: 
  
- * add the line "export DISPLAY=:2.0" after the TIME line +  * add the line "export DISPLAY=:2.0" after the TIME line. 
- * change -i 0:0 ffmpeg option to -i :2  +  * change -i 0:0 ffmpeg option to -i :2 
- * add the -display 0:0 option to the xterm line (so it won't appear in your screencast)+  * add the -display 0:0 option to the xterm line (so it won't appear in your screencast).
  
 Within the Xephyr session I also use a [[http://gnome-look.org/content/show.php/Basic?content=126559|plain cursor theme without drop shadow]] because ffmpeg doesn't capture the drop shadow properly. As of [[http://git.ffmpeg.org/?p=ffmpeg;a=commit;h=191a50db964768ca4418bdf00b26159a77879b9c|FFmpeg revision 25690]] this has been fixed. Within the Xephyr session I also use a [[http://gnome-look.org/content/show.php/Basic?content=126559|plain cursor theme without drop shadow]] because ffmpeg doesn't capture the drop shadow properly. As of [[http://git.ffmpeg.org/?p=ffmpeg;a=commit;h=191a50db964768ca4418bdf00b26159a77879b9c|FFmpeg revision 25690]] this has been fixed.
  
 +===== Editing, rendering and uploading to a webservice =====
 +
 +Now you have two separate files, an .mkv and a .wav file and because jack_capture was started right after ffmpeg audio should be no more out of sync then just a few millisecs. You can now edit the audio and video parts to your liking:
 +
 +  * Edit the .wav file in Audacity or Rezound if necessary. I use some extra gain and compression if necessary.
 +  * Import the two files in OpenShot and crop start and end to your liking.
 +  * With VLC I made some stills from the video file and with Gimp I edited these to create the titling.
 +  * Create transitions, fade-ins and fade-outs to your liking with OpenShot.
 +
 +For rendering/exporting I use the following settings in OpenShot:
 +  * Video: 1280x720, 30 fps (this should match the settings of ffmpeg), mp4 videoformat, 40 Mb/s (Blu-ray quality), libx264 videocodec.
 +  * Audio: mp3 (libmp3lame), 256 Kb/s and 44.1 Khz sample rate.
 +
 +Now you can upload the resulting mp4 file to a webservice. The settings I've used will yield optimal results for YouTube.
 +
 +===== Examples =====
 +
 +[[http://www.youtube.com/watch?v=tusCeI1aQ4c|Tiny Tutorial: Vocoding in Qtractor]]
 +
 +[[http://www.youtube.com/watch?v=azj7OAzP_GI|The Infinite Repeat - Unaware of a Direction]]
 +
 +[[http://www.youtube.com/watch?v=peMR6Agc7Es|The Infinite Repeat - Money or Love (DJ AutoStatic Remix)]]
wiki/screencasttutorial.1323956131.txt.gz · Last modified: 2011/12/15 14:35 (external edit)