L.A.M.E. kodek

Na LAME som natrafil počas môjho hľadania po Internete. Zaujímali ma kompresné programy pre mp3 a mojimi kritériami bola kvalita skomprimovaného zvuku a bezplatné používanie; platiť $500 a viac za profesionálne programy, to je na moje archívne účely priveľa. Doposiaľ som používal Bladeenc, ktorý je síce zadarmo, ale výsledný zvuk bol zlej kvality, a to aj pri veľmi vysokých bitrate. Počas hľadania som rýchlo objavil LAME, a keďže som sa chcel dozvedieť viac, prečítal som si o ňom zaujímavé informácie.

MPEG layer 3 kompresný engine LAME asi pozná mnoho z vás kvôli jeho rýchlosti, vysokej kvalite výsledného zvuku a najmä vďaka dostupnosti -je celkom zadarmo, a to dokonca legálne zadarmo :o) Veľa užívateľov ho používa celkom samozrejme i bez toho, aby o ňom vôbec vedeli. Prečo však obľúbená hackerská slučka v jeho názve tvrdí, že L.AM.E. nie je mp3 enkodér? Čo a kto sa skrýva za týmto kvalitným kusom kódu?

Čo je LAME?

LAME začínalo ako GPL patch voči demonštračnému zdrojáku ISO dist10, aby sa vyhlo právnym problémom voči držiteľovi patentu, Fraunhoffer Gesselschaft. Nebol to ani zďaleka použiteľný mp3 kompresor, nemalo zmysel ho ani kompilovať. V máji 2000 boli odstránené posledné zvyšky pôvodného ISO kódu a LAME sa stal plne LGPL zdrojovým kódom pre mp3 kompresor. LAME však naozaj nie je mp3 kompresor. Možno vás to prekvapí, ale LAME je v skutočnosti výuková pomôcka slúžiaca ako ukážka mp3 kódovania. Je to open-source projekt s cieľom vytvoriť lepší model na báze opensource, zahŕňajúci vylepšenú psychoakustiku, noise shaping i rýchlosť. Je to skôr intelektuálny a programátorský projekt, ktorý nie je určený komukoľvek a pre masové šírenie; distribuuje sa iba ako zdrojový kód, čiže potrebujete ovládať C kompiler, ak z neho chcete získať spustiteľný program. Napriek tomu sa však jeho skompilovaná podoba vyskytuje u množstva programov a teší sa veľkej obľube.

Čo ponúka?

Prvotným základom úspechu LAME, položeným v roku 1999, je psychoakustický model gpsycho, vyvinutý ako dokonalejšia náhrada pôvodného ISO modelu. Neskôr bol implementovaný ešte vyspelejší model od chlapíka menom Naoki Shibata (dostupný parametrom -nspsytune). Práve v dobre navrhnutom modeli je nutný predpoklad úspešného zvládnutia pokročilých techník, ako VBR, ABR a joint stereo (JS). Po vyriešení modelu sa začali snahy o vylepšenie programovej časti demonštračného enkodéra. V prvom rade snahy a vysokú kvalitu zvuku, v druhom rade o optimálnu rýchlosť kompresie. Boli vyvinuté nové postupy zaobchádzania s variabilným tokom (VBR), ktorých implementácia v LAME priniesla asi prvý použiteľný VBR -veľa predtým dostupných enkodérov produkovala pri variabilnom toku takmer nepoužiteľné výsledky (napr.Xing). Implementácia VBR v LAME je na vynikajúcej úrovni a je je to jedna z najsilnejších stránok LAME, pretože umožňuje veľmi kvalitný zvuk pri priemerne asi 170kbps. Aj pri nižších tokoch funguje VBR korektne a vďaka optimálnym psychoakustickým krivkám jeho prítomnosť ani nepostrehnete. LAME rozlišuje dva parametre kvality. Prvým je absolútny parameter Q, ktorý má vplyv na zložitosť algoritmov a teda na rýchlosť kompresie, ale nie na veľkosť súboru. Ak máte na kompresiu dosť času, oplatí sa použiť najvyššiu kvalitu -LAME je i tak dosť rýchly. Q zahŕňa hodnoty 0 až 9 kde 0 znamená najvyššiu kvalitu. Pri VBR pozná LAME ešte osobitný parameter VBR kvality, označovaný V, ktorý zase rozhoduje len o prípustnej hladine skreslenia pri zvolenej psychoakustickej krivke, čiže udáva náročnosť a ovplyvňuje v prvom rade toky, ktoré si LAME bude vyberať. Má teda zásadný vplyv na veľkosť súboru. VBR kvalita má takisto stupne 0 až 9, pričom 9 znamená najväčšie prípustné skreslenie, čiže najnižší tok a opäť najnižšiu kvalitu (ako pri Q). V=0 udáva najvyššiu kvalitu, kedy sa priemerný tok môže vyšplhať i na 256kbps a vyššie, tvorcovia však udávajú, že VBR s priemerom 256kbps neznamená kvalitnejší zvuk než konštantný tok (CBR) 256kbps. Svoju úlohu tu zohráva tzv.bit reservoir a z tohto dôvodu nemá zmysel dávať V=0, nanajvýš V=1. Tvorcovia to myslia vážne a nastavenie High Quality (-h) znamená to isté ako V=2.

