Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 31.12.2008 02:39:36
Hallo Leute
ich benötige ein Script das ein Verzeichniss (mit Unterverzeichnissen und mp3s) kopiert und jede mp3 in der Kopie mit "lame" verkleinert und mit "id3cp" zu jeder Datei das IDTag wieder hinzufügt.
übernimmt zwar prima das verkleinern ABER wie kann ich die Ausgabe (die kleinere mp3) an id3cp pipen?
Code: Alles auswählen
find ./ -true -exec lame -b 128 '{}' && id3cp '{}' '_small.mp3\;
geht leider nicht....
Danke schon im Voraus
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 01.01.2009 20:10:41
Keiner der dich meiner erbarmt? Ein klein bischen Hilfestellung wäre echt gut.
Danke
-
lhfloss
- Beiträge: 261
- Registriert: 07.10.2007 21:02:15
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von lhfloss » 01.01.2009 20:15:15
latenite hat geschrieben:Code: Alles auswählen
find ./ -true -exec lame -b 128 '{}' && id3cp '{}' '_small.mp3\;
geht leider nicht....
Inwiefern? Erscheint eine Fehlermeldung?
Hinter dem _small.mp3 fehlt ein Anführungszeichen, so sollte es eher aussehen:
Code: Alles auswählen
find ./ -true -exec lame -b 128 '{}' && id3cp '{}' '_small.mp3'\;
Gruß, /root!
-
yeti
Beitrag
von yeti » 01.01.2009 20:59:31
Probiers doch mal annerserüm: Laß Dir von FIND zusammenschreiben, was zu tun ist ...
Code: Alles auswählen
find ./ -true -printf 'lame -b 128 %p && id3cp %p_small.mp3\n'
... und wenn's Dir gefällt und(!) es fehlerfrei ausschaut, pipe's einfach in SH oder BASH:
Code: Alles auswählen
find ./ -true -printf 'lame -b 128 %p && id3cp %p_small.mp3\n' | sh
Diese Vorgehensweise hat den Vorteil, daß Du in Ruhe mit FIND und dessen -prinf-Option Rumfehlern kannst und erst wenn es keine Fehler mehr gibt, wird es dann ausgeführt...
Ich nenn das "rapid coward's complex commandline design (and execution)"... und benutze das selbst oft bei komplexeren Aufgaben, denn es gibt tote Helden und lebende Feiglinge ... und ich lebe noch!
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 02.01.2009 02:57:59
danke wow
find ./ -true -printf 'lame -b 128 %p && id3cp %p_small.mp3\n'
leider geht das hiermit den Tags noch nicht
und bei mir kann ich die Zeildatei für lame nicht richtig angeben??? Help
Code: Alles auswählen
#!/bin/bash
echo "Where to create new \"small-mp3-directory\"?"
echo "Enter whole path now:"
read DEST_DIR
if [ -d "$DEST_DIR" ]; then
echo
else
echo "This directory does not exist, try again"
exit
fi
echo "Where are your mp3s located?"
echo "Enter whole path now:"
read MP3_DIR
if [ -d "$MP3_DIR" ]; then
echo
else
echo "This directory does not exist, try again"
exit
fi
mkdir $DEST_DIR/downsampled
mkdir $DEST_DIR/temp_orig
cp -Rv $MP3_DIR $DEST_DIR/temp_orig
cd $DEST_DIR/temp_orig
FILES="*"
for f in "$FILES"
do
echo "Processing $f file..."
find ./ -true -exec lame -b 128 {} $DEST_DIR/downsampled{} \;
done
#rm -Rv $DEST_DIR/temp_orig
mal abgesehen davon das das id3cp noch gar nicht mit drin ist...
Danke
-
yeti
Beitrag
von yeti » 02.01.2009 04:30:57
latenite hat geschrieben:find ./ -true -printf 'lame -b 128 %p && id3cp %p_small.mp3\n'
leider geht das hiermit den Tags noch nicht
Beim Zusammenspiel von LAME und ID3CP kann ich nicht helfen, die benutze ich Beide nicht...
ID3CP klingt nach IDs-Kopieren... vielleicht braucht das 'ne Quell- und 'ne Zieldatei?
Scheint so:
http://www.linux-user.de/ausgabe/2004/01/060-ootb/index.html hat geschrieben:Wer eine neue, bessere Version einer MP3-Datei erzeugt hat, überträgt die Tags der alten Datei mit
id3cp Datei_alt.mp3 Datei_neu.mp3
auf die neue. Darauf beschränken sich die Anwendungsmöglichkeiten dieses Tools allerdings, denn einzelne Tags (etwa Interpret und Albumtitel) von einem File auf ein anderes zu kopieren, geht nicht.
Dann könnte also ...
Code: Alles auswählen
find ./ -true -printf 'lame -b 128 %p && id3cp %p %p_small.mp3\n'
... ein Schritt in die richtige Richtung sein.
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 02.01.2009 17:49:30
ok ich habe heute mal n bischen geübt und mir fehlt nur noch ne Kleinigkeit:
Code: Alles auswählen
#!/bin/bash
SRC_DIR=$1
DEST_DIR=$2
if [ -d $SRC_DIR ]; then
cd $SRC_DIR
NUMBER_OF_MP3=`find ./ -type f -iname *.mp3* | wc -l`
echo $NUMBER_OF_MP3 "mp3s will be resampled"
echo "This will take approx." $[($NUMBER_OF_MP3 * 30)/60] minutes.
else
echo "Woring path to mp3 source directory, try again"
exit
fi
if [ -d $DEST_DIR ]; then
if [ -d $DEST_DIR/downsampled ]; then
rm -r $DEST_DIR/downsampled
mkdir $DEST_DIR/downsampled
else
mkdir $DEST_DIR/downsampled
fi
else
echo "\"$DEST_DIR\" directory does not exist, try again"
exit
fi
cd $SRC_DIR
COUNTER=$NUMBER_OF_MP3
for i in $(find ./ -type f -iname *.mp3* | sed 's/.//'); do
echo processing $i
echo $COUNTER mp3 remaining...
lame -b 128 $SRC_DIR$i $DEST_DIR$i
id3cp $SRC_DIR$i $DEST_DIR$i
COUNTER=$[ $COUNTER - 1 ]
done
In der Zeile
kommt der Fehler
Code: Alles auswählen
Can't init outfile '/home/kai/Desktop/123/songs_in_a_minor/03_how_come_you_dont_call_me.mp3'
Ist ja mir auch klar warum... denn gestartet habe ich das script mit:
Code: Alles auswählen
/home/kai/Desktop/mp3_small.sh /home/kai/Desktop/alicia_keys /home/kai/Desktop/123
und da existiert eben kein Unterverzeichniss namens "songs_in_a_minor"
FRAGE: wie "parse" ich den richtigen Pfad an lame? Muss ich vorher die Ordnerstruktur im Zeilverzeichnis recursiv erstellen? wenn ja, wie?
Danke