MP3 Dateien konvertieren in der Shell

5 03 2012

Von Mini bekomme ich die Interviews, die er im Kamikaze Radio sendet als MP3 Dateien geschickt. Da sich da im Laufe der Zeit doch einige Dateien angesammelt haben und mein Speicherplatz nicht unbegrenzt ist, reduziere ich die Qualität von 128 kBit/s auf 56 kBit/s, was bei reinen Sprachdateien vollkommen ausreicht ohne einen wirklich merkbaren Qualitätsverlust hinnehmen zu müssen. Um den Aufwand hierbei so gering wie möglich zu halten, habe ich mir ein kleines Bash Skript gebastelt, das diesen Vorgang vollautomatisch vornimmt.

#!/bin/bash

temp=$(mktemp)
TEILE=`ls *.mp3 |wc -l`

for DATEI in *.mp3; do
	eyeD3 -v "${DATEI}" >$temp

	TITLE=$(grep Title $temp | cut -d: -f2- | sed 's/^ //;s/>$//')
	TEIL=$(echo ${TITLE##${TITLE%%?}})
	PERFORMER=$(grep 'performer' $temp | cut -d: -f2- | sed 's/^ //;s/>$//')
	AUSGABE="Kamikaze_Radio_-_"$(echo ${PERFORMER} | sed -e s/ä/ae/g -e s/ö/oe/g -e s/ü/ue/g -e s/ß/ss/g -e s/\ /\_/g)"_${TEIL}.mp3"

	echo "Konvertiere ${DATEI} in ${AUSGABE}"
	lame -q 0 -b 56 "${DATEI}" "${AUSGABE}"
	eyeD3 --artist="${PERFORMER}" --title="Interview Teil ${TEIL}" --track=${TEIL} --track-total=${TEILE} --year=`date +"%Y"` --comment="ger::Kamikaze Radio" ${AUSGABE}
done

rm $temp
ls -lh

exit 0

Was passiert hier?

Erstelle eine temporäre Datei, in der die vorhandenen Tags der Dateien gespeichert werden. Beim Konvertieren mittels Lame gehen die ID3 Tags verloren, ausserdem sehen die erstmal nicht unbedingt so aus, wie ich diese haben möchte.
temp=$(mktemp)

Ich speichere mir noch die Anzahl der MP3 Dateien. Hierzu müssen alle MP3s eines Interviews in dem entsprechenden Verzeichnis liegen.
TEILE=`ls *.mp3 |wc -l`

Führe die folgenden Aktionen für alle MP3 Dateien im Verzeichnis aus.
for DATEI in *.mp3; do

Um die ID3 Tags auszulesen und später wieder zu speichern verwende ich eyeD3.
eyeD3 -v "${DATEI}" >$temp

So sieht die Ausgabe aus:

Kommando Kap Hoorn - Teil 1.mp3	[ 7.12 MB ]
-------------------------------------------------------------------------------
Time: 07:46    MPEG1, Layer III    [ 128 kb/s @ 44100 Hz - Stereo ]
-------------------------------------------------------------------------------
ID3 v2.3:
title: Teil 1        artist: Kommando Kap Hoorn
album:         year: None
track: 7        
-------------------------------------------------------------------------------
ID3 Frames:
<Lead performer(s)/Soloist(s) (TPE1): Kommando Kap Hoorn>
<Title/songname/content description (TIT2): Teil 1>
<Encoded by (TENC): Ripped with Streamripper>
<Album/Movie/Show title (TALB): >
<Track number/Position in set (TRCK): 7>
<Year (TYER): >

Extrahiere den Titel aus der temporären Datei mit den ID3 Tags
TITLE=$(grep Title $temp | cut -d: -f2- | sed 's/^ //;s/>$//')

Die Dateien enthalten als Titel ursprünlich den Text „Teil n“. Ich möchte hier nur die letzte Stelle, also die Nummer erhalten.
TEIL=$(echo ${TITLE##${TITLE%%?}})

Extrahiere den Künstler aus der temporären Datei mit den ID3 Tags
PERFORMER=$(grep 'performer' $temp | cut -d: -f2- | sed 's/^ //;s/>$//')

Bastle aus den bisherigen Informationen den neuen Dateinamen zusammen. Ersetze dabei sowohl die Umlaute wie auch Leerstellen.
AUSGABE=“Kamikaze_Radio_-_“$(echo ${PERFORMER} | sed -e s/ä/ae/g -e s/ö/oe/g -e s/ü/ue/g -e s/ß/ss/g -e s/\ /\_/g)“_${TEIL}.mp3″

Nur eine Bildschirmausgabe zur Info
echo "Konvertiere ${DATEI} in ${AUSGABE}"

Erzeuge die Dateien mit 56 kBit/s
lame -q 0 -b 56 "${DATEI}" "${AUSGABE}"

Schreibe in die neu erstellten Dateien die ID3 Tags
eyeD3 --artist="${PERFORMER}" --title="Interview Teil ${TEIL}" --track=${TEIL} --track-total=${TEILE} --year=`date +"%Y"` --comment="ger::Kamikaze Radio" ${AUSGABE}

Hier endet die Schleife
done

Lösche die temporäre Datei wieder
rm $temp

Und zeige schließlich das aktuelle Verzeichnis mit allen Dateien an
ls -lh

Lassen wir das Skript laufen, sieht das folgendermaßen aus:

$ ./conv.sh 
Konvertiere Kommando Kap Hoorn - Teil 1.mp3 in Kamikaze_Radio_-_Kommando_Kap_Hoorn_1.mp3
ID3v2 found. Be aware that the ID3 tag is currently lost when transcoding.
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Resampling:  input 44.1 kHz  output 24 kHz
Using polyphase lowpass filter, transition band:  9774 Hz - 10065 Hz
Encoding Kommando Kap Hoorn - Teil 1.mp3
      to Kamikaze_Radio_-_Kommando_Kap_Hoorn_1.mp3
Encoding as 24 kHz j-stereo MPEG-2 Layer III (13.7x)  56 kbps qval=0
hip: Can't step back 466 bytes!
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 
 19451/19455 (100%)|    0:51/    0:51|    0:51/    0:51|   9.1194x|    0:00 
----------------------------------------------------------------------------------------------------------------------
   kbps        LR    MS  %     long switch short %
   56.0        0.5  99.5        86.6   7.7   5.7
ReplayGain: +0.5dB

Kamikaze_Radio_-_Kommando_Kap_Hoorn_1.mp3    [ 3.12 MB ]
-------------------------------------------------------------------------------
Time: 07:46    MPEG2, Layer III    [ 56 kb/s @ 24000 Hz - Joint stereo ]
-------------------------------------------------------------------------------
No ID3 v1.x/v2.x tag found!
Setting artist: Kommando Kap Hoorn
Setting title: Interview Teil 1
Setting track: 1
Setting track total: 3
Setting year: 2012
Setting comment: []: Kamikaze Radio
Writing tag...
ID3 v2.4:
title: Interview Teil 1        artist: Kommando Kap Hoorn
album:         year: 2012
track: 1/3        
Comment: [Description: ] [Lang: ger]
Kamikaze Radio

Der ID3 Tag nach der Konvertierung:

-------------------------------------------------------------------------------
Time: 07:46    MPEG2, Layer III    [ 56 kb/s @ 24000 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Interview Teil 1        artist: Kommando Kap Hoorn
album:         year: 2012
track: 1/3        
Comment: [Description: ] [Lang: XXX]
Kamikaze Radio
-------------------------------------------------------------------------------
ID3 Frames:
<Lead performer(s)/Soloist(s) (TPE1): Kommando Kap Hoorn>
<Title/songname/content description (TIT2): Interview Teil 1>
<Track number/Position in set (TRCK): 01/03>
<Release time (TDRL): 2012>
<Tagging time (TDTG): 2012-03-05T14:28:31>
<Recording time (TDRC): 2012>
<Comments (COMM): Kamikaze Radio [Lang: XXX] [Desc: ]>
Advertisements

Aktionen

Information

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s




%d Bloggern gefällt das: