fix an audio conversion script to work through multiple directories and convert mp3s to ogg vorbis

Antonio Olivares olivares14031 at gmail.com
Sat May 7 17:56:23 UTC 2011


Dear kind FreeBSD users,

I have a dilemma, I have a collection of songs in mp3 form from old
cd's that I ripped.  Sadly, the mp3s can play but with a screeching
sound :(.  I have confirmed that by converting the mp3's to ogg vorbis
format, the screeching sound is lost.  So I have decided to convert my
songs to ogg vorbis.  I have found a script that converts from any
sound format to mp3, but I modified it to convert to ogg at 128 k
which is default.  The script that I modified is found at :

http://en.linuxreviews.org/HOWTO_Convert_audio_files

However, when I run it, I have to switch to the folder where the mp3's
are at and run

$ ./convert2ogg mp3
and when it is done
$ ./renamer

to rename the songs from *.mp3.ogg to *.ogg and then delete the mp3's
manually.

==========================================================
[olivares at acer-aspire-1 Download]$ cat renamer
#!/bin/sh

for i in *.mp3.ogg
 do
   mv "$i" "$(echo $i|sed 's/mp3.ogg/ogg/g')"
 done

[olivares at acer-aspire-1 Download]$ cat convert2ogg
#!/bin/sh
#
# Usage: convertoogg fileextention
#
if [ $1 = "" ];then
  echo 'Please give a audio file extention as argument.'
  exit 1
fi

for i in *.$1
do
  if [ -f "$i" ]; then
  rm -f "$i.wav"
  mkfifo "$i.wav"
  mplayer \
   -quiet \
   -vo null \
   -vc dummy \
   -af volume=0,resample=44100:0:1 \
   -ao pcm:waveheader:file="$i.wav" "$i" &
  dest=`echo "$i"|sed -e "s/$1$/ogg/"`
  oggenc -b 128 "$i.wav" "$dest"
  rm -f "$i.wav"
fi
done

==========================================================

My question is the following:
How can I run the script to recursively find all mp3's and convert
them to ogg vorbis(with ogg extension already in place/or rename them
in one step[instead of running two scripts] and deleting the mp3's)
all in one time?

Say I have a folder with songs:

Los Invasores de Nuevo Leon -> Disc 1
                                              -> Disc 2
                                              -> Disc 3
                                                     .
                                                     .
                                               -> Disc 20

And instead of going in manually and running the above scripts through
each folder, run a modified script that will recursively find all
mp3's in the directories and convert them to ogg, rename them and
delete the mp3's?  I know it can be done, but I am not expert and am
afraid to screw up [see thread of updating freebsd with portmaster -af
in case you have doubts].  I tend to shoot myself in the foot :(

Something like
$ find -iname "*.mp3" -exec ./convert2ogg ~/Los\ Invsores\ de\ Nuevo\ Leon/mp3

or similar that can do the job with a modified convert2ogg file that
can rename the output correctly in the first step.  Any
suggestions/advice/comments/observations are welcome.  I will attempt
this on Monday on my machine at work since it is the one that has the
screeching sound :(

I will also try to get back a machine[the one with # portupgrade -af ,
# portmaster ?,etc]

Regards,

Antonio


More information about the freebsd-questions mailing list