Echtzeit mp3 Aufnahmen, Teil 2
ArticleCategory: [Artikel Kategorie]
Applications
AuthorImage:[Bild des Autors]
TranslationInfo:[Author and translation history]
original in nl Philip de Groot
nl to en Philip
de Groot
en to de Guido
Socher
AboutTheAuthor:[Über den Autor]
Bald bekommt er seinen Doktor von der Universität
Nijmegen in Chemometrie. Er arbeitet
gern mit Linux und schreibt regelmäßig seine Erfahrungen
auf.
Abstract:[Zusammenfassung]
Dieser Artikel ist eine Fortsetzung eines früheren Artikels
über Echtzeit mp3 Aufnahmen von z.B Radioübertragungen.
Ich habe gezeigt, wie 12 Stunden Musik in einer 650 MB großen
Datei oder 24 in einer 1.3 Gigabyte Datei gespeichert werden
können mit fast CD Qualität (128 kbit/s; Stereo). Wie
handhabt man nun solche großen Dateien? Kann man noch
längere Aufnahmen machen oder die Musik noch stärker
komprimieren? Wie steht es mit der Qualität? Wir werden
versuchen diese Fragen zu beantworten.
ArticleIllustration:[Titelbild des Artikels]
ArticleBody:[Der eigentliche Artikel]
Editieren von mp3-Dateien
Angenommen Du hast eine wunderschöne Aufnahme von 24 Stunden
Musik, z.B die Eighties Top 300 aus
einer Radiosendung wie von Loostad radio aufgenommen und du
möchtest diese Aufnahme in kleinere Dateien aufteilen. Dabei
möchtest Du auch Reklame und Nachrichtensendungen entfernen.
Wie kann man das am besten machen? Ein Vorschlag wäre:
- Dekodiere die mp3 Datei in eine Wavedatei.
- Nimm einen Wave Editor, um die Schneidearbeiten
durchzuführen.
- Kodiere die Wavedatei wieder in eine mp3 Datei.
Dieses Verfahren würde theoretisch funktionieren und entgegen
der allgemeinen Meinung verursacht das Wiederaufnehmen einer Wavedatei
mit dem exakt gleichen mp3 Algorithmus auch keinen
Qualitätsverlust. Diese Verfahren hat jedoch in der Praxis
einige Probleme:
- Das Dekodieren einer 650 MB mp3 Datei ergibt eine 6.5 Gigabyte
Datei (Kompressionsfaktor ist etwa 10). Über die nötige
CPU Zeit wollen wir gar nicht reden.
- Während des Dekodierens bleibt die Originaldatei
bestehen. Dadurch wird noch weiterer Speicherplatz benötigt.
Falls Du also Aufnahmen in Teile von einer Stunde zerlegen
möchtest, brauchst Du 2x6.5=13 Gigabyte!
Kurzgesagt, Du brauchst ein Programm, das in der Lage ist mp3
Dateien selbst zu editieren. Solche Programme existieren, aber
nicht (im Moment) für Linux. Eine ganze Reihe solcher
Programme gibt es für Windows, aber die meisten haben ein
großes Problem: Sie können nicht mit mp3 Dateien von 650
MB umgehen. Ich habe ein Programm gefunden, das in der Lage ist mit
solchen Dateien zu arbeiten:
'Manns' mp3 edit'. Ich benutze das Programm unter Windows98. In
seinem graphischen Interface kann man Anfang und Ende des
gewünschten Stückes wählen. Man kann diese
Stück mit dem 'trim' Befehl kopieren. Das Programm ist
'donationware', das heißt du solltest dafür zahlen, falls
das Programm Deinen Wünschen entspricht. Das Programm hat ein
Problem: Es ist furchtbar langsam bei einer 650 MB Datei und es
kann nur KONSTANTE Bitraten handhaben. Um z.B den Anfang der
letzten Stunde einer 24 Stundenaufnahme zu suchen, braucht es sehr lange
und involviert heftige Plattenzugriffe. Das 'Trimmen' des
entsprechenden Musikstücks dagegen geht recht schnell. Bis
jetzt konnte ich noch keine Probleme bei den so bearbeiteten mp3
Dateien feststellen. Trotzdem überprüfe ich immer die
fertigen Dateien, indem ich sie nochmal in den mp3 Editor lade.
Falls das Laden funktioniert sind die Dateien OK. Während
meiner ersten Experimente mit diesem Editor habe ich schon auf den
'trim'-Knopf gedrückt, während die Platte noch heftigst
arbeitete. Das führte zu einer unbrauchbaren mp3 Datei. Um dir
einen Anhaltspunkt zu geben: Das Editieren einer 650 MB Datei
braucht etwa eine Stunde, hauptsächlich weil man immer warten
muß (etwas frustrierend).
Lange mp3 Aufnahmen (>24 Stunden)
Es ist kein Problem, 24 Stundenaufnahmen von einem Radiosender zu
machen. Die Datei hat immer noch eine handhabbare Größe
(z.B 1.3 Gigabyte für 24 Stunden) und kann leicht auf der
Festplatte gespeichert werden. Die Sache ändert sich, wenn man
z.B Aufnahmen über eine Woche hinweg machen möchte.
Möglicherweise wird es nicht auf Deine Platte passen und du
möchtest das Problem lösen. Ich hatte dieses Problem als
ich die 'Alltimes Top 2000' zwischen Weihnachten und Neujahr 2000
(144 Stunden Musik) gesendet vom Niederländischen
Nationalradio Radio 2 aufnehmen
wollte. Meine Platte war damals einfach zu klein. Ich mußte
das auf andere Weise lösen. Hier ist das Rezept:
- Erzeuge eine leere Datei, die genau auf eine 700 MB
CD-recordable (80 Minuten CD) paßt.
- Erzeuge nun in dieser leeren Datei ein Linux
ext2-Dateisystem.
- Mounte diese Datei, so daß es wie eine separate Platte
behandelt werden kann.
- Nimm 12 Stunden Musik in mp3 auf dieser virtuellen Platte auf
(128 kbit/s; Stereo; ca 670 MB).
- Unmounte die Datei und mounte eine zweite Datei. Nimm
weiterhin auf der zweiten Datei auf.
- Kopiere die erste Datei mit einem CD Brenner. Das ist kein
Problem für den Computer, selbst wenn parallel dazu weiter
aufgenommen wird (Mein Computer ist ein Pentium II 450 MHz und
ich lasse kein XWindows laufen).
- Nachdem die CD erstellt ist, kann die mp3-Datei gelöscht
werden (die eigentliche mp3-Datei, nicht die Image Datei). Die
nun wieder leere Imagedatei kann für die nächste
Aufnahme benutzt werden.
- Wiederhole diese Prozedur bis alles aufgenommen ist.
Ich habe dieses Verfahren benutzt, um die ganzen Top2000
aufzunehmen. Kein Problem. Ich benutzte 12 CDs während der
Aufnahmen, die ich jetzt , nach dem Zusammenschneiden, nicht mehr
benutze, aber das war nötig für eine erfolgreiche
Aufnahme. Wie funktioniert das? Ich kam auf die Idee als ich die CD-Burning-Howto
gelesen hatte. Die nötigen Schritte sind hier erklärt:
- Ich erzeugte 4 Imagedateien auf einer seperaten Partition.
Ich hatte noch 2.9 Gigabyte auf dieser Partition frei.
-
Ich nannte die Image-Dateien image_1, image_2, image_3, und
image_4:
dd if=/dev/zero of="image_1" bs=1024k count=700
Ich wiederholte diese Komanndo für alle 4. Das Erzeugen
dieser Imagedateien braucht seine Zeit.
-
Erzeuge das Linux ext2-Filesystem auf dem Image:
shell> /sbin/mke2fs -b 2048 image_1
empty_file is not a block special device.
Proceed anyway? (y,n) y
Beachte: Das ext2-Dateisystem braucht auch etwas Platz. Damit
hat man nicht die ganzen 700 MB für mp3 zur
Verfügung.
-
Um die Imagedateien zu mounten, braucht man das loopback
Device. Loopback Device Unterstützung muß im Kernel
vorhanden sein oder als separates ladbares Kernel Modul.
mount -t ext2 -o loop=/dev/loop1 image_1 /mnt
Nun kannst du über das /mnt-Verzeichnis auf den Inhalt von
image_1 zugreifen. Damit können die Aufnahmen anfangen.
-
Nach dem Beenden der Aufnahmen unmounted man die Imagedatei
und schreibt sie auf CD:
umount /mnt
cdrecord -v speed=2 dev=0,1,0 -data image_1
Beachte, daß die Option 'dev=0,1,0' von Deinem System
abhängt. (mit cdrecord -scanbus, kannst du herausfinden,
wie dieser Parameter bei dir heißen wird). Während
die Imagedatei auf CD geschrieben wird, kann man die Aufnahmen
schon auf der zweiten Imagedatei fortsetzen.
-
Testen der erzeugten CD:
mount -t ext2 /dev/scd0 /cdrom
Falls alles funktioniert hat, kannst du jetzt die aufgenommene
mp3-Datei über das Verzeichnis /cdrom sehen. Ich
möchte anmerken, daß ich einige Probleme mit den
Kerneln 2.4.0 bis 2.4.2 hatte. Ich konnte mit ihnen keine CDs
mit ext2-Dateisystem mounten und es gab Probleme mit dem
loopback Device. Im Kernel 2.4.3 hat dagegen alles bestens
funktioniert, genauso wie mit den 2.2.x-Kerneln.
Der Vorteil diese Vorgehens ist die geringe Prozessorlast. Die
Imagedateien existieren schon und werden nur langsam gefüllt.
Man kann das mit einem Script automatisieren. Die CDs habe ich
jedoch immer von Hand gebrannt, falls es Probleme beim Brennen gibt, sieht
man es sofort.
Das war einmal aufgrund einer fehlerhaften LeerCD der Fall. Aus
diesem Grund erzeugte ich 4 Imagedateien. Damit hätte ich 36
Stunden Zeit, um irgendwelche Probleme zu lösen.
Das Script sah so aus:
#!/bin/sh
echo "loading modules for sound support..."
modprobe -k snd-card-sb16
modprobe -k snd-pcm-oss
modprobe -k snd-mixer-oss
echo "setting mixer..."
amixer set Line 31 unmute capture; amixer set Master 31; amixer set PCM 31
cd /where/ever/you/stored/the/images/
for i in 1 2 3; do
for ii in 1 2 3 4; do
echo "mounting image_$ii on /mnt ..."
mount -t ext2 -o loop=/dev/loop1 image_$ii /mnt
echo "starting mpegrec ..."
mpegrec -b 128 -x -mj -o /mnt/top2000_$ii.mp3
echo "umount /mnt"
umount /mnt
done
done
Ich habe alles OHNE XWindows gemacht, nur mit dem Bash-prompt.
Ich lud die Soundunterstützung von Hand, genauso wie die OSS
Emulation (notwendig, um einen korrekt funktionierenden ALSA-Treiber
zu erhalten) und den mixer Treiber. Natürlich könnte man
das mit pre-install/post-install Triggern in /etc/conf.modules
automatisieren. Die vierte Zeile im Script konfiguriert den Mixer:
Aufnahmequelle ist 'line-in' und die Lautstärke wird auf
Maximum gestellt. Danach übernimmt das Script das Mounten und
Unmounten der Imagedateien. Die mpegrec Option '-mj' ist für
joined stereo recording. Ich tat das, da ich kleinere mp3 Dateien
erwartete, aber das war nicht der Fall. Die nächsten Aufnahmen
werde ich mit normalem Stereo machen. Das 'mpegrec' Programm sollte
nach 12 Stunden aufhören. Um das zu erreichen, editierte ich
den Quellcode und änderte die maximal 24 Stunden (die ich
einfach im Quellcode beschrieben fand) in 12 Stunden um. Leider
funktionierte das nicht. Das Programm nahm weiter auf und ich
mußte mit crtl-c abbrechen. Ich verstehe das 'mpegrec'
überhaupt nicht mehr. Ich sollte den Quellcode genauer
lesen.....
Anmerkung:
Die neuste Version von cdrecord (cdrecord-1.9) brachte Probleme
beim Erzeugen der CDs. Die vorherige Version cdrecord-1.8.1,
arbeitete ohne Probleme. Ich löste das Problem, indem ich die
Firmware meines CD Recorders, Philips CDD 3610 von Version 3.02 aus
Version 3.09 updateted. Ursprünglich vermutete ich, daß
die CD Brennprobleme durch den Kernel, 2.4.3, verursacht
würden, aber das stimmte nicht.
Die Qualität von mp3 Aufnahemen
Aufgrund des Feedbacks auf meinen vorangegangen Artikel (Talkbackpage)
erhielt ich einen Link auf eine Webseite mit interessanten
Informationen bezüglich mp3-Aufnahmen. Speziell die mp3
Qualität in Bezug auf die mp3 Bitrate ist dort hervorragend
erklärt. Die Adresse ist : http://www.r3mix.net/.
Zusammenfassung der wichtigsten Fakten:
- Eine sampling Rate von 128 kbit/s ist keine CD-Qualität.
Ein Auditorium konnte alle 128 kbit/s mp3 Dateien erkennen.
Für Aufnahmen aus dem Radio spielt das jedoch keine Rolle,
da Radiomusik keine CD-Qualität hat. 128 kbit/s sind hier
mehr als ausreichend.
- Eine sampling Rate von 256 kbit/s ergibt echte
CD-Qualität. In anderen Worten: Es ist nicht möglich,
den 256 kbit/s mp3-Stream von der orginal CD zu unterscheiden.
Trotzdem ist es immer noch möglich
Kompressionsveränderungen zu erkennen, aber nur wenn man
weiß, auf welche Teile der Musik man achten muß.
- Aufnahmen mit Lame und variabler Bitrate (VBR) werden
empfohlen. Die Standard-Bitrate von 192 kbit/s (einen Wert, den
ich für merkwürdig hielt) ist ein guter Startwert
für die meisten Zwecke. In Abhängigkeit von der
'Schwierigkeit' des Songs wird die Sampelrate dann etwas
erhöht oder erniedrigt. Ein weiterer Vorteil ergibt sich bei
der Verwendung von Filtern. Damit erhält man eine bessere
Qualität bei geringerer Aufnahmerate. Philips entwickelte diese Filter
während der Entwicklung der CD Aufnahmetechnik und sie
können ohne Probleme benutzt werden.
All das wird im Detail auf der erwähnten Webseite diskutiert.
Erzeugen einer kleinst möglichen mp3 Datei
Unten werde ich ein Script diskutieren, das mir von einem Leser ,
via e-Mail, zugeschickt wurde. Das Script sieht so aus:
#!/bin/bash
echo "record $1 named ($3) for $2 seconds"
aumix -f ~/.aumixrc
/usr/bin/yes x | /usr/bin/radio $1 >/dev/null 2>/dev/null
sox -V -r 44100 -c 2 -t ossdsp -w -s /dev/dsp -t wav - 2>/dev/null |
lame - ~/$3.`/bin/date "+%H%M.%m-%d-%y"`.mp3 --resample 16 -b 8 -a -m m -h --lowpass 4 --highpass .12 --voice&
sleep $2
kill -9 $!
# copy the output to a different direcory. If you want you can
# replace cp by rcp or scp and copy it to a different computer:
cp $3.*`/bin/date "+.%m-%d-%y"`.mp3 /tmp/outputdir
Das Hauptziel des Scripts ist eine verständliche
Radioaufnahme zu machen, die nur 3.5 megabyte/Stunde Plattenplatz
braucht! Mit verständlich meine ich, daß man in der Lage
sein muß, die aufgenommene Sprache zu verstehen.
Natürlich ist die Qualität furchtbar. Die erste Zeile des
Scripts konfiguriert den Mixer und startet das Radiokartenprogramm
sowie Sox. Der Trick besteht in den lame'-Optionen, die wir hier
untersuchen:
--resample 16 -b 8 -a -m m -h --lowpass 4 --highpass .12 --voice
--resample 16 |
Definiere erneut die re-sampling Rate der Ausgabedatei von
44 kHz auf 16 kHz. |
-b 8 |
Setze die sampling Rate auf 8 kbit/s. |
-a |
Kombiniere die Stereokanäle zu mono. |
-m m |
Erzwinge mp3 mono |
-h |
high-quality mp3 Kodierung (langsamer) |
--lowpass 4 |
Setze den Tiefpaßfilter auf 4 KHz. Alle Signale
(Frequenzen) höher als 4 kHz werden entfernt. |
--highpass .12 |
Setze den Hochpaßfilter auf .12 kHz. Alle Frequenzen
unter .12 kHz werden entfernt. |
--voice |
Benutze eine mp3-Kompression, die für Sprache optimiert
ist. |
Es ist klar, daß man eine hohe Kompression für Sprache
erhalten kann. Meist ist das nicht unbedingt erwünscht, aber
hier die Möglichkeit aufgezeigt.
Ein Standard-Script für mp3 Aufnahmen
Dieses Script wurde über die TalkBack
Seiten geschickt (Ich bin dankbar dafür: Jeder kann von
dieser Information profitieren!). Das ist eine großer Vorteil
der TalkBack Seiten, die für den letzten Artikel und für
diesen Artikel vorhanden sind. Jeder kann seine Erfahrungen
veröffentlichen oder andere Besucher um Rat fragen. In kurz:
eine große Menge an Informationen wird zusammengebracht und
ist für jeden verfügbar. Das Script nennt sich
'mp3_record' und sieht so aus:
#!/bin/sh
/usr/local/bin/mpegrec \
-l 5400 \
-x '--preset fm \
--tt "Computers in Your Life" \
--tl "Open Line with Tom Wieble" \
--ta "Tom Wieble" --ty `date +%Y` \
--tg "Speech" \
--tc "Copyright (c) 1997 - `date +%Y` WOSU" -c' \
-o open_line_`date +%d%b%y`_`date +%H%M`.mp3
Die Option '-l 5400' setzt die Aufnahmenzeit auf 90 Minuten.
Alle Optionen nach '-x' werden direkt an 'lame' weitergegeben
(lines 4 to 9) und die '-o' Option speichert die Dateien als
'Datum_Zeit.mp3'. Diese Zeilen können nach Bedarf angepasst
werden. Für diesen Zweck mag es nützlich sein, sich die
'lame'-Optionen genauer anzusehen. Die Optionen von Lame sind in
der folgenden Tabelle zusammengefaßt:
--preset fm |
Lame kennt einige Standardeinstellungen. 'fm' ist für
Fm-Radioaufnahmen. Ich bevorzuge jedoch die normalen Aufnahmen
mit 128 kbit/s. |
--tt "Computers in Your Life" |
'--tt' Setze den Titel einer Aufnahme (30 Zeichen
maximal). |
--tl "Open Line with Tom Wieble" |
'--tl': Abbum, oder: Ursprüngliche Quelle (30 Zeichen
max). |
--ta "Tom Wieble" --ty `date +%Y` |
'--ta': Künstler (30 Zeichen max). |
--tg "Speech" |
'--tg': Gattung (Name oder Nummer). |
--tc "Copyright (c) 1997 - `date +%Y` WOSU"
-c" |
'--tc': Kommentar ( 30 Zeichen max). |
Kurz gesagt eine schöne Art mp3 Dateinen zu erzeugen mit
Datum, Zeit und verschiedenen anderen Informationen. Es erfordert
etwas Zeit all das in ein Script zu packen, aber es ist gut zu
sehen, daß all dies möglich ist.