In real-time mp3 opnemen, deel 2

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Bild des Autors]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in nl Philip de Groot

AboutTheAuthor:[Über den Autor]

Promoveert binnenkort aan de Universiteit van Nijmegen op het onderwerp chemometrie. Werkt zeer graag met Linux en schrijft regelmatig zijn ervaringen hiermee op.

Abstract:[Zusammenfassung]

Dit artikel is een vervolg op een eerdere publicatie over het in real-time opnemen van mp3-bestanden van bijvoorbeeld radio uitzendingen. In het vorige artikel is beschreven hoe uiteindelijk een groot mp3-bestand verkregen kan worden, bijvoorbeeld van 650MB voor 12 uur of 1,3 gigabyte voor 24 uur muziek in nagenoegd CD-kwaliteit (128 kbit/s; stereo). Wat moet je vervolgens met zo'n groot bestand doen? Is het ook mogelijk om nog langere opnames te maken of bijvoorbeeld de muziek nog beter te comprimeren? Hoe zit het met de kwaliteit van de mp3-opnamen? Op al deze vragen wordt nu verder ingegaan.

ArticleIllustration:[Titelbild des Artikels]

[Illustration]

ArticleBody:[Der eigentliche Artikel]

Mp3-bestanden bewerken

Stel, je hebt een mooie mp3-opname gemaakt van 24 uur (bijvoorbeeld de top 300 van de jaren 80) (Loostad Radio doet zijn best om legaal de lucht in te komen) en je wilt nu dit grote bestand opsplitsen in kleinere "hapklare" brokken en ook nieuws en reklame verwijderen. Hoe kan je dit het beste aanpakken? Een (slechte) oplossing zou zijn:
Theoretisch zou deze procedure moeten werken. In tegenstelling tot wat vaak gedacht word levert het opnieuw encoderen van een uitgepakt mp3-bestand geen kwaliteitsverlies op, op voorwaarde dat hetzelfde mp3-encodeer algoritme wordt gebruikt. In de praktijk zijn er wel wat problemen met deze werkwijze:

Kortom, je hebt een programma nodig dat mp3-bestanden ZELF kan bewerken. Deze programma's bestaan, zij het (nog) niet voor Linux. Heel veel Windows versies van deze programma's staan ter beschikking. Echter: al deze programma's hebben 1 groot nadeel. Ze 'verslikken' zich in een mp3-bestand van 650 MB. Ik heb 1 programma gevonden dat de klus kan klaren (mits je een flinke portie geduld hebt): 'Manns' mp3 edit'. Ikzelf gebruik dit programma onder Windows98. In de grafische interface kan je het begin en einde van het gewenste mp3-deel aangeven en met de 'trim' opdracht knip je dit stukje mp3-code eruit en kopieer je dat naar een nieuw bestand. Dit programma is 'donationware,' wat betekent dat je niet verplicht bent om ervoor te betalen, maar je wel vriendelijk wordt verzocht om dit te doen als het programma bevalt. Dit programma heeft 2 nadelen: het is op een bestand van 650 MB TRAAG en het werkt alleen op CONSTANTE bitrates!!! Het begin zoeken van het laatste uur (van bijvoorbeeld 24 opgenomen uren) duurt heel erg lang en gaat gepaard met een stevig geratel van de harde schijf. Het knippen zelf gaat daarentegen razendsnel (en zonder kwaliteitsverlies). Problemen met afspelen heb ik met deze editor nog niet ondervonden, al controleer ik altijd achteraf of het bewerken goed is gegaan (door de afzonderlijke bestanden ook nog eens in te laden). Tijdens mijn eerste bewerkingen met deze editor klikte ik al op de 'Trim' knop voordat het programma uitgerateld was. Dit leidt onherroepelijk tot verminkte bestanden, die niet afgespeeld kunnen worden! Ter indicatie: het editen van een bestand van 650 MB kost mij 1 uur met dit programma, hoofdzakelijk veroorzaakt door wachten (en dat is best irritant)!

Lange Mp3 opnames maken (>24 uur)

