mp3info

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Der Shell-Befehl mp3info zeigt und verändert die ID3-Tags in MP3-Dateien.

Wid das Programm direkt aus dem Quellcode erstellt, so erhält man nach dem Übersetzen zwei Versionen.

  • mp3info ist eine Befehlszeilenversion, die sich für den automatisierten Einsatz in Skripten eignet.
  • gmp3info ist eine Version mit grafischer Oberfläche und eignet sich besonders gut, um einzelne ID3-Tags zu verändern.

Installation

Herunterladen: http://www.ibiblio.org/mp3info/

$ tar xzf mp3info-0.8.5a.tgz
$ cd mp3info-0.8.5a
$ vi Makefile
$ make
# checkinstall
# yast -i /usr/src/packages/RPMS/i386/mp3info-0.8.5a-1.i386.rpm

Falls das Kompilieren aus dem Tarball mit Fehler abbricht kann auch das RPM-Paket zur Installation verwendet werden.

Ubuntu 12.04 Precise Pangolin

$ sudo apt-get install mp3info

Verwendung

Aufruf der interaktiven Version:

$ mp3info -i file.mp3

                                 MP3Info 0.8.5a

┌──────────────────────────────────────────────────────────────────────────────┐
│Song Title:    Reconnez chérie                                                │
│Artist Name:   Wreckless Eric                                                 │
│Album Name:                                                                   │
│Year:                                                                         │
│Comment:                                                                      │
│Track:                                                                        │
│Genre:                                                                        │
└─── (1/1) Wreckless Eric-Reconnez cherie.mp3 ──────────── Press ^C to quit ───┘

Auslesen der ID3-Tags. Dabei wird die Ausgabe von mp3info mit "-p" so formatiert, dass zuerst die Tracknummer (%n), dann ein "#" und schliesslich der Dateiname (%f) angezeigt wird. Die Informationen zu einer Datei beendet ein Zeilenumbruch (\n). Der Befehl sort bringt die Zeilen wieder in die richtige Reihenfolge und awk operiert die störenden Zeichen wieder heraus - dazu wird "#" als Trennzeichen zwischen Feldern (-F)benutzt und nur das zweiten Feld ({print $2}) mit dem ursprünglichen Dateinamen ausgegeben.

$ mp3info -p '%n#%f\n' *.mp3 | sort -n | awk -F# '{print $2}'

Beispielskript "mp3sort".

#!/bin/bash
# Name     mp3sort

# Find first file
FFILE='ls | grep -i .mp3 | head -1'

# Check for track number
TNR='mp3info -p %n "$FFILE"'
if [ "#$TNR" == "#" ]; then
   echo "Warning: no track number in $FFILE"
   exit 1
fi

# "#" must not appear in names
mp3info -p '%n#%f\n' *.mp3 | sort -n | awk -F# '{print $2}'

Setzen der ID3-Tags.

#!/bin/bash
# Name         mp3set
# Description  Set ID3 tag track number

# IFS is set to interpret newlines as field separators
IFS="
"

for i in *.mp3; do
   TNR="'echo $i | awk -F '- ' '{print $1}'"
   echo "Setting track number $TNR in $i"
   mp3info -n $TNR $i
done

Beispiele

Erstellen eines Inhaltsverzeichnisses aus den vorhandenen ID3-Tags der MP3-Sammlung. Folgende Schleife durchsucht in einem Verzeichnis alle MP3-Dateien und gibt formatiert die Nummer des Tracks, den Titel und den Interpreten aus

for i in *.mp3; do
  mp3info -p "%02n %t %a\n" "$i"
done | sort | lpr

Soll das für eine ganze Verzeichnis-Hierarchie gemacht werden (bei mir gilt die Struktur Anfangsbuchstabe/Interpret/Album), so geht das wie folgt. Für jedes aufgefundene Verzeichnis wird eine Liste erstellt und als separater Druckauftrag zu Papier gebracht. Bei anderer Organisation auf der Festplattemuss evtl. der Parameter "-mindepth 3" entsprechend angepasst werden.

base_dir=`pwd`
  find . -type d -mindepth 3 -print | while read d; do
    cd "$base_dir/$d"
    for i in *.mp3; do
      mp3info -p "%02n %t %a\n" "$i"
    done | sort | lpr
  done

Im folgenden wird darauf verzichtet, für jedes gefundene Verzeichnis einen eigenen Druckafutrag zu starten und stattdessen ein einzelner Job aufgebaut. Wie zu sehen ist, werden nur die Pipes zum Weiterreichen der Ausgaben ein wenig anders angeordnet.

base_dir=`pwd`
find . -type d -mindepth 3 -print | while read d; do
  cd "$base_dir/$d"
  basename "$d"
  for i in *.mp3; do
    mp3info -p "%02n %t %a\n" "$i" || break
  done | sort
  echo
done | lpr

Weblinks