MP3
Generated by scripts/gen-format-pages.py from docs/data/format-metadata/, FILE_FORMATS.csv and docs/formats-master.csv. Do not edit by hand: change the source, then run the script.
MPEG Audio (MP3).
At a glance
| Original creator | Moving Picture Experts Group (MPEG) |
| Purpose | Compressed audio: MPEG-1 or MPEG-2 Audio Layer III frames, usually with an ID3v2 tag before them or an ID3v1 tag after them. |
| Extensions | .mp3 |
| Poka parser | poka-mp3 |
| Viewer | poka-metadata-card-viewer |
| Depth tier | Metadata card (see Depth tiers) |
| Breadth tier | B4 Summary (see Breadth tiers) |
How much Poka reads
B4 Summary. The container and metadata are read and summarised (counts, properties, structure), but the main content is not rendered.
Confidence: high (the reviewer read the code and a test that proves the claim). Basis: Reviewed 2026-10-16: parsers/poka-mp3/src/lib.rs (ID3v2.2/2.3/2.4, ID3v1, MPEG-1/2/2.5 frame header, Xing/Info/VBRI) and tests/samples.rs; corpus has 2 real files (test2.mp3 with ID3v2.4 UTF-8, testMP3_id3_false_aac.mp3 with ID3v2.3 UTF-16 and LAME Xing). Metadata card only: tags, the first frame and the container are summarised, audio is never decoded (the viewer plays the original). Covers all MP3 variants Poka claims.
What Poka does not read
- Audio frames are not decoded or analysed (only the first frame is read)
- Only title, artist, album artist, album, composer, genre, track, disc, year and BPM tag fields are shown
- Comments, lyrics, user text, ratings, play counts and private frames are listed by frame id only
- Cover art is reported by type and size, not shown
- Chapters, replay gain, ISRC and other less common ID3 frames are not read
- ID3v2 tags placed at the end of the file (v2.4 footer) and APEv2 tags are not read
- Free-format bitrate files are rejected as having no audio frame
- Duration is estimated from file size when there is no Xing, Info or VBRI header; the TLEN tag is parsed but not used
- Only the first ID3v2 picture is considered
Background
The Library of Congress describes the .mp3 file as a de facto format that wraps Layer III bitstreams, with informally specified ID3 metadata before or after them. MPEG designed Layer III as part of MPEG-1 Audio, published as ISO/IEC 11172-3 in 1993, and MPEG-2 Audio (ISO/IEC 13818-3, 1995) added lower bit rates and sample rates. Poka reads the tags and the first frame, never the audio. A frame is believed only when the next frame header sits where its length says. A Xing, Info or VBRI header gives an exact duration; without one the duration is estimated from the file size and the card says so. Comments, ratings and private frames are not shown (their frame ids are listed under Other frames), and a cover image is reported by type and size. A TLEN frame is shown as the tagged length beside the computed duration, so a file whose tag disagrees with its audio shows both.
Versions
| Version | Identifier | Poka | Note |
|---|---|---|---|
| MPEG-1, MPEG-2 and MPEG-2.5 Layer III | Read | The version decides frame length and samples per frame (parsers/poka-mp3/src/lib.rs). | |
| ID3v2.2, v2.3 and v2.4 tags | ID3 |
Read | Each version's frame-size encoding is handled; ID3v1 (TAG in the last 128 bytes) is read when there is no ID3v2. An ID3v2.4 tag appended with a footer, and APEv2 tags, are not read. |
Libraries
Libraries Poka uses or has assessed for this format, with the status, licence and language the registry records.
- Symphonia (candidate; MPL-2.0; Rust; https://github.com/pdeljanov/Symphonia) — Pure-Rust demuxing and decoding; MP3 via symphonia-bundle-mp3, behind the 'mp3' feature (not default). Crate 0.6.1, Aug 2026.
- lofty (candidate; MIT OR Apache-2.0; Rust; https://github.com/Serial-ATA/lofty-rs) — Audio metadata library (tags and properties); crate 0.25.4, Sept 2026.
- id3 (candidate; MIT; Rust; https://codeberg.org/polyfloyd/rust-id3) — Reads and writes ID3 metadata; crate 1.17.2, Sept 2026.
- mp3-metadata (candidate; MIT; Rust; https://github.com/GuillaumeGomez/mp3-metadata) — Metadata parser for MP3 files; crate 0.4.0, April 2025.
- minimp3 (candidate; MIT; Rust (bindings to C minimp3); https://github.com/germangb/minimp3-rs) — Decoder wrapper around the C minimp3 library; needs a C build.