ID3

From Just Solve the File Format Problem
Revision as of 12:18, 20 October 2023 by AmigoJack (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
File Format
Name ID3
Ontology
Extension(s) .mp3, others
LoCFDD fdd000106, fdd000107, fdd000108
Wikidata ID Q1054220
Kaitai Struct Spec id3v1_1.ksy
Released 1996

ID3, or ID3 tag, is a metadata format, mainly used in MP3 audio files. It stores information such as the song title, artist, and album.

Although designed for use with (and named after) MP3, ID3 is sometimes used with other audio formats. This can be done in two fundamental ways:

  • Embedding the ID3 data inside the file, in a manner appropriate for that audio format. For example, here is a WMA file containing ID3 data.
  • Prepending and/or appending the ID3 data to the file, MP3-style. This practice is not necessarily approved by any standard, but it has been done, for example with Ogg and FLAC. Here, the tail is wagging the dog, and ID3 can be thought of as a container format for an arbitrary audio format.

Contents

Format details

There are two major versions. ID3v1 defines a fixed-length data block that is always placed at the end of the file. ID3v2, which has very little in common with ID3v1, defines a block with variable-length frames and allows more flexibility and verbosity. ID3v2 data usually appears at the beginning of the file. It is possible, and common, for a file to have both ID3v1 and ID3v2 metadata.

As of 2017, there are three versions of ID3v2 to be aware of: v2.2.x, v2.3.x, and v2.4.x. These formats have some critical differences, and are definitely not compatible with each other.

Identification

  • For an MP3 file with an ID3v1 tag, ASCII "TAG" appears beginning 128 bytes from the end of the file.
  • An MP3 file with an ID3v2 tag usually begins with ASCII "ID3".
  • Alternatively, the signature "3DI" could appear 10 bytes from the end of the file, or 138 bytes from the end of the file if there is also an ID3v1 tag. This is much less likely.

There are other (rare) ways to use ID3v2, not covered by the above identification logic.

How to skip past an ID3v2 segment

To identify an audio file's format, it is best to skip past any ID3v2 segment at the beginning of the file before looking for a magic signature, and not just assume that ID3 implies MP3. Unfortunately, doing so is not trivial. Here is an attempt to summarize the algorithm:

  1. Let OFFSET = 0.
  2. Read and remember the first 10 bytes of the file.
  3. If bytes 0-2 are not ASCII "ID3", stop. An ID3v2 segment is not present.
  4. Let OFFSET = 10 (for the 10-byte header).
  5. Decode bytes 6-9 as a 32-bit "synchsafe int" (which are 28 bit of size, because you only read 7 bit of each 4 bytes, refer to any ID3v2 spec). Let OFFSET = OFFSET + this decoded int.
  6. If the 0x10 bit of byte 5 is set, the file's last 10 bytes have an ID3 footer, which is not audio data.
  7. OFFSET is now behind the ID3v2 tag. Although uncommon, the docs nowhere forbid to have multiple ID3v2 tags (f.e. v2.2 and v2.3 following), so the whole scannings may start anew at the current offset and you should go back to 1. while your true exit condition is 3. when not seeing the "ID3" magic.

Similar/Depending, but informal formats

All are in front of an ID3v1.0 or ID3v1.1 tag at the end of the file, but there's no priority between them and they're somewhat mutually exclusive:

  • ID3.1v2, extending ID3v1 fields by 15-30 more bytes. Identification: EXT 128 bytes in front.
  • Enhanced TAG, extending ID3v1 fields by 60 more bytes. Identification: TAG+ 227 bytes in front.
  • Lyrics3, adding subtitles=lyrics with a precision down to 1 second. Identification: LYRICSEND in front.
  • Lyrics3v2, adding subtitles=lyrics, allowing up to 250 bytes for fields, adding cover picture. Identification: LYRICS200 in front.

Specifications

Software

[Ed. note: There are many utilities that can read and write ID3 tags, including Windows Explorer to some extent. We suggest searching the web.]

Resources

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox