rmpeg
A Rust media stack tested against FFmpeg.
Generated from local correctness and benchmark JSON at 2026-06-13T15:28:21Z.
Current Status
rmpeg is not FFmpeg-compatible yet. The MVP has WAV decode/hash plus probe-level MP3, FLAC, Ogg/Opus, Ogg/Vorbis, and MP4/H.264/AAC metadata.
| Area | Status |
|---|---|
| WAV/PCM metadata | 7/7 passing |
| WAV/PCM decode/hash | 7/7 passing |
| MP3 metadata | 1/1 passing |
| MP3 decode/hash | not implemented |
| FLAC metadata | 1/1 passing |
| FLAC decode/hash | not implemented |
| Ogg audio metadata | 2/2 passing |
| Ogg audio decode/hash | not implemented |
| MP4/MOV metadata | 1/1 passing |
| H.264/AAC metadata | 1/1 passing |
| H.264/AAC decode/hash | not implemented |
| Filters | not started |
Correctness
| Test | Kind | Status | Details |
|---|---|---|---|
| probe mp4 h264_aac_mp4 | probe-json | passed | |
| decode/hash mp4 h264_aac_mp4 | framemd5 | skipped | compressed decode/hash is not implemented |
| probe wav mono_silence_8k | probe-json | passed | |
| decode/hash wav mono_silence_8k | framemd5 | passed | |
| probe wav odd_chunks | probe-json | passed | |
| decode/hash wav odd_chunks | framemd5 | passed | |
| probe wav pcm_u8 | probe-json | passed | |
| decode/hash wav pcm_u8 | framemd5 | passed | |
| probe wav short_100ms | probe-json | passed | |
| decode/hash wav short_100ms | framemd5 | passed | |
| probe wav stereo_44k_sine | probe-json | passed | |
| decode/hash wav stereo_44k_sine | framemd5 | passed | |
| probe wav tiny | probe-json | passed | |
| decode/hash wav tiny | framemd5 | passed | |
| probe flac tone_flac | probe-json | passed | |
| decode/hash flac tone_flac | framemd5 | skipped | compressed decode/hash is not implemented |
| probe mp3 tone_mp3 | probe-json | passed | |
| decode/hash mp3 tone_mp3 | framemd5 | skipped | compressed decode/hash is not implemented |
| probe ogg tone_opus | probe-json | passed | |
| decode/hash ogg tone_opus | framemd5 | skipped | compressed decode/hash is not implemented |
| probe ogg tone_vorbis | probe-json | passed | |
| decode/hash ogg tone_vorbis | framemd5 | skipped | compressed decode/hash is not implemented |
| probe wav truncated_riff | probe-json | passed | both ffprobe and rmpeg-probe rejected input |
| decode/hash wav truncated_riff | framemd5 | passed | both ffmpeg and rmpeg rejected input |
FFmpeg Sample Corpus
This optional check syncs upstream FFmpeg FATE samples with FFmpeg's own make fate-rsync target, then probes every regular file with ffprobe and rmpeg-probe.
| Metric | Value |
|---|---|
| Generated | 2026-06-13T15:32:27Z |
| FFmpeg commit | 3773831 |
| Samples directory | /home/runner/work/rmpeg/rmpeg/.cache/ffmpeg/fate-suite |
| Total files checked | 2511 |
| ffprobe accepted | 2154 |
| rmpeg-probe accepted | 261 |
| Passed | 445 |
| Failed | 2066 |
| Errors | 0 |
| Sample | Status | Details |
|---|---|---|
| 012v/sample.avi | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| 4xm/TimeGatep01s01n01a02_2.4xm | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| 4xm/dracula.4xm | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| 4xm/version1.4xm | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| 4xm/version2.4xm | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| 8bps/full9iron-partial.mov | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| CCITT_fax/G31D.TIF | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| CCITT_fax/G31DS.TIF | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| CCITT_fax/G4.TIF | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| CCITT_fax/G4S.TIF | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| CSCD/sample_video.avi | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| KMVC/LOGO1.AVI | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| SIFF/INTRO_B.VB | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| VMnc/VS2k5DebugDemo-01-partial.avi | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| VMnc/test.avi | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: missing WAVE header |
| aa/bush.aa | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| aac/CT_DecoderCheck/File1.aac | failed | format: expected aac, got mp3; stream 0.codec_name: expected aac, got mp3; stream 0.duration_seconds: expected 7.756872, got 0.026122 |
| aac/CT_DecoderCheck/File1_fixed.aac | failed | format: expected aac, got mp3; stream 0.codec_name: expected aac, got mp3; stream 0.duration_seconds: expected 7.771926, got 0.026122 |
| aac/CT_DecoderCheck/File2.mp4 | failed | stream 0.sample_rate: expected 44100, got 22050 |
| aac/CT_DecoderCheck/license.txt | failed | ffprobe accepted input but rmpeg-probe rejected it: rmpeg-probe: invalid data: unsupported or unrecognized media format |
| aac/CT_DecoderCheck/sbr_i-ps_i.aac | failed | format: expected aac, got mp3; stream 0.codec_name: expected aac, got mp3; stream 0.duration_seconds: expected 7.771926, got 0.026122 |
| aac/CT_DecoderCheck/sbr_i-ps_i.mp4 | failed | stream 0.sample_rate: expected 44100, got 22050 |
| aac/Fd_2_c1_Ms_0x01.mp4 | failed | ffprobe rejected input but rmpeg-probe accepted it |
| aac/Fd_2_c1_Ms_0x01.s16 | failed | ffprobe rejected input but rmpeg-probe accepted it |
| aac/Fd_2_c1_Ms_0x04.mp4 | failed | ffprobe rejected input but rmpeg-probe accepted it |
Benchmarks
| Benchmark | FFmpeg mean | rmpeg mean | Relative | Status |
|---|---|---|---|---|
| probe tiny wav | 0.056298s | 0.000928s | rmpeg is 60.65x faster | measured |
| probe tone mp3 | 0.052949s | 0.000876s | rmpeg is 60.46x faster | measured |
| probe h264/aac mp4 | 0.053191s | 0.000873s | rmpeg is 60.93x faster | measured |
| probe tone flac | 0.050390s | 0.000866s | rmpeg is 58.20x faster | measured |
| probe tone opus | 0.049887s | 0.000882s | rmpeg is 56.59x faster | measured |
| probe tone vorbis | 0.051812s | 0.000862s | rmpeg is 60.09x faster | measured |
| framemd5 tiny wav | 0.049746s | 0.000855s | rmpeg is 58.20x faster | measured |
Supported Formats
Implemented: RIFF/WAVE with PCM signed 16-bit little-endian audio and PCM unsigned 8-bit audio, mono or stereo; MP3 frame-header metadata; FLAC STREAMINFO metadata; Ogg/Opus and Ogg/Vorbis header metadata; MP4/MOV track metadata for H.264 video and AAC audio.
Not implemented: MP3 decode, FLAC decode, Opus decode, Vorbis decode, AAC decode, H.264 decode, filters, seeking, resampling, remuxing, and most codec/container behavior.
Known Failures
- decode/hash mp4 h264_aac_mp4: skipped compressed decode/hash is not implemented
- decode/hash flac tone_flac: skipped compressed decode/hash is not implemented
- decode/hash mp3 tone_mp3: skipped compressed decode/hash is not implemented
- decode/hash ogg tone_opus: skipped compressed decode/hash is not implemented
- decode/hash ogg tone_vorbis: skipped compressed decode/hash is not implemented
Autoresearch Log
No autoresearch runs recorded yet.
How To Reproduce
cargo xtask samples
cargo xtask reference
cargo xtask fate-mini
cargo xtask ffmpeg-samples
cargo xtask bench
cargo xtask site