- It can record and encode 1080p 30fps video realtime with a single CPU core and supports as many threads as you want (default 2)
- It records audio and allows you to save different audio sources to different audio tracks. This lets you edit microphone commentary separately from system audio.
- With multiple config files you can have drastically different recording settings for different purposes.
- Complex filters allow anything from rescaling to overlaying webcam in realtime.
- Pass
--
as an option and the following options will be sent to the end of the FFmpeg command, for instance in order to stream to twitch.
- FFmpeg
Note: FFmpeg must be compiled with certain options depending on what you want to use.
Support for x11grab, libx264, filters, pthreads, pulseaudio. Give or take a few depending on your config
So if yours doesn't work, try compiling one yourself. - Bash
- By default it uses the Pulseaudio sound server but there's nothing stopping you from using something else.
- Compositing window managers tend to remove tearing.
- Place the script somewhere in
$PATH
(I use~/bin
) - Place the
screencap-rc
folder wherever you want it (I use~/.sc-rc
) - Open the script, scroll down to line 58 and set
config_folder
to the location of yourscreencap-rc
folder (In my case that would beconfig_folder="$HOME/.sr-rc"
. Don't leave a trailing slash. - Run the script with:
screencap [preset] [options] filename
- Press
q
to stop recording. - Create your own config files. The files in
screencap-rc
are heavily commented to show a few use cases.
usage: screencap [preset] [options] filename
PRESET:
Name of a file in the folder:
screencap-rc
or absolute path to equivalent file. Default is:
screencap-rc/default
OPTIONS:
-h, --help
Show this message
-r, --fps
Framerate in FPS
-i, --input
Input size in WxH or "window" to pick one with xwininfo
-o, --output
Output size.-1 is wildcard to maintain aspect ratio eg: `w=-1:h=720`
or `default` for no scaling
--blind
Disable video recording
--mute
Disable audio recording
-t, --threads
Number of threads to use
--
Stop screencap receiving input and pass all following parameters to command
In my opinion blender with gimp and audacity outperforms all other linux video editing software.
Pulseaudio has a weird tendency to mix up 48khz and 44.1khz, in such a way that FFmpeg flags can't even un-screw it up. To fix this problem, you can edit /etc/pulse/daemon.conf
and change or uncomment the default-sample-rate
and/or alternate-sample-rate
lines to get the sound back in sync.
Avconv's x11grab device is broken and doesn't support the -framerate
option - this means that any dropped frames will result in the output being shifted by a small amount of time and eventually desync from the sound. This is why this script no longer supports avconv.
Compiling a custom FFmpeg if your package manager doesn't have a good one is not the hardest thing in the world. That said I'm not going to offer a massive instruction manual here, but instead the basic steps I use to get the git repo, configure it, and build it on my system (debian sid).
apt-get update
apt-get install git build-essential yasm libcdio-paranoia-dev libx264-dev libvpx-dev libvorbis-dev libtheora-dev libspeex-dev libschroedinger-dev librtmp-dev libpulse-dev libopus-dev libopenjpeg-dev libopencv-dev libmp3lame-dev libgsm1-dev libgnutls-dev libfrei0r-ocaml-dev
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --arch=amd64 --enable-pthreads --enable-libopencv --enable-librtmp --enable-libopenjpeg --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-runtime-cpudetect --enable-libvorbis --enable-zlib --enable-swscale --enable-libcdio --enable-bzlib --enable-libdc1394 --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-libpulse --enable-vdpau --enable-libvpx --enable-gpl --enable-x11grab --enable-libx264 --enable-filters --enable-libzmq
make -j4
The binary can now be found at FFmpeg/ffmpeg