Diese Seite ist optimiert für eine Auflösung von min. 1280x1024.

facebook   google   twitter   digg   email  





MP3s zusammenfuehren und komprimieren



Da ich oft MP3s im random-Mode auf einem MP3-Player höre und auch oft z.B. Live-Alben habe bei denen die Titel einzeln gespeichert sind (ich diese aber auch bei random nacheinander hören will), habe ich mir dafür ein kleines Linux-Shellscript gebaut. Dieses führt MP3s zusammen, komprimiert sie und schreibt das id3-Tag nachträglich rein, so wie der Ordner heisst. Man braucht dazu die Programme mp3wrap (zusammenführen), mid3v2 (id3-Tags auslesen und schreiben) und lame (Kompression ändern).

Wie funktioniert das Script?


  • Das Script liest aus dem Ordner alle Dateien mit der Endung "mp3" aus.
  • Dann wird ein Ordner angelegt und alle gefundenen Dateien werden dorthin kopiert.
  • Danach werden alle Dateien zu einer zusammengeführt mittels mp3wrap.
  • Anschliessend wird die erzeugte Datei neu komprimiert.
  • Zum Schluss wird dann noch das id3-Tag geschrieben.

Das Script an sich


Das Script an sich sieht so hier aus:
#!/bin/bash
# Dieses Script fuert mehrere MP3s zusammen zu einem und
# aendert die Qualitaet auf die gewuenschte ab.

#Ordnernamen fuers temporaere umkopieren und resampeln
NEW='new';

#Pruefen, ob Ordner fuer tmp existiert
if [ -e "./$NEW" ]; then
	echo "";
	echo "";
        echo "Verzeichnis $NEW existiert bereits mit folgendem Inhalt:"
	ls -1 ./$NEW;
	echo "";
	echo "Ordner mit Inhalt loeschen und neu anlegen? (y/N)";
        read YN
	echo "";
	echo "";
        if [ "$YN" = "y" ]; then
                rm -r ./$NEW;
                mkdir ./$NEW;
        else
		echo "Script abgebrochen!";
                exit
   fi;
else
        mkdir ./$NEW;
fi;

echo "Lese Datei(en) ein...";
ls -1 *mp3 | while read OLDFILE ;
do
	NEWFILE=`echo $OLDFILE | tr -d ' '`;
	echo "mv ${OLDFILE} ${NEWFILE}"
	cp "$OLDFILE" "./$NEW/$NEWFILE"
done;
echo "";
echo "";

#In temporaeren Ordner wechseln
cd ./$NEW;
echo "Die Dateien werden nun in der folgenden Reihenfolge zusammengefuehrt:";
ls -1 *mp3;
echo "Passt das so? (Y/n)";
read YN;
echo "";
echo "";
if [ "$YN" = "n" ]; then
	while [ "$YN" = "n" ];
	do
		echo "Wir machen nun ein 'ls *mp3 | sort -t -k (-n)'";
		echo "Mit welchem Zeichen werden die Felder getrennt?";
		read T;
		echo "In welcher Spalte soll sortiert werden?";
		read K;
		echo "Numerisch (-n) sortieren? (Y/n)";
		read NUMERISCH;
		if [ "$NUMERISCH" != "Y" ]; then
			N="";
		else
			N="-n";
		fi;
		echo "Die Dateien werden nun in der folgenden Reihenfolge zusammengefuehrt:";
		ls *mp3 | sort -t $T -k $K $N;
		echo "Passt das so? (Y/n)";
		read YN;
	done;
	mp3wrap ./album.mp3 `ls *mp3 | sort -t $T -k $K $N`;
else
	mp3wrap ./album.mp3 `ls *mp3`;
fi;
cd ..;

#Neuen Namen ermitteln
DEEP=`pwd | grep -o / | wc -l`
NEUERNAME=`pwd | cut -d/ -f $(echo $DEEP +1 | bc) | tr -d " "`;
echo $NEUERNAME;

#Neuen Titel umverschieben
mv ./$NEW/album_MP3WRAP.mp3 ./$NEUERNAME.mp3;

#Temporaere Dateien loeschen
echo "Loesche temporaere Dateien:";
rm -rf ./$NEW

echo "Mit wieviel Bit soll das MP3 resampelt werden?";
echo "";
echo "1 -  8";
echo "2 - 11.025";
echo "3 - 12";
echo "4 - 16";
echo "5 - 22.05";
echo "6 - 24";
echo "7 - 32";
echo "8 - 44.1";
echo "9 - 48";
echo "";
read RESAMPLE;

case $RESAMPLE in
        1) R="8";;
	2) R="11.025";;
	3) R="12";;
	4) R="16";;
	5) R="22.05";;
	6) R="24";;
	7) R="32";;
	8) R="44.1";;
	9) R="48";;
esac;

#MP3 umrechnen
lame -V5 --vbr-new --resample $R "$NEUERNAME.mp3" "NEW_$NEUERNAME.mp3";

echo "Der Dateiname schaut so hier aus (ohne Endung):";
echo "";
echo "$NEUERNAME";
echo "";
echo "Durch welche Zeichen soll der Name zerlegt werden um im id3-Tag";
echo "das Album, den Artist und den Titel des Liedes zu erhalten?";
read TRENNER;
echo "Welche Spalte ist das Album?";
read TMPALBUM;
echo "Welche Spalte ist der Artist?";
read TMPARTIST;
echo "Welche Spalte ist der Titel?";
read TMPTITEL;
echo "Zusammenfassung:";
ALBUM=`echo $NEUERNAME | cut -d\$TRENNER -f $TMPALBUM`;
ARTIST=`echo $NEUERNAME | cut -d\$TRENNER -f $TMPARTIST`;
TITEL=`echo $NEUERNAME | cut -d\$TRENNER -f $TMPTITEL`;
echo "ALBUM:  $ALBUM";
echo "ARTIST: $ARTIST";
echo "TITEL:  $TITEL";
echo "Schreibe das in 5 Sekunden nun in das id3-Tag...";
sleep 5;

#id3-Tag schreiben
mid3v2 -A "$ALBUM" -a "$ARTIST" -t "$TITEL" -T "" -g "" "NEW_$NEUERNAME.mp3";

#Neuen Titel umverschieben
mv NEW_$NEUERNAME.mp3 $NEUERNAME.mp3;



  logo