WebM / Matroska
Open video container built on EBML. Replaces metadata with EBML Void in place — SeekHead and cues stay valid.
- Extensions
- .webm · .mkv
- MIME
- video/webm
- Strip
- Lossless
- Updated
- 2026-05-27
WebM is Google’s slimmed-down profile of Matroska, designed for the web — VP9 / AV1 video with Opus / Vorbis audio, decoded natively by every modern browser. Matroska itself (.mkv) is the parent format, widely used for movies and TV recordings. Both are built on EBML (Extensible Binary Meta Language), a binary tree where every element is a (length-prefixed ID, length-prefixed size, body) triple.
If you’ve ever screen-recorded a tab in Chrome or DuckDuckGo’d a meme reaction clip, you have a WebM with software identifiers in its Info element.
What it carries
A Matroska/WebM Segment is structured as a small set of master elements:
- Info — segment-wide metadata:
SegmentUID(0x73A4) — 128-bit unique identifier for this segment. Stable across files; can link uploads back to a source.PrevUID/NextUID/SegmentFamily— cross-segment linking identifiers.Title(0x7BA9) — human-readable title.MuxingApp(0x4D80) — the muxer that wrote the file (e.g.libwebm-1.0.0.31).WritingApp(0x5741) — the application that drove the mux (e.g.Chrome/126.0.0.0).DateUTC(0x4461) — creation timestamp as int64 ns since 2001-01-01.
- Tracks — codec descriptors. Each TrackEntry can have a
Name(0x536E) — track names like “Director’s Commentary” — and aTrackUID(0x73C5). - Tags (0x1254C367) — free-form Tag / SimpleTag (TagName + TagString) pairs. The flexible metadata dump zone — author, artist, recording date, genre, plus arbitrary user-defined fields.
- Attachments (0x1941A469) — embedded files. Cover art, fonts (for subtitle styling), thumbnails, sometimes complete other media files.
- Chapters (0x1043A770) — chapter names and timestamps. Names can be identifying.
What’s unique
WebM’s SeekHead (table of contents) and Cues (playback index) store byte offsets into the Segment. Naively deleting a metadata element shifts every offset that comes after, breaking the index. Tracemute solves this the EBML-native way: instead of deleting metadata elements, it rewrites them as Void elements (ID 0xEC) of equal length. Void is officially “data to skip” in EBML; decoders just walk past it. Atomic elements (Title, MuxingApp, etc.) are simply body-zeroed — header kept, payload nulled.
The result: file size identical, SeekHead and Cues remain valid, decoders see empty / skipped metadata, and the audio/video clusters are untouched.
What Tracemute does
The handler is a native EBML walker with the size-preserving strip strategy:
- Parse the EBML header (DocType to distinguish
webmvsmatroskafor output MIME). - Find the Segment (0x18538067). Walk its children.
- For Tags, Attachments, Chapters master elements — replace wholesale with one or more EBML Void elements (0xEC) totalling the original byte length.
- For Info atomic metadata (SegmentUID, PrevUID, NextUID, SegmentFamily, Title, MuxingApp, WritingApp, DateUTC) — zero the body, keep the header.
- For Tracks → TrackEntry — strip Name + TrackUID with the same zero-body approach.
- Leave SeekHead, Clusters (the actual media), and Cues verbatim.
What survives
The EBML header (required for the file to identify as Matroska / WebM), SeekHead (with valid offsets because nothing moved), Tracks structure minus the stripped atomic elements, all Clusters (audio + video sample data, byte-identical), and Cues (index integrity preserved). No transcoding.
Where this format shows up