hpr4698 :: ID3 Tags and Vorbis Comments

A look at metadata in audio files and how to read it

Hosted by Whiskeyjack on Wednesday, 2026-08-05 is flagged as Clean and is released under a CC-BY-SA license.
audio, mp3, vorbis. (Be the first).

Listen in ogg, opus, or mp3 format. Play now:

Duration: 00:32:55
Download the transcription and subtitles.

general.

--------------------

01 Introduction

In a response to a post on a previous episode, I said that I would take a look at ID3 tags.

ID3 tags are text information that is added to an MP3 audio file, such as the author, date, name, and other information.

02

While I am at it I will also look at Vorbis comments, which perform a similar function for vorbis, the container format for "ogg" audio files.

As example audio files, I will use a recent HPR episode, hpr4678 in both mp3 and vorbis formats plus also one from another podcast as well.

03

There is Free Software which you can use to view, edit, or remove both types of tags or comments, and I will describe how to use it in this episode.

04

I will cover how to view tags and extract the text information, as well as how to strip the tags from a file and why you may wish to do so under certain very specific circumstances.

I won't cover how to add to or edit tags in an MP3 or OGG file, as that is a more involved subject that I don't have much experience with.

05

I will mainly talk about ID3 MP3 tags rather than vorbis comments for the simple reason that the situation with MP3 files is an utter mess while vorbis comments are very straightforward and so there isn't as much to say about them.

06

As often happens when researching a subject to write a podcast script, I have learned quite a bit that I didn't know previously, and discovered that things that I thought I did know were wrong.

I hope that you may learn a few things from this episode that you didn't know previously either.

--------------------

07 Background

I won't go over the detailed history of ID3 tags, as I don't have a reliable source for this.

Briefly however, so far as I can determine, there is no official independent standard for ID3 tags or vorbis comments.

Both seem to be more in the nature of a convention that was created by an unofficial group of contributors rather than something issued by a standards body.

08

However, I don't see the lack of a conventional standards body as necessarily a problem with respect to the use of ID3 tags or vorbis comments.

I just am not familiar enough with the industry to know who to regard as being an authoritative source when it comes to the history and development of them

Since I am unsure as who to credit with what developments, I will avoid that sort of detail.

09 ID3 Tags

There is a web site with the URL of ID3.org that seems to have the best reference material on the topic of ID3 tags.

According to this site, the term "ID3" means "IDentify an MP3".

10 Vorbis Comments

For vorbis, the reference site seems to be xiph.org.

Although the implementation details may differ from ID3, from our perspective as podcast listeners, they can be seen as more or less equivalent in terms of what I am going to address here.

--------------------

11 ID3 Details

Versions

One of the problems with ID3 is that there are multiple incompatible versions, particularly from the very early days.

ID3v1 tags are located at the end of the audio file in the last 128 bytes.

This was done for compatibility reasons to allow early MP3 players to simply ignore the tags if they didn't know how to deal with them.

The tags would simply appear as a short burst of static from the perspective of these early players.

12

ID3v2 moved the tags to the start of the MP3 file to allow players to scan the tags for information such as titles without having to read to the end of the file to find them.

There are far fewer limits on the amount of information that can be placed in ID3v2 tags.

13

ID3v1 is obsolete and only very old players will require it.

However, it is still used by some publishers for backward compatibility reasons.

ID3v1 included numerical musical "genre" category codes which apparently turned out to be a very bad idea in practice.

14

Furthermore, all genre categories above 70 were defined by an audio software company called Nullsoft who created software such as Winamp.

These codes were never actually part of the ID3 standard, although there was never really a standard to begin with.

15

The current ID3 version is 2.3. There is a version 2.4, but apparently it is not actually generally accepted and may be a developmental dead end.

16

The id3.org web site contains a copy of the ID3v2.3 standard, but I am not going to address the technical details here.

This would only be of interest to someone who was creating software to read and write ID3 tags.

17 ID3v2 Frames

