Anzeige:
Ergebnis 1 bis 8 von 8

Thema: ID3v2-Tags ändern per Script

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39

    ID3v2-Tags ändern per Script

    Hallo mrunixerianer ,
    ich habe folgendes Problem.

    Ich möchte gerne ein Shell-Schript schreiben, für das id3v2 (mp3).
    Leider hab ich kein Plan vom Shellscript.
    Und zwar soll das Script selbständig in einem angegeben Verzeichnis nach schauen, wie viele mp3s vorhanden sind und dies dann umbenennen.

    Das ganze soll ca. so ablaufen.
    Code:
    Schau in dem angegebenen Verzeichnis nach, wie viele Dateien vorhanden sind.
    Schleife (Durchläufe = Anzahl der Dateien) {
        Hole nächsten Dateinamen (wenn vorhanden) und speichere den Interpret und Titel in 2 verschiedene Variablen.
        $Variable1 = Interpret
        $Variable2 = Titel
        # (Die Datei ist immer gleich aufgebaut „<Interpret> - <Titel>)
        Lösche den kompletten id3v1/id3v2 Tag.
        Schreibe den id3v1-Tag neu 
        Schreibe den id3v2-Tag neu
    }
    Das Hauptproblem:
    Hole nächsten Dateinamen (wenn vorhanden) und speichere den Interpret und Titel in 2 verschiedene Variablen.
    $Variable1 = Interpret
    $Variable2 = Titel

    Ich weiß nicht wie ich das bewerkstelligen soll.

    Kann mir vielleicht jemand von euch einen Tip bzw. Denkansatz geben?

    Gruß Olly

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    1)
    Code:
    for i in `ls $verzeichnis`
    do
    #...
    done
    2) cut -d'-' um Interpret und Titel aufzutrennen

    Schreiben von id3-tags aus der Shell: zb id3v2 (http://id3v2.sourceforge.net/)

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.10.2006
    Beiträge
    34
    Ich habe auch gerade meine Musiksammlung auf Vordermann gebracht.
    Wenn Du Lust hast, kannst Du folgendes kleines Skript verwenden:
    PHP-Code:
    #!/usr/bin/perl -w
    #

    #
    #
    my $INPUT='/Pfad/zu/den/mp3s/';
    chdir $INPUT;

    my @mp3s;
    push (@mp3sglob "*.mp3");
    push (@mp3sglob "*.MP3");

    my $anzahl = @mp3s;
    print 
    "Es sind $anzahl Songs in $INPUT \n";

    foreach (@
    mp3s) {
        
    my @title split(/\-/, $_);
        
    my $artist =  $title[0];
        
    my $song $title[1];
        print 
    "Tags für $_ werden geschrieben...";
        
    my $befehl "id3v2 -a \"$artist\" -t \"$song\" \"$_\"";
        
    qx($befehl);
        print 
    "done. \n";
        } 
    Ist allerdings Perl und kein Shellscript.

    Grüße.
    craano.

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    thx erstmal,
    ich kann zwar kein Perl aber ich hab das Script mal meinen Bedürfnissen angepasst.

    Das sieht jetzt so aus

    Code:
    #!/usr/bin/perl -w
    #
    #
    #
    #
    my $INPUT='/home/olly/tmp/';
    chdir $INPUT;
    
    my @mp3s;
    push (@mp3s, glob "*.mp3");
    push (@mp3s, glob "*.MP3");
    
    my $anzahl = @mp3s;
    my $mp3ex = ".mp3";
    print "Es sind $anzahl Songs in $INPUT \n";
    print "Tags werden gelöscht ...";
    my $id3delete = "id3v2 -D *.mp3";
    qx($id3delete);
    print "done. \n";
    foreach (@mp3s) {
        my @title = split(/ - /, $_);
        my $artist =  $title[0];
        my $song = $title[1];
        my $realsong = substr($song,0,length($song) - 4);
        print "Tags für $_ werden geschrieben...";
        my $befehl = "id3v2 -a \"$artist\" -t \"$realsong\" \"$_\"";
        qx($befehl);
        print "done. \n";
        }
    print "Die mp3s werden gegaint...\n";
    my $befehl2 = "mp3gain -r -c -d 5 *.mp3";
    qx($befehl2);
    print "done. \n";
    und es läuft genau so wie ich mir es vorgestellt habe.

    Gruß Olly

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Zitat Zitat von jeebee Beitrag anzeigen
    1)
    Code:
    for i in `ls $verzeichnis`
    do
    #...
    done
    Da ist ja wieder einer. Ein Anwärter für den Useless use of backticks-Award! Gratulation.

    Ein einfaches
    Code:
    for f in * do: <befehl>; done;
    reich absolut aus.

    TME

  6. #6
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    tja, was solls, nicht jeder hier ist Shell-Skript-Guru...

  7. #7
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Zitat Zitat von Thomas Engelke Beitrag anzeigen
    Ein einfaches
    Code:
    for f in * do: <befehl>; done;
    reich absolut aus.
    absolut?
    Code:
    for f in *; do <befehl>; done
    MfG,
    Rainer
    There's nothing a good whack with a hammer won't fix!

  8. #8
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Zitat Zitat von rais Beitrag anzeigen
    absolut?
    Code:
    for f in *; do <befehl>; done
    Hehe, verdiente Kritik. Ich wußte nicht mehr genau, ob das ";" dorthin gehört und hatte in der Kürze keine Testmaschine zur Hand.

    Ein Syntaxcheck sagt mehr als 1000 Worte.

    TME

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •