Thread MP3 ID3 Tag (46 answers)
Opened by timehandler at 2012-06-04 15:49

Gast timehandler
 2012-06-12 18:09
#158920 #158920
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.

more (23.9kb):
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)

View full thread MP3 ID3 Tag