Hilfe beim Script schreiben??

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

Hilfe beim Script schreiben??

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.

Code: Alles auswählen

find ./ -true -exec lame -b 128 '{}' \;
ü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

Re: Hilfe beim Script schreiben??

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

Re: Hilfe beim Script schreiben??

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

Re: Hilfe beim Script schreiben??

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

Re: Hilfe beim Script schreiben??

Beitrag von latenite » 02.01.2009 02:57:59

danke wow :D

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... :cry: :cry:

Danke

yeti

Re: Hilfe beim Script schreiben??

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

Re: Hilfe beim Script schreiben??

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

Code: Alles auswählen

lame -b 128 $SRC_DIR$i $DEST_DIR$i
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

Antworten