24 uur opnemen vanaf de radio is geen probleem. Het bestand blijft redelijk klein (bijvoorbeeld 1,3 gigabyte voor 24 uur) en kan makkelijk lokaal op de harde schijf opgeslagen worden. Anders wordt het wanneer je een week lang radio opnames wilt bewaren. Waarschijnlijk past dit niet allemaal op de harde schijf, dus hoe los je dit op? Bovenstaand probleem had ik met de 'Top 2000 aller tijden' die tussen kerst en nieuwjaar 2000 (144 uur lang!) is uitgezonden op Radio 2. Mijn harde schijf was sowieso te klein om alle opnames te kunnen bewaren, dus heb ik het op een andere manier opgelost. Hier volgt het 'recept':
Met bovenstaande procedure heb ik dus de hele Top2000 probleemloos en compleet opgenomen. Het kostte mij wel 12 backup-CD's die verder nooit meer gebruikt zullen worden, maar dat moet je er maar voor over hebben. Hoe werkt nu het een en ander? Het idee heb ik eigenlijk opgedaan tijdens het lezen van de CD-Burning-Howto en de benodigde stappen leg ik hieronder uit:


Deze aanpak heeft als voordeel dat het nauwelijks een extra belasting vormt voor de processor tijdens het maken van de mp3 CDs. De images bestaan al! Via een script kunt U automatisch de images mounten, de opname starten, na 12 uur het opnemen afbreken en de image unmounten, een tweede image mounten en verdergaan met de opname, enzovoorts. Het branden van de CD's heb ik voor de zekerheid met de hand gedaan, voor het geval er problemen zouden optreden (ik had 1 keer een probleem door een slechte CDR). Vandaar dat ik 4 images heb gemaakt: 3 reserve images voor het geval ik even niet een CD kon branden (en dus maximaal 36 uur respijt heb). Het gebruikte script ziet er als volgt uit:


#!/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

