Strip All Unwanted MP3 ID3 Tags
A while back, I wanted to find a tool that would go through my entire collection of MP3’s and remove all the extra ID3 tags I didn’t want. For example, when I purchase music from Amazon, Rhapsody, and other online music stores, there are a number of tags in the files that track things like the purchase date and sales transaction ID’s. I also like to get rid of annoying comments and other hidden tags that most editors won’t even show you.
In my search for a tool, I came across this very useful post outlining a similar project. In the authors quest to do the same thing, he came up with a shell script that searches for all MP3 files, and removes tags that are not in his list of “good” tags. I usually don’t like to rehash the work someone else has done, but since I use his script so often, I thought it would be useful to repost it with only minor modifications.
Prerequisite: Install eyeD3
The script requires the eyeD3 tag editor to parse and manipulate the tag data. So be sure to install eyeD3, which should be available in your favorite Linux repository.
sudo apt-get install eyed3
Save and Modify Script
Save the following script as strip-tags.sh
somewhere in your executable path.
#!/bin/bash # Script name: strip-tags.sh # Original Author: Ian of DarkStarShout Blog # Site: http://darkstarshout.blogspot.com/ # Options slightly modified to liking of SavvyAdmin.com oktags="TALB APIC TCON TPE1 TPE2 TPE3 TIT2 TRCK TYER TCOM TPOS" indexfile=`mktemp` #Determine tags present: find . -iname "*.mp3" -exec eyeD3 --no-color -v {} ; > $indexfile tagspresent=`sort -u $indexfile | awk -F): '/^<.*$/ {print $1}' | uniq | awk -F)> '{print $1}' | awk -F( '{print $(NF)}' | awk 'BEGIN {ORS=" "} {print $0}'` rm $indexfile #Determine tags to strip: tostrip=`echo -n $tagspresent $oktags $oktags | awk 'BEGIN {RS=" "; ORS="n"} {print $0}' | sort | uniq -u | awk 'BEGIN {ORS=" "} {print $0}'` #Confirm action: echo echo The following tags have been found in the mp3s: echo $tagspresent echo These tags are to be stripped: echo $tostrip echo echo -n Press enter to confirm, or Ctrl+C to cancel... read dummy #Strip 'em stripstring=`echo $tostrip | awk 'BEGIN {FS="n"; RS=" "} {print "--set-text-frame=" $1 ": "}'` # First pass copies any v1.x tags to v2.3 and strips unwanted tag data. # Second pass removes v1.x tags, since I don't like to use them. # Without --no-tagging-time-frame, a new unwanted tag is added. :-) find . -iname "*.mp3" -exec eyeD3 --to-v2.3 --no-tagging-time-frame $stripstring {} ; -exec eyeD3 --remove-v1 --no-tagging-time-frame {} ; echo "Script complete!" |
To run the script, just execute it from the top level parent directory.
cd ~/Music/
strip-tags.sh
I really didn’t change a whole lot from the original, only making slight tweaks to eyeD3 options. For example, I removed colors from the eyeD3 output when creating the first list of tags, and added a line to remove v1.x ID3 tags since I don’t like to keep them around.
Be sure to edit the list of good tags identified by the “okaytags” variable. My preferred list includes the following:
oktags="TALB APIC TCON TPE1 TPE2 TPE3 TIT2 TRCK TYER TCOM TPOS" |
TALB - Album/Movie/Show title
APIC - Attached picture (Album Art)
TCON - Content type (Genre)
TPE1 - Lead performer(s)/Soloist(s)
TPE2 - Band/orchestra/accompaniment
TPE3 - Conductor/performer refinement
TIT2 - Title/songname/content description
TRCK - Track number/Position in set
TYER - Year
TCOM - Composer
TPOS - Part of a set
Enjoy!