The ID3v2 information is encoded into what are called "frames".

The text information is contained in text information frames.

18

Text information frames start with a set of four character identifiers, all starting with the capital letter 'T'.

Examples

"TALB" is the "Album/Movie/Show title" frame.

"TIT2" is the "Title/Songname/Content description" frame.

"TYER" is the "Year" frame.

There are many more, but I won't go into more detail here.

19 HPR ID3 Tags

HPR makes an interesting case study because they use both ID3v1 and ID3v2 in the same file.

This can cause some interesting problems with software that tries to read those tags.

This is because most software appears to expect one or the other, but not both.

However, so long as this does not cause problems with anything that actually plays the files, this is not a problem so far as people who just want to listen to podcasts are concerned.

It does mean though that we have more to talk about than we would otherwise would have had.

--------------------

20 Vorbis Comment Fields

The situation with Vorbis comments is much simpler, as there seems to be just one standard that was adhered to from the start rather than a succession of hacks.

Information is stored in "fields", which xiph describes as being like Unix environment variables.

These consist of a field name followed by an equal sign and then the information intended for that field.

Field names are case insensitive.

21

The field names are not firmly defined at this stage, but there is a list of recommended names.

Examples are

"TITLE" is the Track or Work name.

"ARTIST" is the person responsible for the work.

"LICENSE" is the license information.

22

You can see the complete list for yourself on the comment field and header specification page at xiph.org

--------------------

23 Software for Listing, Adding, and Modifying Tags and Fields

There are three software packages that I will now describe which allow you to list, add, modify, and remove tags and fields.

There are other packages which can do the same, including some which offer a GUI interface.

However, I will limit myself to describing these three.

The principles should be the same for others.

24 ffprobe

ffprobe is part of the ffmpeg package.

If you have listened to my previous episodes on audio, you will have heard me talk about ffmpeg.

ffprobe is used to display information about media files rather than for modifying them.

ffprobe is licensed under the GPLv2 or later.

ffprobe can be used to display information about both MP3 and OGG Vorbis files.

25 ID3v2

The next is the rather aptly named id3v2 and works with MP3 files.

On Linux systems, this should be provided by the id3v2 package.

On Debian derivatives this can be installed as follows

sudo apt install id3v2

26

This also installs a man page which provides a brief list of the options.

According to the README file in the source tarball, this is published under the LGPL

ID3v2 is particularly useful for displaying ID3v1 tags.

27 vorbiscomment

The third is "vorbiscomment" and works with OGG files.

On Linux systems this should be provided by the "vorbis-tools" package.

On Debian derivatives this can be installed as follows

sudo apt install vorbis-tools

28

The vorbiscomment program is used to list or edit comments in Ogg Vorbis files.

This also installs a man page which provides a brief list of the options.

According to the license.lgpl file in the source tarball, this is published under the LGPL version2.

29

The display format for vorbiscomment follows the data definition format in the vorbis standard, whereas ffprobe re-formats it to match its own preferred appearance.

--------------------

30 Examples from HPR

With the background out of the way, I will now give several examples of how to list the tags or fields.

31 Listing ID3v1 Tags

As previously mentioned HPR uses both ID3v1 and ID3v2 tags in the same file.

However, so far as I can tell, most software seems to look for ID3v2 tags first, and don't display the ID3v1 tags if both are present.

32

The ID3v2 program however seems to do the opposite, at least with HPR podcasts.

However, the number of samples that I have which have both are rather limited, so I can't be sure if this is always the case or if this is a side effect of something else.

I did mention that ID3 tags were a mess, didn't I?

33

Let's go on to our example however.

If we want to see the ID3v1 tags, then using hpr4678 as an example, if we type

id3v2 -l hpr4678.mp3

=

we get the following result.

34

id3v1 tag info for hpr4678.mp3:

Title : High Resolution Elapsed Time i Artist: Whiskeyjack

Album : Hacker Public Radio Year: 2026, Genre: Unknown (186)

