need a bash script to batch convert .wav to .mp3
hello everybody,
i take it there is no bash subforum so ill just right here. i have installed the lame encoder, and i wanna write a bash script that reads the contents of a given folder, and runs a command for each file in it.. so basically batch process wav to mp3 conversion. the files will obviously be *.wav files, the output should be the same file names with .mp3 instead of .wav, and the command is 'lame' along with some options.... i know little of bash in order to carry that out and im hoping that i will start understanding a few things once i see how this hopefully simple script works... anyone has any idea/ has done it ? nass |
I'd do something like this:
Code:
#!/bin/bash |
working on the aforementioned problem, the first thing to do is to actually me able to 'read' the filenames into lame
(lame works as: lame [OPTIONS] <input file> <output file>) so i was thinking to use Code:
ls | grep '\(.*\.\)wav.*' - any text (ie the filename) followed by - a dot followed by - the extension 'wav' followed by - any other text that might be there after, or nothing.. the parenthesis: \( \) are there to save the matched filename followed by the dot, so as to be used with the extension mp3 later on. im supposed to use \1 to address the filename (the matched expression in the parenthesis) but i haven't figured that out far yet. and at any rate i am not sure how i will concatenate this \1 with the word 'mp3'.. so i hope i got this right so far.. if you know of another way or can help in this way please do so:) nass |
Did you test my script? In my opinion, it is the most straightforward way. I'm not aware of any way to use grep for string replacement.
|
i was typing while you replied:) had i known of your script, i wouldn't even have bothered trying the much more complex grep /sed way... if there is any that is
i tested the script and it works fine... thank you very much! i will try to make a script so as to allow arguments to be input when calling it. just out of curiosity though i've reached this far: lame -m j -h -V 3 --vbr-new `grep '.*\.wav'<list` `sed s/wav/mp3/g<list` lame [ OPTIONS ]< input file list >< output file list > list is a temporary file created as ls > list the thing is now lame exits saying 'excess arguments'... could it be that the whole list is dumped at once both from grep and from sed instead of one file at a time? - i think it is.. is there a way to serialize that ? thnk you once again for your help nass |
Quote:
Could that also be..... $(basename "$FILE" .wav).mp3 ? |
First make your list. Then
Code:
for i in `cat list` |
Quote:
|
Quote:
|
ok so the script now looks like
Code:
#!/bin/bash i also placed the script in /usr/bin so everyone can access it and i added the $PWD so as to be usable anywhere on the filesystem. problem is that in a folder name has spaces PWD returns an incomplete path so if , say, the path is /mnt/hd/my\ stuff echo $PWD will return /mnt/hd/my which is not a valid directory.... how can i overcome this? |
You should not need the $PWD. It will act on the current working directory as-is.
|
Well, $PWD should not return an incomplete path as long as you put it in quotes like:
Code:
"$PWD" |
quite right, i remove the $PWD and it works like a charm.
thank you very much |
Quote:
If you like to dig deeper, I saw this first few days ago in a great article on bash parameters: http://www-128.ibm.com/developerwork...BashParameters |
Wouldn't be Linux if there weren't 5 ways to get the same thing done. :)
|
All times are GMT -5. The time now is 05:05 PM. |