Seeed Studio2026-11-08

Raspberry Pi 5 vs RK3588: Reproducible 4K H.264 Encoding Benchmark

Compare FFmpeg/libx264 software encoding on Raspberry Pi 5 and reComputer RK3588 with Rockchip MPP hardware encoding, using verified identical inputs, original run data, and an offline bilingual results dashboard.

BenchmarkRaspberry Pi 5RK3588VPUH.264FFmpegGitHub

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.

MetricRaspberry Pi 5: libx264RK3588: libx264RK3588: MPP H.264
Median elapsed time24.64 s20.04 s10.37 s
Throughput (300 / median elapsed time)12.18 fps14.97 fps28.93 fps
Median process CPU utilization327%357%54%
SSIM All against the uncompressed source0.9953760.9953780.991389
Representative output bitrate10.21 Mbps10.21 Mbps9.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

ItemConfiguration
Raspberry Pi 516 GB; Debian 13 Trixie; FFmpeg 7.1.5
reComputer RK3588 Devkit16 GB; Armbian 26.8.7 (Ubuntu 26.04); vendor kernel 6.1.172; Rockchip MPP 1.5.0-1 plugin
InputBig Buck Bunny Sunflower; 3840 × 2160; 30 fps; 300 frames; NV12
Clip selection10 seconds starting at 00:01:00
Timed input location/dev/shm/rkpi_real_4k_10s.nv12
Target encoding settingsH.264; 10 Mbps; GOP 60
libx264 settings-preset veryfast -threads 4 -maxrate 10M -bufsize 20M
MPP settingsmpph264enc 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.

bash
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.sh

The 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:

text
d1e3403d6886a5472c7261dfe07a4149b941d1d7bdfa92d46f181dff381f5fd7

Stop 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
bash scripts/01_cpu_encode.sh pi5
bash scripts/03_measure_quality.sh output/cpu_pi5_run2.mp4

On RK3588:

bash
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.mp4

Each 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.