Comment: https://hackerpublicradio.or Track: 0

hpr4678.mp3: No ID3v2 tag

35

The first line tells us that this information is ID3v1 tags.

The last line tells us that there are no ID3v2 tags.

This last line is incorrect, but we will come back to that later.

36

In between are three lines of text.

The first line contains the title and the artist.

The title is the name of the HPR episode, or at least part of it.

The artist is the HPR contributor who made that episode.

37

The second line contains the album name, the year, and the genre.

The album name is this case is simply Hacker Public Radio, as the concept of an album doesn't really fit a podcast.

The year is the year that the episode was recorded, or at least the year in which the MP3 file was assembled with the HPR intro and the tags added.

38

The genre is listed as "unknown 186".

Recall that with ID3v1 tags there is a one byte numeric genre code, but that no genres above 70 were ever officially assigned.

It seems to be a general convention though to use a code 186 for podcasts.

39

The third line contain a comment and track number.

The comment in this case is the HPR web site URL.

The track is zero.

"Track" would appear to serve no useful purpose in this instance.

However, it may be there for reasons of compatibility that I am unaware of, so I would be very reluctant to remove that without very good reason.

40

If we look at the above information in detail we can see that two of the tags appear to have cut their text information off short.

The title is cut off in mid word after the 30th character.

The final "g" in "hackerpublicradio.org" is cut off in the comment.

41 Alternative Method for ID3v1

We can confirm whether the text being cut short is due to a problem with the id3v2 program, or whether it really represents the data in the file by using a rather simple check.

42

Recall that ID3v1 tags are simply the last 128 bytes of the MP3 file.

All we need to do is to extract the last 128 bytes of the file.

We can do this using the standard tail command.

tail -c128 hpr4678.mp3 | tr '\0' ' ' | tr -c '[:print:]' 'x'

43

The -c128 option used with tail tells it to extract the last 128 bytes of the file.

We then pass the result through the "tr" command and tell it to replace null bytes with new line characters.

Then we replace any remaining non-printable characters with an 'x'.

When we do that we get the following

44

TAGHigh Resolution Elapsed Time iWhiskeyjack Hacker Public Radio 2026https://hackerpublicradio.or x

45

The first three characters are capital TAG.

This is a flag which indicates that what follows are ID3 tags.

46

Next, we have 30 characters which specify the title.

The next 30 characters specify the artist.

The next 30 characters are the album, or in this case just "Hacker Public Radio".

The next 4 characters are the year.

The next 30 characters are a comment, or in this case the HPR URL, except for the final "g".

The last character is the genre code, which we have replaced with an "x" because it is otherwise non-printable.

47

Taken together, these add up to 128 bytes.

We can see that the field lengths are of fixed length with pre-defined meanings based on position.

--------------------

48 ID3v2 Using ffprobe

Now lets move on to ID3v2 tags, which is probably more useful for most people.

For this, we will switch to using ffprobe.

The command for this is

ffprobe -hide_banner hpr4678.mp3

The -hide_banner option suppresses extra data about the codecs which doesn't interest us much and leaves mainly the tag information plus a few other things.

49

The output gives us the full data that is associated with the podcast episode from the HPR web site.

This includes the episode number, year, full title, author, license, and full summary text.

You can see a full copy of this in the show notes.

Input #0, mp3, from 'hpr4678.mp3':

Metadata:

track : 4678

year : 2026

title : High Resolution Elapsed Time in Shell Scripts

author : Whiskeyjack

copyright : CC-BY-SA

artist : Whiskeyjack

album : Hacker Public Radio

comment : https://hackerpublicradio.org Clean; Surprises encountered when measuring elapsed time in shell scripts The license is CC-BY-SA

genre : Podcast

encoder : Lavf61.7.103

date : 2026

Duration: 00:30:10.18, start: 0.023021, bitrate: 64 kb/s