Ik draaide dit alles ZONDER XWindows, dus vanaf de Bash-prompt. Vandaar dat ik sound-support met de hand moest laden, evenals de OSS emulatie (nodig om de ALSA-drivers goed te laten werken) en de mixer driver (dit kan natuurlijk geautomatiseerd worden door een pre-install/post-install opdracht te gebruiken in het bestand '/etc/conf.modules'). De 4e regel stelt de mixer correct in: opname bron is line-in en de volume wordt maximaal open gezet. Daarna zorgt het script voor het nodige mount en unmount werk. Wat de opties van 'mpegrec' betreft: '-mj' geeft aan dat ik een joined stereo opname wil maken. Dit omdat ik dacht dat het bestand dan kleiner zou worden (het moet wel allemaal op zo'n 670-680 MB passen). Dit blijkt achteraf echter helemaal niet waar te zijn: het maakt nagenoegd niet uit of je stereo of joined-stereo opneemt! In het vervolg gebruik ik zelf dus gewoon stereo, maar dat moet ieder voor zichzelf uitmaken. Het programma 'mpegrec' moet ook na 12 uur stoppen. Om dat te bereiken had ik de source code aangepast en de maximaal 24 uur (die er dus keihard instaat) veranderd in 12 uur. Helaas ging de vlieger niet op: het programma bleef nu opeens wel vrolijk doorgaan met opnemen! Ik heb dus om de 12 uur handmatig de mp3-opname onderbroken (je moet er wat voor over hebben...). Het script zorgde vervolgens voor de rest. Van 'mpegrec' snap ik nu geen snars meer; de source code moet ik eens echt goed onder handen nemen...

Opmerking:
Met de nieuwste versie van cdrecord (cdrecord-1.9) ondervond ik problemen met het branden van CD's. Onder de vorige versie, cdrecord-1.8.1, werkte alles nog vlekkeloos. Uiteindelijk heb ik de problemen opgelost door de firmware van mijn CD brander (een Philips CDD 3610) op te waarderen naar de nieuwste versie: 3.09 (i.p.v. ik dacht 3.02). Ik dacht in eerste instantie dat de problemen veroorzaakt werden door kernel 2.4.3, maar dit blijkt dus niet het geval te zijn!

De kwaliteit van de mp3 opnames

Door de feedback op mijn vorige artikel via de Engelstalige Talkback pagina en de Nederlandstalige Talkback pagina heb ik een link ontvangen van een website vol met wetenswaardigheden over mp3. Met name de kwaliteit van de mp3-compressie en de bitrate staat hier uitmuntend in uitgelegd, toegespitst op het gebruik van het programma Lame. Het adres is: http://www.r3mix.net/.


De belangrijkste feiten op een rijtje:

Dit alles staat dus uitgebreid beschreven op de bovenstaande website!

Zo klein mogelijke mp3 opnames maken

Hier behandel ik een script die door een lezer is opgestuurd (via email). Het script ziet er als volgt uit:


#!/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

Dit script is op zich duidelijk. Doel is om een begrijpbare radio-opname te krijgen die slechts 3.5 megabyte/uur opslagruimte nodig heeft! Met begrijpbaar bedoel ik dat de spraak nog te interpreteren is. De muziek kwaliteit is natuurlijk niet om over naar huis te schrijven! De eerste regels van het script stelt de mixer in en start het programma voor een radiokaart en sox. De 'truc' zit hem in een aantal opties die 'lame' meekrijgt en die we nu nader gaan bekijken:

--resample 16 -b 8 -a -m m -h --lowpass 4 --highpass .12 --voice
--resample 16 Herdefinieer de sampling frequentie van de output file van 44kHz naar 16 kHz.
-b 8 Zet de sampling rate op 8 kbit/s (slik!).
-a Combineer de stereo stream tot een mono opname.
-m m Forceer mono mp3 encodering.
-h Een optie om hoge kwaliteit mp3-encodering toe te passen (langzamer).
--lowpass 4 Stel het laagdoorlaatfilter in op 4 kHz. Alle signalen (frequenties) hoger dan 4 kHz worden eruit gefilterd.
--highpass .12 Stel het hoogdoorlaatfilter in op .12 kHz. Alle signalen (frequenties) lager dan .12 kHz worden eruit gefilterd.
--voice Gebruik een mp3-compressie techniek die geoptimaliseerd is voor spraak.

Het is duidelijk dat een hoge compressie verkregen kan worden voor spraak. Meestal wilt men dit niet, maar de mogelijkheid is bij deze aangegeven!

Een standaard script om mp3 opnamen te maken

Dit script is opgestuurd via de TalkBack pagina's (waarvoor mijn grote dank; iedereen kan nu ervan profiteren!). Dit is ook het voordeel van de TalkBack-pagina's die bij het vorige artikel (en nu ook bij dit artikel) beschikbaar zijn gemaakt. Iedereen kan zijn ervaringen kwijt, bij problemen advies vragen bij andere gebruikers, kortom: een enorme hoeveelheid kennis is samengebracht en (hopelijk) voor iedereen beschikbaar gemaakt! het script, genaamd 'mp3_record,' ziet er als volgt uit:

#!/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 
 

De optie '-l 5400' stelt de opnametijd in op 90 minuten. Alle opties na '-x' worden meteen doorgesluisd naar lame (regels 4 t/m 9) en de '-o' optie bewaard het bestand als 'datum_en_tijd.mp3'. Deze regels kunnen natuurlijk naar believen aangepast worden, waarbij het wellicht handig is om de opties van 'lame' eens goed te bekijken. In de onderstaande tabel staan de huidige opties verder uitgewerkt:

--preset fm Lame kent een aantal standaard instellingen. 'fm' is bedoeld voor het maken van fm-opnamen, maar ikzelf vind de kwaliteit minder als bij de standaard sampling rate van 128 kbit/s. Dit heeft met name te maken met de toegepaste filters in 'lame'.
--tt "Computers in Your Life" '--tt' definieert de titel van de opname (maximaal 30 karakters).
--tl "Open Line with Tom Wieble" '--tl': album, oftewel: bron van origine (maximaal 30 karakters).
--ta "Tom Wieble" --ty `date +%Y` '--ta': artiest (maximaal 30 karakters).
--tg "Speech" '--tg': genre (naam of nummer).
--tc "Copyright (c) 1997 - `date +%Y` WOSU" -c" '--tc': commentaar (additionele informatie; maximaal 30 karakters).

Kortom: een nette manier om een mp3-file te maken, inclusief datum en tijd van opnemen en allerlei additionele informatie. Het is wel even werk om dit alles netjes in een script te zetten, maar het is leuk om te zien dat het allemaal eenvoudigweg mogelijk is!

mirror server hosted at Truenetwork, Russian Federation.