noqqe » blog | sammelsurium | photos | projects | about

*.wma zu *.mp3

2012-07-29 @ bash, convert, debian, konvertieren, konvertierung, lame, mp3, web, wma

Man denkt ja immer “Gott, wie viele von diesen $MUSIKFORMAT_A zu $MUSIKFORMAT_B Formatierungsblogposts kann mein Reader eigentlich vertragen”. Das denkt man zumindest so lange, bis man mal in die Verlegenheit gerät sowas zu brauchen.

Tatsächlich ist das alles andere als einfach. In 90% der Szenarien werden 0815 Probleme gelöst wie:

Ich möchte gerne ein Lied konvertieren. Wie geht das?

Dankeschön. Eins. Ich muss hier 25% meiner f*cking Musikbibliothek converten. Warum finde ich daüber keine Blogposts?

Naja. Dann eben selbst. Der Plan ist einfach. Verzeichnisse herausfinden, die *.wma Dateien enthalten und in eine Liste schreiben.

OIFS=$IFS
IFS=$'\n'
for i in $(find . -type f -iname '*.wma'); do
  dirname $i
done | sort | uniq > list.txt

Diese Liste mit Verzeichnissen abarbeiten, sodass ich die Lösung die ich im UbuntuUsers-Wiki gefunden habe einbetten kann:

for x in $(cat list.txt) ; do
  cd $x
  for i in *.wma ; do
    mplayer -vo null -vc  dummy -af resample=44100 -ao pcm:waveheader "$i"
    lame --preset standard audiodump.wav -o "`basename "$i" .wma`.mp3"
    rm -f $i
  done
  rm -f audiodump.wav
  cd - &>/dev/null
done
IFS=$OIFS

Das wurde gerade im Basis Verzeichnis meiner Biblio gestartet und rödelt jetzt erstmal vor sich hin. Obacht, gerade die IFS Umgebungsvariable ist bei dieser Variante extrem wichtig.

Eigentlich will man eher *.ogg. Würd ich auch echt gern. Aber mein mobiles Abspielgerät will nicht.

Comments (4)

bakudan on 2012-08-01T11:50:01
was mir etwas mutig erscheint ist das du davon ausgehst das der mplayer Aufruf keinen Fehler zurück gibt, geht hier etwas schief ist das Origenal weg, oder etwa nicht? Zumindest fällt mir hier jetzt nichts auf was dafür sorgt das das "rm -f" nicht ausgeführt wird.

noqqe on 2012-08-02T06:12:49
Oh ähm. Da hast du vollkommen recht, sollt ich wenigstens mit ein paar logischen UNDs verknüpfen.. Danke für den Hinweis!

bakudan on 2012-08-02T08:50:46
Bitte, ich war mir hier nur nicht sicher ob die shell hier vielleicht irgendwie abbricht, im Moment mache ich viel mit Windows Batch und da muss man extrem aufpassen, besonders auf solche Fälle (und auf & in File Namen ....). Kannst du mir hier ein Beispiel zeigen wie man das in bash sauber macht? Ich glaub es gibt hier bessere Möglichkeiten als wie unter Windows die Error-Variable mit If zu überprüfen.

noqqe on 2012-08-03T12:24:16
Da muss man nicht nur bei Batch aufpassen :) Hier eigentlich auch. lame --preset standard audiodump.wav -o "`basename "$i" .wma`.mp3" && rm -f $i Wäre sauberer :)