Stream #0:0: Audio: mp3, 48000 Hz, mono, fltp, 64 kb/s

50

The ID3v2 tag version contains all of the information which was provided by the author, including the full title and description without the 30 character limit of ID3V1.

If you want any of this information for some reason you should be able to extract it from the MP3 file using a combination of ffprobe, grep, and cut rather than trying to scrape the HPR web site and matching it to the MP3 later.

--------------------

51 ID3v1 Using ffprobe

I previously mentioned that HPR MP3 files have both ID3v1 and ID3v2 tags in the same file, and that ffprobe will default to using ID3v2 tags if present.

However, what happens if we remove the ID3v2 tags and leave the ID3v1 tags?

I will describe how to strip tags later on in this episode, but let's just assume for now that I have done this.

If we then use ffprobe to read the ID3 tags using the same command as before, we get the following output.

52

We get a series of lines in the same format as with ID3v2, but with each data element limited to at most 30 bytes.

These include title, artist, album, date, comment, and genre.

You can see the full output in the show notes.

Input #0, mp3, from 'test.mp3':

Metadata:

title : High Resolution Elapsed Time i

artist : Whiskeyjack

album : Hacker Public Radio

date : 2026

comment : https://hackerpublicradio.or

genre : Podcast

Duration: 00:30:10.18, start: 0.023021, bitrate: 64 kb/s

Stream #0:0: Audio: mp3, 48000 Hz, mono, fltp, 64 kb/s

53

The information is the same as when read by the id3v2 program, but formatted for display in the manner that ffprobe uses.

This shows that ffprobe can indeed read ID3v1 tags if they are the only ones present.

--------------------

54 Reading Vorbis Comments

Now let us turn our attention to vorbis comments, which are the equivalent to tags for ogg files.

We will look at this using two methods.

55 Using vorbiscomment

The first method we will look at is using the vorbiscomment package.

The command is

vorbiscomment -l hpr4678.ogg

56

The output of this is a series of lines with key value pairs separated by equal signs.

The output is also exactly the same as the MP3 file, except that there is an additional "language" field, "track" becomes "TRACKNUMBER", and there is no "date" field.

You can see the full output in the show notes.

encoder=Lavc61.19.101 libvorbis

TRACKNUMBER=4678

year=2026

language=English

title=High Resolution Elapsed Time in Shell Scripts

author=Whiskeyjack

copyright=CC-BY-SA

artist=Whiskeyjack

album=Hacker Public Radio

DESCRIPTION=https://hackerpublicradio.org Clean; Surprises encountered when measuring elapsed time in shell scripts The license is CC-BY-SA

genre=Podcast

57 Using ffprobe

Now lets do the same again using ffprobe.

The command for this is

ffprobe -hide_banner hpr4678.ogg

58

The output content is the same of course, but the field names have all been forced to lower case, and instead of an equal sign as a separator between the key and value, this has been replaced by a colon and white space has been added to make the output look a bit nicer.

You can see the full output in the show notes.

Input #0, ogg, from 'hpr4678.ogg':

Duration: 00:30:10.14, start: 0.000000, bitrate: 86 kb/s

Stream #0:0(English): Audio: vorbis, 192000 Hz, mono, fltp, 4294967 kb/s

Metadata:

encoder : Lavc61.19.101 libvorbis

track : 4678

year : 2026

title : High Resolution Elapsed Time in Shell Scripts

author : Whiskeyjack

copyright : CC-BY-SA

artist : Whiskeyjack

album : Hacker Public Radio

comment : https://hackerpublicradio.org Clean; Surprises encountered when measuring elapsed time in shell scripts The license is CC-BY-SA

genre : Podcast

--------------------

59 Another Example from Another Podcast

The above is interesting, but it's a sample of one podcast. Let's look at another different one altogether.

For this test I used two episodes of the Linux Matters podcast, episodes 68 and 82. As to why I am using two different episodes I will explain in a moment.

60 Episode 68

We will start with examining episode 68

Using id3v2

