7

I have a bunch of recovered mp3 files that have system generated filenames. I want to use any embedded ID3 tag info in the files to rename each one to something human readable.

I've tried 'mp3rename' from the debian apt repo but it doesn't handle mp3 files without id3 tagging automatically. Is there a workable alternative?

4 Answers 4

2

id3v2 and some scripting should make this possible. I'll look through the man pages and try to write up an example, but id3v2 -l file will list the tags from that file. From there you can pipe through awk/sed/whatever to end up with a command to rename the file.

6

You can try the kid3-cli tool command from Kid3

Example :

kid3-cli -c 'fromtag "%{track}__%{album}__%{title}" 1' *.mp3
2
  • 3
    The 1 in the command refers to id3v1 tags. Some recent mp3 files might only have id3v2 tags. For those you will get better results replacing the 1 with a 2.
    – Zack
    Apr 18, 2021 at 0:24
  • Kid3 will also be useful, despite not being very intuitive, in the GUI version (renaming files into album folders or just renaming them in place). Dec 20, 2022 at 18:44
3

Have a look at exiftool, more specifically, the manpage section titled RENAMING EXAMPLES.

It's not limited to only MP3 files.

1
  • For example, to prepend the track number to file names run exiftool '-filename<${track;} - %f.%e' *.mp3. Oct 1, 2023 at 11:21
3

If you like Perl, an easy way to get a hold of the tags is this:


#!/usr/bin/env perl
use File::Find;
use MP3::Tag;
use Cwd;

$dir = ".";
open(OUTFILE,">tags.txt") || die "Can't open: $!\n";
print OUTFILE 'Output for "'.getcwd().'"'." and subdirectories\n";
print OUTFILE "Path;Artist;Title;Track;Album;Year;Genre;File Size\n";

find(\&edits, $dir);
close(OUTFILE);
print "Done\n";

sub edits() 
{
$fn=$_;
$not_shown=1;
if ( -f and $fn=~m/.+\.mp3$/ig)
{
$mp3 = MP3::Tag->new($fn);
($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo();
$fs= -s $fn;
print OUTFILE "$File::Find::name\\$fn;$artist;$title;$track;$album;$year;$genre;$fs\n";
}
if ( -f and $fn=~m/.+\.wav$|\.m4a$/ig)
{
$fs= -s $fn;
print OUTFILE "$File::Find::name\\$fn;;;;;;;$fs\n";
}
}

From there, a little scripting, and you've got what you want.

1
  • 1
    I made a few changes to this script and put it on Github: github.com/hovenko/audio-renamer , which now also provides a print of "mv" commands to rename the files according to track number and title.
    – hovenko
    Nov 16, 2015 at 19:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .