PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MP3 Dateien anhand von ID3 Tags umbenennen


Senior Sanchez
2003-10-05, 18:07:26
Hallo,

kennt jemand nen gutes linux-tool, das es möglich macht, MP3s anhand ihrer id3-tags umzubenennen? Ich brauche das nämlich, da meine ganzen mp3-dateinamen verkorkst sind und sich das bei ner großen Anzahl von Dateien unhandlich macht, die einzeln umzubenennen.


mfg Senior Sanchez

Harleckin
2003-10-05, 22:21:45
Wenn du bis morgen warten kannst, schreibe ich so ein kleines Script.

Senior Sanchez
2003-10-05, 23:17:28
Jo, sicher kann ich das.

Vielen dank, wäre nett wenn de das für mich machen würdest.


mfg Senior Sanchez

BananaJoe
2003-10-05, 23:29:05
evlt. kannst ja bis Harleckins Zauberscript da ist easytag probieren. Der kann sowas (vielleicht) auch.
:)

Harleckin
2003-10-06, 20:16:35
Hi, wie versprochen mein bescheidenes Script. Es ist keineswegs perfekt, eher die erste experiementelle Version.
Im genaueren gibt es keine Fehlerbehandlung, d.h. unter anderen 'id3' und 'gawk' müssen installiert sein, leere ID3-Tags und Sonderzeichen werden fehlerhaft verarbeitet.
Zum Test empfehle ich jeden vorher eine leeres Verzeichnis zu Erstellen und versuchsweise eine geeignete mp3 zu kopieren.


#!/usr/bin/gawk -f
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Description: MP3 Dateinamen anhand ihres ID3-Tag bestimmen.
#
# Usage: 'ls *mp3 | gawk -f id3.awk'
#
# Keine Fehlerbehandlung!! (leere ID3-Tags, Sonderzeichen in Dateinamen)
#
# $ id3.awk,v 0.1 2003/06/10 15:53 friedmanns Exp $

BEGIN {
# Feldtrenner
FS=":"
}

{
# Falls "(" oder ")" im Dateinamen vorkommt, dieses Zeichen entwerten
gsub(/\(/,"\\(",$1)
gsub(/\)/,"\\)",$1)

filename[NR]=$1

command="id3 -lR " $1
# zeilenweise die Ausgabe einlesen, um diese später zu verwerten
while ((command | getline) > 0) {
# Leerzeichen durch Unterstriche ersetzen -> leichter zu debuggen
gsub(/\ /,"_",$2)

if ($1 ~ /Title/) {
# überfluessige Underscores entfernen
for (i=29;i>=0;i--) {
if (substr($2,i,1) !~ /_/) {
m_title[NR]=substr($2,2,i-1)
break
}
}
print $1" : "m_title[NR]
}
if ($1 ~ /Artist/) {
# überfluessige Underscores entfernen
for (i=29;i>=0;i--) {
if (substr($2,i,1) !~ /_/) {
m_artist[NR]=substr($2,2,i-1)
break
}
}
print $1" : "m_artist[NR]
}
if ($1 ~ /Album/) {
# überfluessige Underscores entfernen
for (i=29;i>=0;i--) {
if (substr($2,i,1) !~ /_/) {
m_album[NR]=substr($2,2,i-1)
break
}
}
print $1" : "m_album[NR]
}
if ($1 ~ /Track/) {
# überfluessige Underscores entfernen
for (i=29;i>=0;i--) {
if (substr($2,i,1) !~ /_/) {
m_track[NR]=substr($2,2,i-1)
}
}
print $1" : "m_track[NR]
}
}
system ("mv "filename[NR]" "m_artist[NR]"-"m_album[NR]"-"m_track[NR]"-"m_title[NR]".mp3")
}
END {
print "Files: "NR
}

P.S. ja ich weiss, "# überfluessige Underscores entfernen" kann man in eine Funktion ausgliedern.

Senior Sanchez
2003-10-07, 00:03:33
Hey dankeschön, ich werde es morgen gleichmal ausprobieren. Aber schon mal herzlichen Dank für deine Mühe.


mfg Senior Sanchez