Published on November 21, 2008.
TweetJe le met là comme mémo, même si il ne sert jamais à personne dans son intégralité. C’est un script Perl qui m’a servit à renommé toute ma playlist d’XMMS, dont les fichiers étaient sous forme nn_cccc_cccc_ccc.mp3 (où nn est un nombre et ccc_cccc_ccc le titre de la chanson). Le nom de l’auteur et l’album sont des données fixes. Bien sûr, il y a sûrement mieux comme méthode pour effectuer cette tâche, mais cela m’a permis d’en apprendre un peu plus sur la programmation en langage Perl. La prochaine fois, j’essayerais en Python ;)
#!/usr/bin/perl
use Xmms::Remote;
use MP3::Tag;
sub set_tag {
my $file = shift @_;
my $tag = shift @_;
my $mp3 = MP3::Tag->new($file);
print Dumper $tag;
my $tags = $mp3->get_tags();
my $id3v2;
if (ref $tags eq ''HASH'' && exists $tags->{ID3v2}) {
$id3v2 = $tags->{ID3v2};
}
else {
$id3v2 = $mp3->new_tag("ID3v2");
}
my %old_frames = %{$id3v2->get_frame_ids()};
foreach my $fname (keys %$tag) {
$id3v2->remove_frame($fname)
if exists $old_frames{$fname};
if ($fname eq ''WXXX''){
$id3v2->add_frame(''WXXX'', ''ENG'', ''FreeDB URL'', $tag->{WXXX}) ;
}
elsif ($fname eq ''COMM'') {
$id3v2->add_frame(''COMM'', ''ENG'', ''Comment'', $tag->{COMM}) ;
}
else {
$id3v2->add_frame($fname, $tag->{$fname});
}
}
$id3v2->write_tag();
return 0;
}
$xmms_remote = Xmms::Remote->new();
@list = @{$xmms_remote->get_playlist_files};
foreach $el (@list){
$orig = $el;
$file_mp3 = MP3::Tag->new($el);
$file_mp3->get_tags();
if(!exists $file_mp3->{ID3v1}){
#On prend que les fichiers qui n''ont pas de tags
}
if($el =~ /^[\/[a-z0-9_]+\/]*([0-9_]){2}_(.+)\.mp3$/i){
$track_num = $1;
$name = $2;
@tmp = split(/_/,$name);
$counter = 0;
foreach $mot (@tmp){
@tmp[$counter] = ucfirst($mot);
$counter++;
}
$name = join(" ",@tmp);
print $name . "\n";
$artist = "Nobuo Uematsu";
$album = "Final Fantasy X";
$tags = {};
$tags->{TIT2} = $name;
$tags->{TPE1} = $artist;
$tags->{TALB} = $album;
$tags->{TRCK} = $track_num;
set_tag($orig,$tags);
}
$count++;
}