Skip to main content
Symphonia aims to be comparable to, or faster than, popular open-source C-based implementations. Currently, Symphonia’s decoders are generally ±15% the performance of FFmpeg, with many codecs significantly outperforming FFmpeg.

Benchmark Overview

Last Updated: February 3, 2023These benchmarks compare single-thread decoding performance of Symphonia against FFmpeg. It’s always a good idea to run your own benchmarks with your specific workload!
The benchmarks use Hyperfine with a minimum of 30 runs after 3 warmup runs. Symphonia is built with:
  • RUSTFLAGS="-C target-cpu=native"
  • SIMD optimizations enabled
  • Rust compiler version 1.67.0+

Performance Results

Intel Core i7-4790K (4C/8T @ 4.0 GHz)

CodecSymphonia (ms)FFmpeg (ms)Relative*
AAC-LC #1 (44 kHz, 260 kbps)148.8 ± 1.5123.5 ± 1.11.21
AAC-LC #2 (44 kHz, 260 kbps)131.0 ± 1.9109.8 ± 1.01.19
ADPCM IMA (44 kHz)905.0 ± 15.31095.6 ± 5.70.83
ADPCM MS (44 kHz)1095.3 ± 7.6972.3 ± 8.31.13
ALAC (44 kHz, 16 bit)426.7 ± 3.4586.7 ± 1.50.73
ALAC (96 kHz, 32 bit)1363.6 ± 5.21724.8 ± 3.90.79
FLAC (44 kHz, 16 bit)190.9 ± 1.0267.8 ± 1.30.71
FLAC (48 kHz, 24 bit)211.7 ± 0.8295.5 ± 0.90.72
FLAC (96 kHz, 24 bit)176.4 ± 1.4239.5 ± 1.00.74
MP1 (44 kHz, 192 kbps)91.9 ± 0.8202.0 ± 1.80.45
MP1 (44 kHz, 448 kbps)106.2 ± 0.9222.8 ± 1.30.48
MP2 (44 kHz, 128 kbps)207.1 ± 2.0346.1 ± 5.00.60
MP2 (44 kHz, 384 kbps)239.5 ± 2.7396.4 ± 3.60.60
MP3 (44 kHz, 128 kbps)262.2 ± 2.0253.0 ± 1.01.04
MP3 (44 kHz, 320 kbps)187.6 ± 1.5222.9 ± 1.10.84
Vorbis (44 kHz, ~256 kbps)317.6 ± 2.2302.9 ± 2.51.05
* Relative = Symphonia time ÷ FFmpeg time. Bold values indicate Symphonia is faster.

Apple M1 Pro (8C Performance + 2C Efficiency @ 3.2 GHz)

CodecSymphonia (ms)FFmpeg (ms)Relative*
AAC-LC #1 (44 kHz, 260 kbps)127.4 ± 0.6115.6 ± 0.71.10
AAC-LC #2 (44 kHz, 260 kbps)112.7 ± 0.3102.2 ± 0.51.10
ADPCM IMA (44 kHz)1191.3 ± 1.6789.4 ± 0.91.51
ADPCM MS (44 kHz)724.5 ± 1.81235.5 ± 6.00.59
ALAC (44 kHz, 16 bit)339.3 ± 2.6420.6 ± 1.20.81
ALAC (96 kHz, 32 bit)1079.5 ± 1.71403.2 ± 1.50.77
FLAC (44 kHz, 16 bit)170.8 ± 0.9267.7 ± 0.50.64
FLAC (48 kHz, 24 bit)179.2 ± 0.4349.6 ± 0.80.51
FLAC (96 kHz, 24 bit)155.2 ± 0.5274.4 ± 1.10.57
MP1 (44 kHz, 192 kbps)72.2 ± 0.3114.4 ± 0.70.63
MP1 (44 kHz, 448 kbps)83.2 ± 0.4130.5 ± 0.40.64
MP2 (44 kHz, 128 kbps)144.8 ± 0.4202.1 ± 0.50.72
MP2 (44 kHz, 384 kbps)177.0 ± 0.3230.8 ± 1.60.77
MP3 (44 kHz, 128 kbps)204.3 ± 0.5203.9 ± 0.61.00
MP3 (44 kHz, 320 kbps)150.2 ± 0.3186.5 ± 0.70.81
Vorbis (44 kHz, ~256 kbps)307.9 ± 0.6247.6 ± 0.61.24
* Relative = Symphonia time ÷ FFmpeg time. Bold values indicate Symphonia is faster.

Raspberry Pi 4B (4C Cortex-A72 @ 1.5 GHz)

CodecSymphonia (ms)FFmpeg (ms)Relative*
AAC-LC #1 (44 kHz, 260 kbps)566.6 ± 2.5446.8 ± 2.61.27
AAC-LC #2 (44 kHz, 260 kbps)502.8 ± 3.0401.7 ± 2.91.25
ADPCM IMA (44 kHz)3033.3 ± 16.92879.9 ± 5.81.05
ADPCM MS (44 kHz)2536.5 ± 5.92655.5 ± 7.10.96
ALAC (44 kHz, 16 bit)1227.2 ± 2.71512.9 ± 1.60.81
ALAC (96 kHz, 32 bit)3900.4 ± 13.84456.7 ± 5.70.88
FLAC (44 kHz, 16 bit)734.2 ± 2.6704.2 ± 2.01.04
FLAC (48 kHz, 24 bit)818.3 ± 2.3855.8 ± 2.50.96
FLAC (96 kHz, 24 bit)650.4 ± 1.8677.0 ± 2.00.96
MP1 (44 kHz, 192 kbps)428.2 ± 11.7514.9 ± 3.50.83
MP1 (44 kHz, 448 kbps)498.5 ± 6.5574.1 ± 7.40.87
MP2 (44 kHz, 128 kbps)796.8 ± 23.6879.9 ± 3.90.91
MP2 (44 kHz, 384 kbps)930.7 ± 6.61001.5 ± 19.00.93
MP3 (44 kHz, 128 kbps)964.4 ± 8.1899.5 ± 6.81.07
MP3 (44 kHz, 320 kbps)693.3 ± 8.0726.6 ± 3.80.95
Vorbis (44 kHz, ~256 kbps)1209.9 ± 3.01075.5 ± 6.91.12
* Relative = Symphonia time ÷ FFmpeg time. Bold values indicate Symphonia is faster.

Performance Analysis

Codec Performance Summary

Symphonia’s FLAC decoder consistently outperforms FFmpeg across all platforms, with performance improvements ranging from 29% to 49% faster.The decoder is particularly efficient on Apple Silicon, where it achieves nearly 2x the performance of FFmpeg for 48kHz 24-bit files.
Symphonia’s MPEG Layer I and II decoders show exceptional performance, running 40-55% faster than FFmpeg on most platforms.These decoders benefit significantly from Rust’s optimization capabilities and modern CPU features.
MP3 decoding is highly competitive, matching or slightly exceeding FFmpeg’s performance across platforms.On Apple M1, Symphonia matches FFmpeg exactly for 128kbps files and is 19% faster for 320kbps files.
ALAC decoding shows consistent 19-23% performance improvements over FFmpeg across different sample rates and bit depths.
AAC-LC decoding is currently 10-27% slower than FFmpeg depending on the platform.This is an area for potential optimization. Contributions are welcome!

Platform Considerations

  • x86-64 (Intel/AMD): Symphonia performs excellently on x86-64, with most codecs matching or exceeding FFmpeg
  • Apple Silicon (M1/M2): Outstanding performance, especially for FLAC and MPEG audio codecs
  • ARM (Raspberry Pi): Competitive performance even on resource-constrained devices
Performance varies significantly by codec and CPU architecture. The exact performance depends on:
  • Codec features used in the encoding
  • Rust compiler version (newer is generally better)
  • CPU architecture and features
  • SIMD optimization settings

SIMD Optimizations

At this time, SIMD optimizations are not enabled by default. Enabling SIMD support will pull in the rustfft dependency.

Available SIMD Features

Instruction SetFeature FlagPlatformDefault
SSEopt-simd-ssex86/x86-64No
AVXopt-simd-avxx86-64No
Neonopt-simd-neonARM/AArch64No

Enabling SIMD

Enable all SIMD optimizations:
symphonia = { version = "0.5", features = ["opt-simd"] }
Enable specific instruction sets:
symphonia = { version = "0.5", features = ["opt-simd-avx"] }
Use the opt-simd feature flag to enable all available SIMD optimizations for your target platform.

Build Optimizations

For maximum performance, build Symphonia with target-specific optimizations:
RUSTFLAGS="-C target-cpu=native" cargo build --release
This enables CPU-specific optimizations that can significantly improve performance on your target hardware.

Profile-Guided Optimization (PGO)

For even better performance, consider using Profile-Guided Optimization:
  1. Build with instrumentation
  2. Run with representative workload
  3. Rebuild with profiling data

Benchmark Limitations

These benchmarks are basic and test only a few files per codec. A more comprehensive benchmark suite would test hundreds of files with different encoding parameters.
Factors not fully covered:
  • Different encoding parameters exercise different code paths
  • Compiler version significantly impacts performance
  • Some files were used during decoder development and may be optimized for
  • Single-threaded decoding only (FFmpeg can use multiple threads for some codecs)

Running Your Own Benchmarks

To benchmark Symphonia yourself:
# Build symphonia-play in decode-only mode
RUSTFLAGS="-C target-cpu=native" cargo build --release -p symphonia-play

# Run with hyperfine
hyperfine --warmup 3 -m 30 './target/release/symphonia-play --decode-only audio.flac'
For more details, see the BENCHMARKS.md file in the repository.

Contributing Performance Improvements

If you identify performance bottlenecks or have optimization ideas:
  1. Profile the code to identify hotspots
  2. Run benchmarks before and after changes
  3. Test across multiple platforms if possible
  4. Submit a pull request with benchmark results
See the Contributing Guide for more information.

Build docs developers (and LLMs) love