Pri VBR je samozrejme možné ešte ohraničiť najnižší a najvyšší prípustný tok. V týchto dvoch parametroch je vhodné nechať LAME čo najväčšiu voľnosť, pretože tieto okrajové hodnoty budú volené len vo chvíľach, keď to LAME bude považovať za skutočne potrebné (aby splnil nároky dané parametrom V). Ak chceme dosiahnuť menší súbor, radšej treba ovplyvňovať VBR kvalitu a iné parametre, než ohraničenia prípustných tokov. Pri výbere tokov treba dbať aj na to, aby stanovená spodná a horná hranica VBR spolu so vzorkovacou frekvenciou nahrávky spadali do prípustných hodnôt aspoň jednej verzie MPEG -v opačnom prípade LAME vyhlási chybu a skončí. Prípustné hodnoty sú uvedené v tabulce:

 

Verze

MPEG-1 Layer 3

MPEG-2 Layer 3

MPEG-2.5 Layer 3

Frekvence (kHz)

32, 48, 44.1

16, 24, 22.05

8, 12, 11.025

Nitráte (kbps)

32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320

8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160

Rozšírením funkčnosti VBR je ABR (average bitrate). Kým u VBR rozhodujú čisto parametre kvality VBR a ďalšie doplnkové parametre, aký bude výsledný tok, u ABR je možné napevno stanoviť žiadaný priemerný tok a LAME musí počas kódovania odhadnúť, ako má s pridelenou kapacitou zaobchádzať tak, aby sa pokiaľ možno vošiel do stanoveného priemeru. Dosiahnutý tok sa síce málokedy presne zhoduje so zadaným, ale väčšinou je aspoň blízko. Ak nevyhovuje, pomôže zadať extrémnejší tok. Napríklad ak sme chceli 128kbps a výsledok má ABR 136kbps, tak zadáme tentoraz 120 kbps a uvidíme, ako si s tým LAME poradí. ABR je skôr voľba pre veľmi nízke toky (okolo 100 kbps a nižšie), kedy už ani V hodnoty 9 nedáva dostatočne nízky tok. Kompresia je pomalšia než pri kvalitou riadenom VBR, pretože LAME sa musí zaoberať aj odhadovaním toku. Pri veľmi nízkych tokoch (pod 80kbps) sa už často oplatí nechať nahrávku aj prevzorkovať na nižšiu vzorkovaciu frekvenciu, napr.32 alebo 22.05kHz prípadne previesť ju zo stereo na mono režim. Dosiahnutá (ne)kvalita bude často lepšia než pri vysokej vzorkovacej frekvencii. Záleží na konkrétnej nahrávke a experimentátori si to iste radi vyskúšajú :o)

Ďalším veľmi dobre implementovaným parametrom je joint stereo. Táto voľba je štandardná a znamená, že pri stereo nahrávke bude LAME osobitne kódovať len tie časti spektra, ktoré sú pre jednotlivé kanály odlišné. Spoločné frekvencie sa kódujú len raz, čo šetrí tok čiže zlepšuje kompresný pomer. Kým u niektorých iných kodekov (Fraunhoffer a najmä Xing) bola implementácia joint sterea často veľmi zlá a na zvuku sa nepriaznivo odrážala predovšetkým problémami v stereo separácii, pri LAME rozdiel medzi joint stereom a skutočným stereom naozaj len ťažko rozoznáte. Navyše ak LAME pri kódovaní zistí, že používanie joint sterea je momentálne nevýhodné, automaticky kóduje danú náročnú časť v normálnom stereu, a keď požiadavky opäť poklesnú, vráti sa k úspornejšiemu joint stereu.