The command using id3v2 is

id3v2 -l LMP68.mp3

61

This provides output as a series of lines containing the official 4 character identifiers from the standard, a description of the identifiers, and the text provided by the authors.

The identifiers include TIT2 indicating title, TALB indicating show title, TRCK indicating track number, and a number of others.

You can see the full output in the show notes.

id3v2 tag info for LMP68.mp3:

TIT2 (Title/songname/content description): 68: Frameworks, Filesystems and Fixes

TPE1 (Lead performer(s)/Soloist(s)): Linux Matters

TALB (Album/Movie/Show title): Linux Matters

TYER (Year): 2025

TRCK (Track number/Position in set): 68

COMM (Comments): ()[]: https://linuxmatters.sh/

APIC (Attached picture): (LMP-3000-moon.jpg)[, 3]: image/jpeg, 554576 bytes

LMP68.mp3: No ID3v1 tag

62

From this we can see what the id3v2 program would normally do with ID3v2 tags.

Note that it outputs the actual 4 character identifiers, plus a description of what they mean, and then the actual data.

This helps when trying to understand the actual encoding of the data.

63 Using ffprobe

Now let's try that with ffprobe.

The command is

ffprobe -hide_banner LMP68.mp3

64

This provides the same publisher provided data as before.

However it does not display the 4 character identifiers but instead uses its own format for display.

Also note in both cases that there is a picture embedded in the MP3 file which is used to generate an icon for display in your file manager.

With ffprobe this results in there being two keys called "title" and two keys called "comment".

This makes grepping for the metadata more complicated, but it should still be possible.

You can see the full output in the show notes.

Input #0, mp3, from 'LMP68.mp3':

Metadata:

title : 68: Frameworks, Filesystems and Fixes

artist : Linux Matters

album : Linux Matters

comment : https://linuxmatters.sh/

track : 68

date : 2025

Duration: 00:28:12.45, start: 0.025056, bitrate: 114 kb/s

Stream #0:0: Audio: mp3, 44100 Hz, mono, fltp, 112 kb/s

Metadata:

encoder : LAME3.100

Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 4166x4166 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn (attached pic)

Metadata:

title : LMP-3000-moon.jpg

comment : Cover (front)

65 Episode 82

Now lets try that again with a different episode, 82.

Using id3v2

The command for id3v2 is

id3v2 -l LMP82.mp3

This results in id3v2 saying

LMP82.mp3: No ID3 tag

What happened here?

66 Using ffprobe

Let's try that again with ffprobe.

The command

ffprobe -hide_banner LMP82.mp3

provides the expected output.

Input #0, mp3, from 'LMP82.mp3':

Metadata:

date : 2026-05

title : 82: Ditching Grammarly for Open Sauce

album : Linux Matters

track : 82

artist : Linux Matters

comment : https://linuxmatters.sh

Duration: 00:33:37.83, start: 0.025056, bitrate: 113 kb/s

Stream #0:0: Audio: mp3, 44100 Hz, mono, fltp, 112 kb/s

Stream #0:1: Video: png, rgb24(pc, gbr/unknown/unknown), 3000x3000, 90k tbr, 90k tbn (attached pic)

Metadata:

title : Linux Matters Logo

comment : Cover (front)

67

This results in a few minor changes from episode 68, but otherwise it looks the same.

So there are ID3 tags, but for some reason id3v2 couldn't recognize them.

A bit more research and experimentation shows that this change appears to have happened right after episode 68, when they changed hosting and processing arrangements.

I suspect that something changed with respect to the ID3v2 tag formatting somewhere along the way in the change over, and this in turn has affected the ability of the id3v2 program to recognize the tags.

I will come back to the implications of this later in my conclusions.

--------------------

68 Stripping ID3 Tags

Now let's turn to a differen topic.

Stripping ID3 tags refers to removing the ID3 tags from the audio file.

I will start off by emphasizing that normally, you don't want to do this.

