What are the optimal FFmpeg parameters for screen recording on Raspbian?

Which FFmpeg settings are best for screen recording on Raspbian in order to get crisp, fluid recordings and efficient use of system resources?
As a developer using a Raspberry Pi, I need to record my screen actions straight from Raspbian in order to create a teaching video. Given the limitations of Raspberry Pi’s hardware, I’m searching for a command-line solution that can effectively record videos of excellent quality.

1 Like

To conduct screen recording on Raspbian the official operating system for Raspberry Pi leveraging FFmpeg proves to be a highly effective approach. FFmpeg, known for its flexibility and wide-ranging capabilities in processing multimedia content, can be configured to perform screen recordings that are both high in quality and considerate of Raspberry Pi’s resource limitations. Here is the elaborated guide on configuring FFmpeg for optimal screen capture on Raspbian:

Installing FFmpeg

Before initiating screen recording, ensure that FFmpeg is properly installed on your Raspberry Pi. This can be achieved through the terminal with the following commands, which update the package lists and install FFmpeg:

sudo apt-get update

sudo apt-get install ffmpeg

This sets the foundation for executing screen recording commands.

Utilizing the Correct Screen Capture Technique

For capturing the Raspbian desktop, FFmpeg employs the x11grab option, targeted at the X11 display server, which Raspbian uses for its graphical interface:

ffmpeg -f x11grab -i :0.0 output.mp4

The -f x11grab flag specifies the use of X11 for screen capture, while -i :0.0 indicates the default display screen from which to capture.

Adjusting Frame Rate for Smooth Playback

The frame rate influences the smoothness of the playback. Modifying it with the -r parameter allows for a customized balance between video fluidity and the Raspberry Pi’s processing load:

ffmpeg -f x11grab -r 30 -i :0.0 output.mp4

Setting -r 30 establishes a frame rate of 30 frames per second, offering a smooth video experience that’s still manageable for the device.

Defining the Capture Area

Limiting the recording area with the -video_size option not only focuses the capture on relevant screen parts but also conserves processing resources:

ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0+50,50 output.mp4

Here, -s 1920x1080 dictates the size of the capture area, and +50,50 sets the starting position, optimizing resource use by avoiding full-screen capture when unnecessary.

Optimizing Output with Codec Choices

Selecting an appropriate codec and tuning its settings is pivotal for minimizing resource consumption while maintaining video quality. The H.264 codec, specified with -c:v libx264, is recommended due to its balance of compression efficiency and quality:

ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -c:v libx264 -preset veryfast -crf 25 output.mp4

The -preset veryfast option speeds up the encoding with minimal impact on quality, suitable for the Raspberry Pi’s capabilities and the -crf 25 parameter offers a good compromise between quality and file size, with lower numbers yielding higher quality at the expense of larger files.

Incorporating Audio Recording

To include audio in your screen recordings, the following parameters can be used, though capturing system audio on Raspbian might necessitate additional configurations for audio capture devices:

ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -f pulse -ac 2 -i default -c:v libx264 -preset veryfast -crf 25 -c:a aac -b:a 192k output.mp4

-f pulse -ac 2 -i default captures stereo audio using PulseAudio, which may require setup on Raspbian.

-c:a aac -b:a 192k specifies the use of the AAC audio codec with a bitrate of 192 kbps, ensuring clear audio quality.

By carefully configuring FFmpeg with these parameters, you can create screen recordings on Raspbian that are both high in quality and considerate of the Raspberry Pi’s hardware limitations. This approach ensures that your screen recordings are not only visually appealing but also smoothly executed, catering to both educational and professional use cases on the Raspberry Pi platform.