CRC kód sa do mp3 pridáva kvôli detekcii a čiastočnej oprave chýb, vzniknutých napr.pri prenose Internetom. Takto upravenú mp3 by mal byť prehrávací program schopný prehrať korektne aj pri miernom poškodení, alebo aspoň poškodenie zistiť a ohlásiť. Ak ste pri niektorom inom kompresore skúšali použiť CRC a skončili ste pri prehrávaní s podstatne horším zvukom než bez CRC checking, tak pri LAME vám to nehrozí. LAME konečne správne implementuje vytváranie CRC kódu a pri prehrávaní takto ošetrená mp3 nestráca na kvalite, resp.iba do tej miery, o koľko je znížený užitočný tok kvôli pridanému CRC kódu.

LAME pozná niekoľko typov ATH kriviek. ATH znamená Audible Treshold of Hearing a krivka znázorňuje, aký citlivý je ľudský sluch na skreslenia pri jednotlivých frekvanciách. Podľa tejto „tolerančnej“ krivky sa enkodér riadi a pri zle navrhnutej krivke by mohol kompresor považovať za nepočuteľné také skreslenie, ktoré v skutočnosti počuteľné je a má nepriaznivý vplyv na poslucháčovo vnímanie nahrávky. Z pôvodnej krivky označovanej ako „typ 0“ boli po mnohých posluchových testoch odvodené nové krivky typu 1 a 2 a r3mix.net pridal vlastnú odvodenú krivku typu 3 (dostupnú cez parameter -athtype3), ktorá je asi najnáročnejšia a navyše zaraďuje filter pre frekvencie nad 19kHz. To je ďalšia vec, ktorú LAME dokáže -je tu možnosť „odrezať“ frekvencie od stanoveného prahu. Jeden interval stanovuje filter vynechávajúci nízke frekvencie po stanovený prah, druhý zase vysoké od stanoveného pravu. Zámer je jasný -ak vieme, že v nahrávke sa dané frekvencie vyskytujú len minimálne, alebo nebude podstatný rozdiel po ich odrezaní, tak môžeme ušetriť niekoľko kb priestoru, najmä u vyšších frekvencií, ktoré sú na kapacitu náročnejšie. Prakticky neškodné by malo byť odrezanie 18.5 kHz a vyššie, pretože len málo ľudí dokáže zachytiť takéto vysoké zvuky. Ak patríte medzi náročných, tak povedzme od 19kHz. Ani čistý CD signál nevyužíva rozsah až do 22.05kHz a v aparatúrach sa bežne nachádza dolnopriepustný filter s prahom 20kHz. Nepočuteľné frekvencie sa neoplatí kódovať, lebo zaberajú veľa miesta a môžu spôsobiť zbytočné vyplytvanie toku a nižšiu výslednú kvalitu než by bola bez nich.

Zaujímavou schopnosťou LAME je aj používanie krátkych blokov, ktoré umožňuje lepšie využívať vysoké toky pri náročných pasážach. Krátke bloky však nie sú v súlade s pôvodnou ISO špecifikáciou a prehrávače to nemusia korektne prehrávať. Pri súkromnom použití a správnom prehrávači to síce nemusí vadiť, ale ak uvažujete o šírení svojich mp3 nahrávok, tak radšej využite voľbu nútenej kompatibility s ISO. Súbor bude trochu väčší, ale pôjde prehrať každému. A o to predsa ide. Podobnou možnosťou je nezávislá veľkosť blokov pre ľavý a pravý kanál. Platí pre ňu to isté.

LAME v praxi

Ako to vyzerá s kvalitou zvuku? Aj pri základnom nastavení je veľmi dobrá. Po zoznámení sa s parametrami a určitom experimentovaní som si našiel svoje obľúbené nastavenia a môžem podľa svojich subjektívnych skúseností povedať, že LAME hrá lepšie ako Fraunhoffer, pričom Bladeenc s Xingom necháva ďaleko vzadu. Podľa niektorých názorov je dokonca lepší než Ogg Vorbis. Ide o subjektívne názory na kvalitu zvuku a každý čitateľ s náročným sluchom a dostatočne kvalitným vybavením si asi svojho favorita vyberie sám.

