PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wav to mp3 recursive



CoolTux
15.07.07, 17:35
Ich habe ein kleines Skript welches mir meine wav files in mp3 umwandelt. Leider kann das Skript es nur für das jeweilige Verzeichniss in dem ich mich befinde



#!/bin/bash
for soundfile in *.wav
do
# mplayer -vo null -ao pcm:file=audiodump.wav "$soundfile"
lame -h --r3mix -b 192 "$soundfile" "${soundfile%.wma}.mp3"
rm "$soundfile"
done


Wie mache ich das ganze das ich ein Ververzeichnis angeben kann und er alle Dateien in den Unterverzeichnisse mit umwandelt und die mp3 files auch in den richtigen Unterverzeichnissen belässt?


Danke
CoolTux

tschloss
15.07.07, 18:00
find mit -type d und -exec ... könnte dir helfen!
"man find"

Ede
15.07.07, 18:48
http://www.linuxforen.de/forums/showthread.php?t=237223
In Beitrag #20 ist die Lösung Schwarz auf Weiß, falls du keine Lust hast, den ganzen Thread zu lesen.

CoolTux
15.07.07, 20:28
Mit find alleine komme ich leider nicht wirklich weiter. Da streikt mein Skipt.
@Ede
Die Seite hatte ich gefunden aber leider nicht verstanden. Ich weiß das ich mit sed irgendwie die langen Pfadenamen wegmachen muß. Denn daran scheint sich mein Skript zu stören. Aber wie genau? Wäre es möglich das mir einer mein Skript anpasst und erklärt.

Vielen lieben Dank
Euer Leon


PS: Ich weiß das ich mehr lernen würde wenn ich jetzt mein Buch nehmen wurde welches ich habe. Aber im Enddefekt ist es für eine Freundin und da fehlt ein wenig die Lust mich jetzt 6 Stunden zum lernen hinzusetzen. Ich hoffe Ihr habt Verständnis.

zyrusthc
15.07.07, 21:15
Vielleicht so... Ungetestet!

#!/bin/bash
echo "Verzeichnis angeben:"
read DIR
for soundfile in $(find $DIR -type f | grep .wav)
do
lame -h --r3mix -b 192 "$soundfile" "${soundfile%.wma}.mp3"
rm "$soundfile"
done

EDIT: Habe es eben getestet , funktioniert wie gewünscht!

Greeez Oli

Ede
15.07.07, 21:22
So könnte das Script (du kannst es /usr/local/bin/wav2mp3 nennen) funktionieren:

#!/bin/bash
cd "$1"
if [ "$(find -maxdepth 1 -type f|grep -m 1 wav)" ]
echo "$1"
for soundfile in *.wav
do
lame -h --r3mix -b 192 "$soundfile" "${soundfile%.wma}.mp3"
rm "$soundfile"
done
fi
Also als erstes in der Konsole mit
cd Verzeichnisins Verzeichnis, wo alle Unterverzeichnisse und wav-Dateien drin sind, wechseln, dann:
find -type d -exec wav2mp3 {} \;

Das Script solltest du natürlich zuerst in einer Testumgebung ausprobieren, damit sich deine Freundin am Ende nicht ärgert.
Du kannst noch
normalizein dein Script einbauen. Ist oft ganz sinnvoll.

CoolTux
15.07.07, 21:38
Vielen lieben Dank an Euch. Ich werde es morgen wenn ich mehr wach bin testen und dann schauen wir mal.
Ihr seid spitze.

Gruß
CoolTux

CoolTux
17.07.07, 13:47
Sorry aber ich muß da mal ein unhöffliches SCHUPS machen

HEMIcuda
17.07.07, 14:36
Warum?

'cuda

CoolTux
17.07.07, 15:22
Weil ich gerade feststellen musste das der Beitrag den ich gestern gemacht habe auf einmal weg ist.

Also ich habe das Problem das zwar das Skript von zyrusthc soweit geht, es aber Probleme mit nicht konformen Verzeichnis und Dateinamen gibt. Sonderzeichen und Leerstellen in den Verzeichniss und Dateinamen sorgen dazu das ein Verzeichniss /tolle musik mit dieser Fehlermeldung abbricht


