Watch on YouTube · Open interactive dashboard · Source repository
This project compares three video encoding paths: FFmpeg/libx264 on Raspberry Pi 5, FFmpeg/libx264 on the Seeed reComputer RK3588 Devkit, and GStreamer with Rockchip MPP hardware encoding on RK3588. Both boards have 16 GB RAM.
The source repository includes reproduction scripts, per-run CSV data, and a standalone English/Chinese HTML dashboard. Use it to examine the throughput, process CPU use, and output quality tradeoffs in this specific test.
Measured results
The following values come from the repository's summary CSV. Each encoding path was run three times with the same 300-frame input loaded into RAM.
| Metric | Raspberry Pi 5: libx264 | RK3588: libx264 | RK3588: MPP H.264 |
|---|---|---|---|
| Median elapsed time | 24.64 s | 20.04 s | 10.37 s |
| Throughput (300 / median elapsed time) | 12.18 fps | 14.97 fps | 28.93 fps |
| Median process CPU utilization | 327% | 357% | 54% |
| SSIM All against the uncompressed source | 0.995376 | 0.995378 | 0.991389 |
| Representative output bitrate | 10.21 Mbps | 10.21 Mbps | 9.70 Mbps |
In this setup, RK3588 MPP delivered about 2.38 times the throughput of Pi 5 libx264. The individual runs took 10.93, 10.37, and 9.86 seconds for MPP: two of the three exceeded the input clip's 10-second duration.
Test conditions
| Item | Configuration |
|---|---|
| Raspberry Pi 5 | 16 GB; Debian 13 Trixie; FFmpeg 7.1.5 |
| reComputer RK3588 Devkit | 16 GB; Armbian 26.8.7 (Ubuntu 26.04); vendor kernel 6.1.172; Rockchip MPP 1.5.0-1 plugin |
| Input | Big Buck Bunny Sunflower; 3840 × 2160; 30 fps; 300 frames; NV12 |
| Clip selection | 10 seconds starting at 00:01:00 |
| Timed input location | /dev/shm/rkpi_real_4k_10s.nv12 |
| Target encoding settings | H.264; 10 Mbps; GOP 60 |
| libx264 settings | -preset veryfast -threads 4 -maxrate 10M -bufsize 20M |
| MPP settings | mpph264enc rc-mode=cbr bps=10000000 gop=60 |
MPP is the Rockchip-specific path and is used only on RK3588. The Pi 5 path here uses software encoding.
Reproduce the benchmark
Prerequisites
Use a Debian/Ubuntu-like Linux environment with git, bash, wget, unzip, sha256sum, ffmpeg, ffprobe, and /usr/bin/time. The preparation script also uses standard utilities including stat, df, and cp. FFmpeg must provide the libx264 encoder and SSIM filter.
For RK3588 hardware encoding, install the appropriate Rockchip/Seeed GStreamer environment with gst-launch-1.0, the mpph264enc element, and working MPP drivers. The supplied MPP script invokes sudo; the measured image required elevated access to /dev/mpp_service.
The raw input occupies 3,732,480,000 bytes (3.48 GiB), with another copy in RAM. The upstream project recommends 16 GB RAM and about 4 GB free in /dev/shm. Allow disk capacity for the source ZIP, extracted MP4, raw input, and encoded outputs.
Prepare identical input on both boards
Run from a separate checkout on each device. The pinned revision matches the results documented above.
git clone https://github.com/Seeed-Projects/raspberrypi-rockchip_benchmark_lab.git
cd raspberrypi-rockchip_benchmark_lab
git checkout b7758d37bdc2b20b1cdf85acc25a94c349d9fc13
bash scripts/00_prepare_input.shThe preparation script downloads the Blender source ZIP, extracts the clip, checks its byte count and SHA-256, and copies the verified NV12 input into /dev/shm. The expected raw input SHA-256 is:
d1e3403d6886a5472c7261dfe07a4149b941d1d7bdfa92d46f181dff381f5fd7Stop if verification fails. Source extraction is preparation and must not be counted as encoding time.
Run the appropriate encoding path
On Raspberry Pi 5:
bash scripts/01_cpu_encode.sh pi5
bash scripts/03_measure_quality.sh output/cpu_pi5_run2.mp4On RK3588:
bash scripts/01_cpu_encode.sh rk3588
bash scripts/02_rk3588_mpp.sh
bash scripts/03_measure_quality.sh output/cpu_rk3588_run2.mp4
bash scripts/03_measure_quality.sh output/mpp_rk3588_run2.mp4Each encoding script performs three runs. Outputs are written under output/, with timing and quality logs under logs/. Check the exit status and output frame counts; each output should contain 300 frames. The quality script reports SSIM, bitrate, and decoded frame count against the verified raw input.
Avoid screen recording or simultaneous monitoring during timed runs: these can change the measurements. Keep downloaded footage and generated raw files out of Git.
Explore the dashboard and data
Download website/index.html using GitHub's raw-file download, or open it from your local checkout in a desktop browser. The dashboard works offline, switches between English and Chinese, and includes a 16:9 presentation mode. Its race animation replays measured median timings; it does not perform live encoding.
Limits and attribution
These three-run results cover a single animated clip. They do not establish performance for camera footage, surveillance workloads, video capture, HEVC decoding, AV1, or whole-device power. CPU frequency, cooling, firmware, kernel, and software versions can affect reproduction. SSIM is a computed similarity metric, not a human visual assessment.
The test source is Big Buck Bunny, Blender Foundation (2008), Sunflower 4K re-release, distributed under CC BY 3.0. The preparation script downloads the original Blender ZIP; the film is not included in the benchmark repository. Preserve the film's attribution when making derived presentations or videos.