Thread MP3 ID3 Tag
(46 answers)
Opened by timehandler at 2012-06-04 15:49
habe jetzt den code erweitert damit ich die tags von der mp3 datei auch ändern kann, nur verstehe ich nicht richtig wie ich die neuen tags an die mp3 datei übergeben kann.
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 #!perl use warnings; use strict; use MP3::Tag; use File::Find; use File::Copy; use Cwd; my $cwd = getcwd; # Arbeitsverzeichnis my $mp3dir = $cwd; # Default print "Pfad angeben wo die MP3's sind!!! [keine Eingabe - Aktuelles Verzeichnis]\n"; while (my $input = <STDIN>) { last if $input !~ /\S/; # leere Eingabe chomp($input); if (-d $input) { # Verzeichnis existiert? $mp3dir = $input; last; } print "Verzeichnis '$input' existiert nicht. Nochmal versuchen.\n"; } find(\&wanted, $mp3dir); # Achtung: Rekursive Suche sub wanted { return unless /\.mp3$/i; # alles was keine *.mp3 Endung hat wird # nicht beachtet my $filename = $_; my $fullpath = $File::Find::name; return if (-d $fullpath); # Verzeichnisse mit '.mp3' weglassen if (my $mp3 = MP3::Tag->new($fullpath)) { print "$_ (Tags: ", join(", ",$mp3->get_tags),")\n"; my ($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo(); print "* Song: $title\n" . "* Track: $track\n" . "* Artist: $artist\n" . "* Album: $album\n" . "* Comment: $comment\n"; <STDIN>; my $targetdir = make_dirname_from_tags($artist, $album); if (! $targetdir) { print "Fehler beim Erzeugen des Ordnernamens!\n"; return; } if (! -d $targetdir) { # existiert noch nicht? if (! mkdir("$cwd/$targetdir")) { warn "Kann Ordner '$cwd/$targetdir' nicht anlegen: $!"; return; } } print "\n\n Alle Tags aendern von $title? (1=y/0=n)\n"; if (<STDIN> == 1) { my $newTag = change_tag($artist, $title, $album); }else { print "Dann eben nicht!"; <STDIN>; } #or die "Could not move '$filename' zu '$cwd/$targetdir/':$!"; } } sub change_tag { my ($artist, $title, $album) = @_; print "Alter Name: $artist\n" .".....Neuen Namen eingeben:"; my $new_artist = <STDIN>; chomp $new_artist; print "\n $new_artist\n"; print "Alter Name: $title\n" .".....Neuen Namen eingeben:"; my $new_title = <STDIN>; chomp $new_title; print "\n $new_title\n"; print "Alter Name: $album\n" .".....Neuen Namen eingeben:"; my $new_album = <STDIN>; chomp $new_album; print "\n $new_album\n"; ## create a new tag my $id3v1->all($new_artist, $new_title, $new_album); $id3v1->write_tag(); <STDIN>; } sub make_dirname_from_tags { # Hier diejenigen Zeichen in den Tags ersetzen, die für Ordner-/Dateinamen # verboten sind. my @tags = @_; return if ! @tags; for my $tag (@tags) { $tag =~ s/[:,]/_/g; # Zeichenklasse noch anpassen } return(join ' - ' , @tags); } #move("/TagReader/01 Casper - XOXO.mp3","/TagReader/Casper - xoxo/01 Casper - XOXO.mp3"); als fehler erhalte ich Can't call method "all" on an undefined value at mkdir.pl line 92, modedit Editiert von pq: teilbaum Last edited: 2012-06-12 18:14:48 +0200 (CEST) |