kann Verzeichnis tolle nicht finden
kann Verzeichnis musik nicht finden

Er löst also das Verzeichnis in 2 Verzeichnisse auf.



Gruß CoolTux

PS: Das mit dem fehlenden Beitrag ist echt komisch.

HEMIcuda
17.07.07, 15:51
Aender mal $DIR in "$DIR".

'cuda

CoolTux
20.07.07, 18:52
Hat leider auch nichts gebracht



Could not find "James".
Could not find "Horner".
Could not find "%2F".
Could not find "Waiting".
Could not find "For".
Could not find "Disaster".
lame: unrec option .
lame: -m mode must be s/d/j/f/m not p3
LAME 32bits version 3.97 (http://www.mp3dev.org/)

usage: lame [options] <infile> [outfile]

<infile> and/or <outfile> can be "-", which means stdin/stdout.

Try:
"lame --help" for general usage information
or:
"lame --preset help" for information on suggested predefined settings
or:
"lame --longhelp"
or "lame -?" for a complete options list

Could not find "A".
Could not find "Privilege.wav".
Could not find "/home/kerstin/myfiles/Media/Musik/Filmmusik/Apollo".
Could not find "13/Various".
Could not find "Artists".
lame: unrec option .
lame: -m mode must be s/d/j/f/m not p3
LAME 32bits version 3.97 (http://www.mp3dev.org/)

usage: lame [options] <infile> [outfile]

<infile> and/or <outfile> can be "-", which means stdin/stdout.

Try:
"lame --help" for general usage information
or:
"lame --preset help" for information on suggested predefined settings
or:
"lame --longhelp"
or "lame -?" for a complete options list

Could not find "23".
lame: unrec option .
lame: -m mode must be s/d/j/f/m not p3
LAME 32bits version 3.97 (http://www.mp3dev.org/)

usage: lame [options] <infile> [outfile]

<infile> and/or <outfile> can be "-", which means stdin/stdout.

Try:
"lame --help" for general usage information
or:
"lame --preset help" for information on suggested predefined settings
or:
"lame --longhelp"
or "lame -?" for a complete options list


Das hier zum Beispiel



Could not find "Privilege.wav".
Could not find "/home/kerstin/myfiles/Media/Musik/Filmmusik/Apollo".
Could not find "13/Various".
Could not find "Artists".


ist eine Datei. Zu finden unter

/home/kerstin/myfiles/Media/Musik/Filmmusik/Apollo\ 13/Various\ Artists\ -\ 13\ -\ James\ Horner\ %2F\ Master\ Alarm.wav

Ist es wirklich so kompliziert mit Unterverzeichnissen?


Danke für Eure Hilfe

HEMIcuda
22.07.07, 13:55
Ist es wirklich so kompliziert mit Unterverzeichnissen?

Danke für Eure Hilfe

Wenn man der Meinung ist, unbedingt Whitespaces in Dateinamen verwenden zu muessen: ja.

'cuda

BedriddenTech
22.07.07, 14:35
Du mußt komplett "find" nutzen, um die Platzhalter für die Dateinamen bzw. um die Variablen Anführungzeichen setzen und dann ist gut. Man kann und darf gerne Leerzeichen in den Dateinamen haben, das ist überhaupt kein Problem.


find /dein/musikverzeichnis -type f -name "*.wav" -exec wav2mp3.sh "{}" \;

Die wav2mp3.sh könnte dann so aussehen:


#!/bin/sh

source_filename="$1"; shift
target_filename=$(echo "$source_filename" | sed 's,wav$,mp3,')
lame -h --r3mix -b 192 "$source_filename" "$target_filename"

Wenn du dann sicher bist, daß die MP3-Dateien richtig erzeugt wurden und alles in Ordnung ist, kannst du alle WAVs löschen:


find /dein/musikverzeichnis -type f -name "*.wav" -exec rm -v "{}" \;

Der ganze Code ist nicht getestet, müßte aber funktionieren.

HTH.

CoolTux
24.07.07, 12:04
Ich möchte mich bei allen Beteiligten ganz herzlich bedanken. Es hat nun wunderbar funktioniert. Meine Bekannte ist mehr wie Glücklich ;)


Bis bald
CoolTux