---
title: "OneMedia speed rows, stage 0.3 (x64)"
url: https://recursiveai.org/onemedia/docs/bench-x64-0-3/
description: "The 0.3 speed run on x64 (AMD Ryzen 9 7950X3D, Linux): the mux, remux and tag-write rows (MP4 mux and remux, ID3, FLAC, MP4 ilst, WAV and Matroska tag writes), Matroska muxing, remux memory over 4 GiB and MakePlayable, each row against the bar."
version: "0.3.0-preview.2"
source: https://github.com/recursive-ai-oss/onemedia-csharp/blob/051a1afab3ead45b3deca647572d3a79253c71a1/docs/bench-results/0.3-x64.md
---

# OneMedia speed rows, stage 0.3 (x64)

Three publishable runs under the exclusive bench queue, one per filtered group, 3 repetitions (tools 3), run on the build of 2026-11-02 (main 33c568d plus the bench rows). Groups: A `mp4-mux`, `mp4-remux`, `mkv-mux`; B `tagw-id3`, `tagw-flac`, `tagw-ilst`, `tagw-riff`, `tagw-mkv`; C `remux-mem`, `playable`. Comparators: SharpMP4 0.3.2, TagLib# 2.3.0, ATL.NET 7.19. Method: [docs/bench.md](https://recursiveai.org/onemedia/docs/bench/).

## Against the bar

Bar: geometric mean of the ratios <= 1.00x and no file worse than 1.25x, against the fastest managed comparator per file.

| Row | Files with a ratio | Geomean | Worst | Verdict |
|---|---:|---:|---:|---|
| mp4-mux | 3/3 | 0.15× | 0.33× | at the bar |
| mp4-remux | 3/3 | 0.10× | 0.20× | at the bar |
| mkv-mux | 0/5 | - | - | no managed comparator, so the row passes (times are information) |
| tagw-id3 | 4/4 | 0.44× | 0.48× | at the bar |
| tagw-flac | 3/3 | 0.41× | 0.48× | at the bar |
| tagw-ilst | 2/2 | 0.53× | 0.56× | at the bar |
| tagw-riff | 3/3 | 0.52× | 0.60× | at the bar |
| tagw-mkv | 1/2 | 0.99× | 0.99× | at the bar |
| remux-mem | 0/2 | - | - | no managed comparator, so the row passes (times are information) |
| playable | 0/1 | - | - | no managed comparator, so the row passes (times are information) |

Notes

- Each group ran as its own job under the exclusive benchmark queue, alone on the machine. Load before/during/after is in each group's header below; the load average also counts the shell steps around the run.
- Tag-write rows edit the same four common fields (title, artist, album, comment) of a file held in memory; method and the difference in work per implementation are in [docs/bench.md](https://recursiveai.org/onemedia/docs/bench/). The ratio is against TagLib#, the fastest managed comparator on every file here; ATL.NET is 1.2x to 18x slower than TagLib# (its ratio column), least on WAV and most on APE-tagged MP3.
- **`tagw-mkv` is not a comparison of breadth**: neither comparator is a Matroska writer in practice. ATL.NET fails on both files (NullReferenceException) and TagLib# fails on `test1.mkv` ("Invalid EBML format"), so the row has one file, `h264-two-audio-tags.mkv`, where TagLib# reads and writes it. The ratio there is 0.99x (OneMedia 121.8 us, TagLib# 123.4 us) and the bar is met on this machine.
- Rows `mkv-mux`, `remux-mem` and `playable` have no managed comparator (no managed Matroska writer; no managed remuxer), so they pass; the times next to ffmpeg 7.0.2 and mkvmerge 103.0 are information. mkvmerge exits 1 on these files (warnings about the input) and its time is still the whole run.
- `remux-mem`: OneMedia remuxing the two files over 4 GiB (a 4.08 GiB MP4 with the movie box at the end, a 4.14 GiB Matroska file) into MP4 and Matroska on disk peaks at 62 to 95 MiB resident, process start-up included (baseline about 29 MiB); ffmpeg `-c copy` to Matroska peaks at 31 MiB. Allocation per run is 2 to 25 MiB.
- `playable` (MakePlayable for the generic MP4 profile on a 0.2 MiB Matroska file) takes 160 ms here against 7.6 ms for ffmpeg (information). An indicative run on the same machine of the build before the writer fixes took 9.6 ms; the difference is in what the new save path does (flushing the temporary file to disk before the rename), which a 0.2 MiB file notices and a large one does not. It is reported, not tuned.


# Group A: mp4-mux, mp4-remux, mkv-mux

## Run 2026-11-02 04:44Z

- Machine: AMD Ryzen 9 7950X3D 16-Core Processor; 32 logical cores; Linux Mint 22.3 X64
- ISA: sse4.2 avx2 bmi2 avx512f avx512bw
- Storage of the corpus: /dev/nvme0n1p4; every file is read once before its rows, so it is in the page cache for all of them
- .NET: 10.0.13 (.NET 10.0.13)
- Load average (1 min): before 2.66; during mean 2.26, max 2.66 over 10 samples at 5 s; after 1.88
- Elapsed: 0.8 min; repetitions 3 (managed), 3 (tools); files over 1 GiB get one warm-up run and 3 samples of one run each, and tools once
- Packages as restored: SharpMP4 0.3.2; RecursiveAI.OneAudio 1.6.1; MetadataExtractor 2.9.3; TagLibSharp 2.3.0.0; z440.atl.core 7.19; Matroska 0.0.12
- Tools: ffmpeg version 7.0.2-static https://johnvansickle.com/ffmpeg/  Copyrig; MP4Box - GPAC version 26.07-rev0-ga07cbfff-master; mkvmerge v103.0 ('The Darkness') 64-bit; MediaInfo MediaInfo Command line,; ExifTool 13.60

Ratio is OneMedia's median over the fastest managed comparator's median on the same file (below 1.00× is faster). Peak is the process's peak resident set; Baseline is its resident set before any work, so Peak − Baseline is what the work added.

## mp4-mux: MP4: write the first AAC track's frames from memory to an MP4 in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mp4/h264-aac.mp4 | 0.2 MiB | OneMedia | 42.0 µs | 0.08× | 1.0 MiB | 5639.4 B | 189 | 0.0 | - | 48.0 | 28.9 | cold first run 41.29 ms |
| generated/mp4/h264-aac.mp4 | 0.2 MiB | OneMedia, movie box last | 40.5 µs | 0.08× | 1.0 MiB | 5610.2 B | 189 | 0.0 | - | 47.7 | 29.0 | cold first run 39.82 ms |
| generated/mp4/h264-aac.mp4 | 0.2 MiB | SharpMP4 | 495.0 µs | 1.00× | 1.4 MiB | 8010.0 B | 189 | 0.0 | - | 42.9 | 29.1 | cold first run 37.65 ms |
| samples/MPEG-4/video.mp4 | 26.6 MiB | OneMedia | 741.7 µs | 0.12× | 3.0 MiB | 439.3 B | 7200 | 2.0 | - | 102.9 | 28.9 | cold first run 42.90 ms |
| samples/MPEG-4/video.mp4 | 26.6 MiB | OneMedia, movie box last | 988.0 µs | 0.15× | 3.0 MiB | 438.5 B | 7200 | 2.0 | - | 58.3 | 28.8 | cold first run 41.34 ms |
| samples/MPEG-4/video.mp4 | 26.6 MiB | SharpMP4 | 6.42 ms | 1.00× | 17.5 MiB | 2550.9 B | 7200 | 2.0 | - | 92.6 | 28.9 | cold first run 60.21 ms |
| generated/bench/frag-bbb-1080p.mp4 | 691.5 MiB | OneMedia | 21.09 ms | 0.33× | 63.0 MiB | 2363.3 B | 27960 | 31.2 | - | 412.1 | 28.9 | cold first run 120.39 ms |
| generated/bench/frag-bbb-1080p.mp4 | 691.5 MiB | OneMedia, movie box last | 14.44 ms | 0.23× | 63.0 MiB | 2363.1 B | 27960 | 31.2 | - | 364.1 | 29.1 | cold first run 102.55 ms |
| generated/bench/frag-bbb-1080p.mp4 | 691.5 MiB | SharpMP4 | 64.02 ms | 1.00× | 103.7 MiB | 3889.9 B | 27960 | 31.3 | - | 400.2 | 28.9 | cold first run 187.77 ms |

## mp4-remux: MP4: read the first AAC track from a file and write it as an MP4 in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mp4/h264-aac.mp4 | 0.2 MiB | OneMedia | 147.8 µs | 0.07× | 1.1 MiB | 6350.6 B | 189 | 0.0 | - | 46.0 | 28.9 | cold first run 55.53 ms |
| generated/mp4/h264-aac.mp4 | 0.2 MiB | SharpMP4 | 1.99 ms | 1.00× | 2.6 MiB | 14686.9 B | 189 | 0.0 | - | 62.1 | 28.9 | cold first run 77.99 ms |
| samples/MPEG-4/video.mp4 | 26.6 MiB | OneMedia | 1.56 ms | 0.07× | 3.2 MiB | 464.2 B | 7200 | 2.0 | - | 77.4 | 28.8 | cold first run 61.74 ms |
| samples/MPEG-4/video.mp4 | 26.6 MiB | SharpMP4 | 22.59 ms | 1.00× | 34.7 MiB | 5052.2 B | 7200 | 2.0 | - | 107.3 | 29.0 | cold first run 126.81 ms |
| generated/bench/frag-bbb-1080p.mp4 | 691.5 MiB | OneMedia | 28.11 ms | 0.20× | 63.1 MiB | 2368.1 B | 27960 | 31.2 | - | 193.7 | 29.0 | cold first run 126.67 ms |
| generated/bench/frag-bbb-1080p.mp4 | 691.5 MiB | SharpMP4 | 141.52 ms | 1.00× | 243.3 MiB | 9123.1 B | 27960 | 31.3 | - | 406.4 | 28.9 | cold first run 388.05 ms |

Reference tools, run as processes (wall time including start-up, peak resident set); information only:

| File | Tool | Wall median | Wall min – max | Peak MiB | Note |
|---|---|---:|---:|---:|---|
| generated/bench/frag-bbb-1080p.mp4 | ffmpeg -c copy -map 0:a:0 -f mp4 | 104.75 ms | 104.51 ms – 119.40 ms | 51.7 |  |
| generated/mp4/h264-aac.mp4 | ffmpeg -c copy -map 0:a:0 -f mp4 | 6.47 ms | 5.72 ms – 6.51 ms | 17.5 |  |
| samples/MPEG-4/video.mp4 | ffmpeg -c copy -map 0:a:0 -f mp4 | 28.80 ms | 22.34 ms – 32.66 ms | 17.8 |  |

## mkv-mux: Matroska/WebM: read every packet and write it to a new Matroska file (no managed Matroska writer to compare with)

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mkv/h264-aac.mkv | 0.2 MiB | OneMedia | 154.9 µs | - | 1.3 MiB | 4334.2 B | 309 | 0.2 | - | 74.1 | 29.0 | cold first run 39.88 ms |
| matroska-test-files/test1.mkv | 22.3 MiB | OneMedia | 5.00 ms | - | 9.1 MiB | 1671.9 B | 5735 | 22.2 | - | 91.8 | 29.0 | cold first run 54.95 ms |
| matroska-test-files/test5.mkv | 30.3 MiB | OneMedia | 4.72 ms | - | 5.0 MiB | 1231.9 B | 4298 | 30.3 | - | 59.7 | 28.9 | cold first run 56.18 ms |
| blender/Sintel.2010.1080p.mkv | 1.10 GiB | OneMedia | 137.26 ms | - | 33.2 MiB | 705.1 B | 49323 | 1125.2 | - | 82.3 | 28.9 | cold first run 255.35 ms |
| blender/tears_of_steel_1080p.webm | 544.9 MiB | OneMedia | 73.66 ms | - | 33.3 MiB | 436.9 B | 80000 | 544.6 | - | 99.0 | 29.0 | cold first run 185.32 ms |

Reference tools, run as processes (wall time including start-up, peak resident set); information only:

| File | Tool | Wall median | Wall min – max | Peak MiB | Note |
|---|---|---:|---:|---:|---|
| blender/Sintel.2010.1080p.mkv | ffmpeg -c copy -f matroska | 979.76 ms | 979.76 ms – 979.76 ms | 47.8 |  |
| blender/Sintel.2010.1080p.mkv | mkvmerge | 395.90 ms | 395.90 ms – 395.90 ms | 73.6 | exit 1 |
| blender/tears_of_steel_1080p.webm | ffmpeg -c copy -f matroska | 255.02 ms | 226.06 ms – 271.68 ms | 19.7 |  |
| blender/tears_of_steel_1080p.webm | mkvmerge | 216.85 ms | 215.27 ms – 221.76 ms | 46.0 | exit 1 |
| generated/mkv/h264-aac.mkv | ffmpeg -c copy -f matroska | 6.90 ms | 6.86 ms – 7.45 ms | 17.6 |  |
| generated/mkv/h264-aac.mkv | mkvmerge | 23.27 ms | 21.61 ms – 23.54 ms | 20.4 | exit 1 |
| matroska-test-files/test1.mkv | ffmpeg -c copy -f matroska | 45.93 ms | 45.06 ms – 48.13 ms | 16.6 |  |
| matroska-test-files/test1.mkv | mkvmerge | 48.57 ms | 47.16 ms – 48.58 ms | 48.4 | exit 1 |
| matroska-test-files/test5.mkv | ffmpeg -c copy -f matroska | 62.40 ms | 58.20 ms – 67.82 ms | 26.5 |  |
| matroska-test-files/test5.mkv | mkvmerge | 58.83 ms | 57.71 ms – 62.58 ms | 65.8 | exit 1 |

# Group B: tagw-id3, tagw-flac, tagw-ilst, tagw-riff, tagw-mkv

## Run 2026-11-02 04:45Z

- Machine: AMD Ryzen 9 7950X3D 16-Core Processor; 32 logical cores; Linux Mint 22.3 X64
- ISA: sse4.2 avx2 bmi2 avx512f avx512bw
- Storage of the corpus: /dev/nvme0n1p4; every file is read once before its rows, so it is in the page cache for all of them
- .NET: 10.0.13 (.NET 10.0.13)
- Load average (1 min): before 1.73; during mean 1.45, max 1.73 over 14 samples at 5 s; after 1.30
- Elapsed: 1.1 min; repetitions 3 (managed), 3 (tools); files over 1 GiB get one warm-up run and 3 samples of one run each, and tools once
- Packages as restored: SharpMP4 0.3.2; RecursiveAI.OneAudio 1.6.1; MetadataExtractor 2.9.3; TagLibSharp 2.3.0.0; z440.atl.core 7.19; Matroska 0.0.12
- Tools: ffmpeg version 7.0.2-static https://johnvansickle.com/ffmpeg/  Copyrig; MP4Box - GPAC version 26.07-rev0-ga07cbfff-master; mkvmerge v103.0 ('The Darkness') 64-bit; MediaInfo MediaInfo Command line,; ExifTool 13.60

Ratio is OneMedia's median over the fastest managed comparator's median on the same file (below 1.00× is faster). Peak is the process's peak resident set; Baseline is its resident set before any work, so Peak − Baseline is what the work added.

## tagw-id3: MP3: change title, artist, album and comment; the edited file in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/audio-es/tagged/id3v24-basic.mp3 | 0.0 MiB | OneMedia | 10.0 µs | 0.43× | 77.8 KiB | 79656.0 B | 1 | - | - | 99.3 | 29.0 | cold first run 30.71 ms |
| generated/audio-es/tagged/id3v24-basic.mp3 | 0.0 MiB | ATL.NET | 172.2 µs | 7.43× | 936.6 KiB | 959093.2 B | 1 | - | - | 98.8 | 28.9 | cold first run 53.18 ms |
| generated/audio-es/tagged/id3v24-basic.mp3 | 0.0 MiB | TagLib# | 23.2 µs | 1.00× | 140.5 KiB | 143834.0 B | 1 | - | - | 94.2 | 29.0 | fastest comparator; cold first run 22.00 ms |
| generated/audio-es/tagged/id3v23-and-v1.mp3 | 0.0 MiB | OneMedia | 10.6 µs | 0.48× | 79.4 KiB | 81256.0 B | 1 | - | - | 99.2 | 28.9 | cold first run 27.95 ms |
| generated/audio-es/tagged/id3v23-and-v1.mp3 | 0.0 MiB | ATL.NET | 201.7 µs | 9.22× | 1.0 MiB | 1073598.0 B | 1 | - | - | 99.1 | 29.0 | cold first run 60.17 ms |
| generated/audio-es/tagged/id3v23-and-v1.mp3 | 0.0 MiB | TagLib# | 21.9 µs | 1.00× | 137.9 KiB | 141200.0 B | 1 | - | - | 94.3 | 28.9 | fastest comparator; cold first run 18.22 ms |
| generated/audio-es/tagged/id3v22-basic.mp3 | 0.0 MiB | OneMedia | 10.8 µs | 0.42× | 80.3 KiB | 82184.0 B | 1 | - | - | 98.3 | 28.8 | cold first run 27.74 ms |
| generated/audio-es/tagged/id3v22-basic.mp3 | 0.0 MiB | ATL.NET | 203.9 µs | 7.87× | 935.8 KiB | 958301.3 B | 1 | - | - | 98.4 | 28.9 | cold first run 56.76 ms |
| generated/audio-es/tagged/id3v22-basic.mp3 | 0.0 MiB | TagLib# | 25.9 µs | 1.00× | 138.2 KiB | 141554.0 B | 1 | - | - | 94.4 | 29.0 | fastest comparator; cold first run 22.05 ms |
| generated/audio-es/tagged/apev2-only.mp3 | 0.0 MiB | OneMedia | 7.9 µs | 0.45× | 67.6 KiB | 69216.0 B | 1 | - | - | 95.5 | 28.9 | cold first run 28.38 ms |
| generated/audio-es/tagged/apev2-only.mp3 | 0.0 MiB | ATL.NET | 314.9 µs | 17.93× | 1.0 MiB | 1083776.1 B | 1 | - | - | 93.0 | 29.0 | cold first run 55.52 ms |
| generated/audio-es/tagged/apev2-only.mp3 | 0.0 MiB | TagLib# | 17.6 µs | 1.00× | 116.8 KiB | 119626.0 B | 1 | - | - | 94.2 | 29.0 | fastest comparator; cold first run 21.41 ms |

## tagw-flac: FLAC: change title, artist, album and comment; the edited file in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/xiph-flv/flac/tags.flac | 0.1 MiB | OneMedia | 6.3 µs | 0.48× | 70.3 KiB | 72024.0 B | 1 | - | - | 91.5 | 28.9 | cold first run 19.48 ms |
| generated/xiph-flv/flac/tags.flac | 0.1 MiB | ATL.NET | 135.9 µs | 10.37× | 783.3 KiB | 802068.2 B | 1 | - | - | 99.0 | 28.9 | cold first run 48.78 ms |
| generated/xiph-flv/flac/tags.flac | 0.1 MiB | TagLib# | 13.1 µs | 1.00× | 144.1 KiB | 147560.0 B | 1 | - | - | 95.4 | 28.9 | fastest comparator; cold first run 10.72 ms |
| generated/xiph-flv/tagvar/flac-cover-tags.flac | 0.1 MiB | OneMedia | 5.9 µs | 0.34× | 75.3 KiB | 77144.0 B | 1 | - | - | 91.7 | 29.0 | cold first run 19.59 ms |
| generated/xiph-flv/tagvar/flac-cover-tags.flac | 0.1 MiB | ATL.NET | 248.5 µs | 14.35× | 940.0 KiB | 962589.0 B | 1 | - | - | 95.2 | 28.9 | cold first run 51.69 ms |
| generated/xiph-flv/tagvar/flac-cover-tags.flac | 0.1 MiB | TagLib# | 17.3 µs | 1.00× | 239.9 KiB | 245705.8 B | 1 | - | - | 96.4 | 29.0 | fastest comparator; cold first run 11.36 ms |
| generated/xiph-flv/tagvar/flac-rich.flac | 0.1 MiB | OneMedia | 6.8 µs | 0.44× | 73.0 KiB | 74744.0 B | 1 | - | - | 92.8 | 28.9 | cold first run 21.23 ms |
| generated/xiph-flv/tagvar/flac-rich.flac | 0.1 MiB | ATL.NET | 165.9 µs | 10.63× | 814.6 KiB | 834154.6 B | 1 | - | - | 96.0 | 29.0 | cold first run 50.32 ms |
| generated/xiph-flv/tagvar/flac-rich.flac | 0.1 MiB | TagLib# | 15.6 µs | 1.00× | 151.0 KiB | 154640.0 B | 1 | - | - | 95.7 | 28.9 | fastest comparator; cold first run 10.88 ms |

## tagw-ilst: MP4/M4A: change title, artist, album and comment in `ilst`; the edited file in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mp4/h264-aac-tags.mp4 | 0.2 MiB | OneMedia | 82.9 µs | 0.56× | 367.9 KiB | 376760.0 B | 1 | - | - | 47.3 | 28.9 | cold first run 26.78 ms |
| generated/mp4/h264-aac-tags.mp4 | 0.2 MiB | ATL.NET | 1.40 ms | 9.56× | 1.9 MiB | 2027339.7 B | 1 | - | - | 76.0 | 29.0 | cold first run 61.55 ms |
| generated/mp4/h264-aac-tags.mp4 | 0.2 MiB | TagLib# | 146.7 µs | 1.00× | 414.0 KiB | 423983.5 B | 1 | - | - | 44.4 | 29.0 | fastest comparator; cold first run 13.74 ms |
| generated/editlist/audio-aac-priming.m4a | 0.0 MiB | OneMedia | 9.7 µs | 0.49× | 139.4 KiB | 142744.0 B | 1 | - | - | 94.9 | 29.1 | cold first run 26.20 ms |
| generated/editlist/audio-aac-priming.m4a | 0.0 MiB | ATL.NET | 203.1 µs | 10.34× | 1.1 MiB | 1102430.1 B | 1 | - | - | 97.4 | 28.8 | cold first run 64.39 ms |
| generated/editlist/audio-aac-priming.m4a | 0.0 MiB | TagLib# | 19.6 µs | 1.00× | 142.3 KiB | 145712.0 B | 1 | - | - | 95.2 | 29.0 | fastest comparator; cold first run 13.27 ms |

## tagw-riff: WAV: change `LIST INFO` title, artist, album and comment; the edited file in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/pcm/tagged-wav-info.wav | 0.5 MiB | OneMedia | 161.7 µs | 0.60× | 533.0 KiB | 545768.0 B | 1 | - | - | 45.8 | 28.8 | cold first run 22.75 ms |
| generated/pcm/tagged-wav-info.wav | 0.5 MiB | ATL.NET | 339.7 µs | 1.26× | 1.1 MiB | 1181619.9 B | 1 | - | - | 46.0 | 28.9 | cold first run 50.94 ms |
| generated/pcm/tagged-wav-info.wav | 0.5 MiB | TagLib# | 269.5 µs | 1.00× | 582.8 KiB | 596757.3 B | 1 | - | - | 42.0 | 29.0 | fastest comparator; cold first run 22.03 ms |
| generated/pcm/tagged-wav-bext.wav | 0.8 MiB | OneMedia | 74.2 µs | 0.41× | 863.7 KiB | 884433.2 B | 1 | - | - | 55.4 | 28.9 | cold first run 24.00 ms |
| generated/pcm/tagged-wav-bext.wav | 0.8 MiB | ATL.NET | 610.1 µs | 3.34× | 1.8 MiB | 1902426.8 B | 1 | - | - | 89.9 | 29.0 | cold first run 55.47 ms |
| generated/pcm/tagged-wav-bext.wav | 0.8 MiB | TagLib# | 182.8 µs | 1.00× | 911.0 KiB | 932903.4 B | 1 | - | - | 46.1 | 29.0 | fastest comparator; cold first run 22.23 ms |
| generated/pcm/tagged-wav-id3.wav | 0.5 MiB | OneMedia | 163.0 µs | 0.59× | 533.0 KiB | 545768.0 B | 1 | - | - | 45.5 | 28.9 | cold first run 22.37 ms |
| generated/pcm/tagged-wav-id3.wav | 0.5 MiB | ATL.NET | 335.3 µs | 1.21× | 1.1 MiB | 1181619.9 B | 1 | - | - | 46.2 | 29.0 | cold first run 51.70 ms |
| generated/pcm/tagged-wav-id3.wav | 0.5 MiB | TagLib# | 276.8 µs | 1.00× | 582.8 KiB | 596751.4 B | 1 | - | - | 40.8 | 28.9 | fastest comparator; cold first run 20.71 ms |

## tagw-mkv: Matroska: change title, artist, album and comment; the edited file in memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mkv/h264-two-audio-tags.mkv | 0.2 MiB | OneMedia | 121.8 µs | 0.99× | 378.3 KiB | 387408.0 B | 1 | - | - | 51.3 | 28.9 | cold first run 46.71 ms |
| generated/mkv/h264-two-audio-tags.mkv | 0.2 MiB | ATL.NET | fail | - | - | - | - | - | - | 37.3 | 29.0 | NullReferenceException: Object reference not set to an instance of an object. |
| generated/mkv/h264-two-audio-tags.mkv | 0.2 MiB | TagLib# | 123.4 µs | 1.00× | 323.1 KiB | 330811.5 B | 1 | - | - | 40.2 | 29.0 | cold first run 10.77 ms |
| matroska-test-files/test1.mkv | 22.3 MiB | OneMedia | 2.71 ms | - | 22.4 MiB | 23454160.0 B | 1 | - | - | 231.8 | 29.0 | cold first run 67.75 ms |
| matroska-test-files/test1.mkv | 22.3 MiB | ATL.NET | fail | - | - | - | - | - | - | 81.5 | 28.8 | NullReferenceException: Object reference not set to an instance of an object. |
| matroska-test-files/test1.mkv | 22.3 MiB | TagLib# | fail | - | - | - | - | - | - | 78.1 | 28.9 | InvalidOperationException: Invalid EBML format Read |

# Group C: remux-mem, playable

## Run 2026-11-02 04:46Z

- Machine: AMD Ryzen 9 7950X3D 16-Core Processor; 32 logical cores; Linux Mint 22.3 X64
- ISA: sse4.2 avx2 bmi2 avx512f avx512bw
- Storage of the corpus: /dev/nvme0n1p4; every file is read once before its rows, so it is in the page cache for all of them
- .NET: 10.0.13 (.NET 10.0.13)
- Load average (1 min): before 1.20; during mean 1.17, max 1.26 over 15 samples at 5 s; after 1.17
- Elapsed: 1.2 min; repetitions 3 (managed), 3 (tools); files over 1 GiB get one warm-up run and 3 samples of one run each, and tools once
- Packages as restored: SharpMP4 0.3.2; RecursiveAI.OneAudio 1.6.1; MetadataExtractor 2.9.3; TagLibSharp 2.3.0.0; z440.atl.core 7.19; Matroska 0.0.12
- Tools: ffmpeg version 7.0.2-static https://johnvansickle.com/ffmpeg/  Copyrig; MP4Box - GPAC version 26.07-rev0-ga07cbfff-master; mkvmerge v103.0 ('The Darkness') 64-bit; MediaInfo MediaInfo Command line,; ExifTool 13.60

Ratio is OneMedia's median over the fastest managed comparator's median on the same file (below 1.00× is faster). Peak is the process's peak resident set; Baseline is its resident set before any work, so Peak − Baseline is what the work added.

## remux-mem: Remux of the files past 4 GiB into MP4 and Matroska, output to disk: peak resident memory

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/large/over4gb-moov-at-end.mp4 | 4.08 GiB | OneMedia to MP4 | 2.37 s | - | 2.1 MiB | 33.8 B | 64576 | 4173.2 | - | 62.3 | 29.0 | cold first run 2.44 s |
| generated/large/over4gb-moov-at-end.mp4 | 4.08 GiB | OneMedia to Matroska | 1.77 s | - | 21.3 MiB | 345.3 B | 64576 | 4172.9 | - | 66.9 | 28.9 | cold first run 1.90 s |
| generated/large/over4gb.mkv | 4.14 GiB | OneMedia to MP4 | 5.43 s | - | 5.7 MiB | 91.9 B | 64596 | 4240.6 | - | 86.9 | 29.0 | cold first run 5.69 s |
| generated/large/over4gb.mkv | 4.14 GiB | OneMedia to Matroska | 4.82 s | - | 24.6 MiB | 399.8 B | 64596 | 4240.1 | - | 95.1 | 28.9 | cold first run 5.08 s |

Reference tools, run as processes (wall time including start-up, peak resident set); information only:

| File | Tool | Wall median | Wall min – max | Peak MiB | Note |
|---|---|---:|---:|---:|---|
| generated/large/over4gb-moov-at-end.mp4 | ffmpeg -c copy -f matroska | 2.96 s | 2.96 s – 2.96 s | 31.5 |  |
| generated/large/over4gb.mkv | ffmpeg -c copy -f matroska | 3.05 s | 3.05 s – 3.05 s | 30.8 |  |

## playable: MakePlayable (generic MP4): Matroska H.264+AAC to MP4; information

| File | Size | Implementation | Median | Ratio | Alloc / run | Alloc / packet | Packets | Payload MiB | Tracks or tags | Peak MiB | Baseline MiB | Note |
|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| generated/mkv/h264-aac.mkv | 0.2 MiB | OneMedia | 160.25 ms | - | 1.7 MiB | 1833040.0 B | 1 | 0.2 | - | 61.6 | 28.9 | cold first run 284.71 ms |

Reference tools, run as processes (wall time including start-up, peak resident set); information only:

| File | Tool | Wall median | Wall min – max | Peak MiB | Note |
|---|---|---:|---:|---:|---|
| generated/mkv/h264-aac.mkv | ffmpeg -c copy -f mp4 | 7.58 ms | 7.04 ms – 7.84 ms | 17.6 |  |