You should only be doing it if you suspect the ID3 tags are causing a problem with the playback or ordering of the files.

69

In my case I do it when I have problems with my MP3 player when playing certain podcasts.

This MP3 player orders files according to ID3 tags rather than by file name.

This can result in the podcasts being played in an unpredictable order which I find undesirable.

This is particularly a problem with podcasts from certain publishers where the title data does not follow any consistent pattern, but is whatever someone felt like doing that day.

70

I also often have to normalize the files from the same publishers to get a consistent audio loudness.

See my series on Simple Podcasting for information on how to use ffmpeg to normalize the audio loudness.

The solution to the inconsistent tag formats in these cases is to simply strip the ID3 tags altogether.

The player then falls back on using the file names, and I can readily rename the files to a consistent format.

I have never had these sorts of problems with HPR podcasts.

If you are not having any problems of this nature, then as I said, don't bother stripping the tags.

71

To strip the ID3 tags from an MP3 file use the following.

id3v2 -D hpr4678.mp3

id3v2 will strip the tags and overwrite the existing file.

If you wish to keep a copy with the tags, be sure to keep a backup before you try things.

72

When it comes to stripping tags, the options are

"-s" deletes ID3v1 tags.

"-d" deletes ID3v2 tags.

"-D" deletes both v1 and v2 tags.

--------------------

73 Conclusions

In this episode we took a very brief look at ID3 tags and vorbis comments and ways of reading them.

74

ID3 tags and Vorbis comments provide a means of allowing information about an MP3 or OGG Vorbis file to be embedded in the file itself.

Podcast publishers very often use this to label the file with information such as title, publisher, and author.

We can read this information using Fee Software tools such as ffprobe, ID3v2, and vorbiscomment.

75

ID3 tags seem to be a mess with more than one incompatible versions, and difficulties in reading them even within the same version.

They are difficult to test for because there is so much hardware out there of varying ages, much of which you will never have heard of let alone had access to.

If you are recording episodes for HPR you do not have to worry about this, as HPR will do this behind the scenes for you.

However, if you are responsible for producing a podcast or other similar audio and you have a setup that works, it is probably best not to change anything without good reason.

76

Vorbis comments seem to be much less of a problem.

However, there are far fewer devices which can play OGG files compared to MP3, so simply switching to OGG may not be a realistic solution to the ID3 tag problem.

77

If you wish to have one tool that can read ID3 tags of all sorts and vorbis comments, then ffprobe is your obvious choice.

78

The ID3v2 program will provide more information about the ID3 tags, including the actual identifiers used. However, it does not work in all cases.

79

The vorbiscomment program will read Vorbis comments from OGG files in a manner which is closer to the actual vorbis format than ffprobe does, which uses its own display format.

80

HPR includes both ID3v1 and ID3v2 tags in its MP3 files.

ffprobe can be used to read the ID3v2 tags, and the id3v2 program can be used to read the ID3v1 tags.

You can also read the ID3v1 tags using the tail command.

81

I have barely scratched the surface of this subject and have not talked at all about creating tags or comments.

If anyone else would like to take up the challenge of providing more detail, or of correcting any mistakes that have made, please send in a podcast episode on the subject.

If you have any comments you would like to make, leave them in the comment section below this episode on the HPR web site.

82

I hope to see you all again in future in another episode of HPR.

--------------------

References

https://id3.org/Introduction

https://www.xiph.org/

https://wiki.xiph.org/VorbisComment

--------------------


Comments

Subscribe to the comments RSS feed.

Leave Comment

Note to Verbose Commenters
If you can't fit everything you want to say in the comment below then you really should record a response show instead.

Note to Spammers
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to record a show about yourself, or your industry, or any other topic we may find interesting. We also check shows for spam :).

Provide feedback
Your Name/Handle:
Title:
Comment:
Anti Spam Question: What does the letter P in HPR stand for?
Are you a spammer?
Who is the host of this show?
What does HPR mean to you?