LAME sa ovláda ako program pre príkazový riadok, čiže pomocou parametrov. Väčšina používateľov LAME sa však s príkazovým riadkom nikdy nestretne, pretože s enkodérom komunikujú prostredníctvom front-end aplikácií, kde si žiadané parametre pohodlne „naklikajú“ pomocou myši, zvolia cieľové súbory a stlačia „zázračné“ tlačidlo ENCODE. Front-end sa postará o prevod stlačených virtuálnych prepínačov do podoby parametrov príkazového riadku a prenechá všetku prácu enkodéru. Front-end aplikácie sú vynikajúci vynález, pretože množstvo ľudí by nedokázalo zadať svoje požiadavky pomocou príkazového riadku, a aj pre tých, ktorí schopní sú, je to pomocou myši pohodlnejšie. Tienisté stránky sú dve. Prvou je, že front-end často sprístupňuje iba niekoľko parametrov a zďaleka nepokrýva skutočný potenciál LAME. Jeden z mála front-endov, ktorý bol skutočne dôsledný, je Razor, ktorý sa pre svoju komplexnosť stal mojím najobľúbenejším. Dokáže napr.zobrazovať histogram zastúpenia tokov pri VBR, ktorý môže pomôcť pri optimalizovaní nastavení -ak sa to „tlačí“ na niektorú stranu, je to znamenie, že treba zmeniť kvalitu alebo posunúť hraničné toky.

Utajovanie parametrov pred užívateľmi je vo front-endoch možno motivované jednoduchosťou ovládania, ale myslím, že prístup k nim by užívateľ mal mať vždy, aspoň v nejakom odľahlom zapadnutom sub-menu. Druhou tienistou stránkou je, že nie každý si pri používaní uvedomí, že skutočná sila nespočíva vo front-end aplikácii, ale v motore, ktorým je kódovací engine. Užívateľ si bežne pamätá názov front-endu, ale o kompresore, ktorý vytvorí z wav vytúženú empétrojku, často ani netuší.

Iný, ešte jednoduchší spôsob použitia LAME, spočíva v jednoduchom drag-and-drop úkone: „uchopiť“ želané súbory a „pustiť“ ich do ikony programu lame.exe

Je takisto možné prepojiť LAME s CD utilitami, napríklad so skvelým Exact Audio Copy. Jednoducho nájdete cestu na disku, kam ste LAME stiahli, zadáte kompresné parametre a prevod CDDA do mp3 môže začať.

Niektoré programy využívajúce LAME:
 

Linux: andromeda, cd2mp3, rip, avifile, Grip, jbm2, Krabber, Mp3Maker, dekagenc, ripperX, T.E.A.R., xtunes

Mac: DropMP3, RaviLAME

Windows: CDex, Lamedrop, LAMEX, m3w, outlame, RazorLame, WinLama, WinLAME

Ďalej napr.: ALF, dBpowerAMP, EnLAMEr, EAC, LameBatch, LAMEr, RipTrax, SecondSpin, vbLamer, WORM MP3 Encoder, ZLURP

Na záver

Prečo ma LAME natoľko zaujal, keď existuje viacero kodekov pre kompresiu mp3? Iste aj preto, že je najlepší spomedzi bezplatne dostupných, dokonca v mnohých ohľadoch predčí aj profesionálne komerčné kodeky, ako napr. Fraunhoffer. Najzaujímavejšia je však jeho OpenSource podstata -LAME je ukážkou, že nezávislá OpenSource komunita je schopná nielen dobre programovať, ale omnoho viac -dokáže uskutočniť samostatný vedecký výskum a na jeho úspešných výsledkoch postaviť mimoriadne vydarený produkt. Práve táto okolnosť robí z LAME omnoho viac než len mp3 enkodér. Hoci budúcnosť formátu mp3 je kvôli patentovým problémom neistá, LAME ostane ešte nadlho dôkazom životaschopnosti OpenSource filozofie.

Odkazy:

www.lame.org a lame.sourceforge.net – domovská stránka
www.r3mix.net a www.mp3-converter.com - Ďalšie informácie o mp3 a linky
home.wanadoo.nl/~w.speek – posluhový test pre náročný sluch

Mgr. Peter Tuhárský, Tomáš Milbach