Co to jest MP3?

MP3 czyli MPEG 1 Layer III to format stratnej kompresji dźwięku, opracowany na początku lat ’90 ubiegłego wieku przez Fraunhofer Institute. Historycznie jest to pierwszy popularny format kompresji muzyki, cieszący się do dziś niesłabnącą popularnością. Jest on obsługiwany przez praktycznie każdy istniejący przenośny odtwarzacz muzyki.

Cechy kompresji MP3 to m.in.:

  • zastosowaniu psychoakustycznego modelu słuchu
    • próg słyszalności, czułość słuchu – nie wszystkie częstotliwości słyszane są z taką samą głośnością, częstotliwości skrajne znajdują się nieraz poniżej progu słyszalności
    • maskowanie – głosniejsze dźwięki sprawiają iż cichsze są niesłyszalne, zarówno w domenie czasu jak i częstotliwości
  • joint stereo (wyjaśnienie znajduje się niżej)
  • rezerwuar bitów – w przypadku trudnych do skompresowania fragmentów utworu, fragmenty sąsiednich ramek działają jako bufor do przechowania dodatkowych danych
  • kodowanie Huffmana – strumień danych kompresowany jest za pomocą bezstratnego algorytmu Huffmana

Format MP3 porównać można do formatu JPEG (w obu kompresja opiera się na tych samych zasadach). Kompresję MP3 można więc przedstawić – bardzo obrazowo – w taki oto sposób (kliknij aby powiększyć):

Grafika nieskompresowana Grafika skompresowana Grafika mocno skompresowana

Plik po lewej to oryginał. Skompresowany bezstratnie.

Jakość środkowego pliku została dobrana tak, aby ukazać jakość około 11-krotnej kompresji (niejako odpowiednik 128kbps).

Jakość prawego pliku została celowo “przesadzona” by ukazać artefakty nadmiernej kompresji (bądź kiepskiego enkodera).

Poniżej znajduje się trochę szczegółów opisujących format MP3, mających na celu uczulić na jakość przygotowywanych przez siebie plików MP3.

Bitrate

Pliki MP3 mogą mieć bitrate w zakresie od 32 do 320kbps. Standardowe wartości bitrate’u to: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 oraz 320kbps (kbps = kilobitów na sekundę, bajt to osiem bitów).

W typowych warunkach, dla typowego słuchacza, pliki MP3 o przepływności 128kbps są “przeźroczyste” (nieodróżnialne od płyty CD-Audio). Typowe warunki to: jakiś odtwarzacz, stanadardowe słuchawki otrzymane z odtwarzaczem, szum miasta lub komunikacji miejskiej albo jakikolwiek inny szum czy hałas, wykonywanie czynności rozpraszającej uwagę jak np. bieganie, czytanie, czy po prostu zwracanie uwagi na to, co się dzieje dookoła. Typowy słuchacz to osoba, która nigdy (albo nieczęsto) nie słuchała nic poza plikami MP3 i radiem, nie zwracająca nadmiernej uwagi na detale dźwięku.

W przypadku odsłuchu w lepszych warunkach, przez słuchaczy zwracających uwagę na detale dźwięku, przeźroczystość rozpoczyna się zwykle od około 192kbps. Lepsze warunki to: dobre źródło dźwięku, dobre słuchawki, względny spokój w czasie odsłuchu oraz brak głośnego szumu czy hałasu dochodzącego z otoczenia.

Z jednej strony nie należy kompresować plików MP3 mających bitrate niższy niż 128kbps, chyba że monofonicznych albo w przypadku kompresji mowy lub też kiedy naprawdę – z dowolnego powodu – najbardziej zależy nam na małym rozmiarze pliku wynikowego.

Z drugiej strony nie należy popadać w paranoję i kompresować wszystkiego do 320kbps, co jest bezsensownym marnowaniem miejsca na dysku. Ani – w znakomitej większości przypadków – tej “jakości” nie będzie słychać, ani tak naprawdę jej tam nie ma. Do archiwizacji przeznaczone są lepsze formaty kompresji stratnej lub wręcz formaty kompresji bezstratnej (patrz: lista na samym dole strony).

Optymalny średni bitrate utworu leży – w zależności od konkretnego utworu i przeznaczenia plików MP3 – gdzieś w przedziale 128-256kbps. Tak naprawdę nie warto wierzyć żadnym “przedziałom” ani “konkretnym wartościom, ale samodzielnie ustalić optymalną jakość kompresji.

Szczegółowy opis wyboru optymalnej jakości znajduje się w osobnym artykule (patrz: lista na samym dole strony).

Teoretycznie możliwe jest przekroczenie granicy 320kbps, kompresując plik (np. LAME na to pozwala) do tzw. freeform-stream. Jednak są z tym związane dwa dość poważne problemy:

  • taki plik nie będzie odtwarzany przez żaden odtwarzacz przenośny i prawie żaden komputerowy (najczęściej, żeby dało się taki plik odsłuchać, trzeba zdekodować go do pliku WAVE przy pomocy LAME-a)
  • zwiększanie bitrate’u ponad 320kbps nie daje w przypadku plików MP3 zwiększenia jakości – format MP3 nie został zaprojektowany do takich zastosowań i dochodzi wówczas do paradoksu – taki plik ma przepływność, jakby był skompresowany w jakimś formacie bezstratnym, ale ale słychać że to nie jest to samo co kompresja beztstratna

Innymi słowy freeform-stream to jeszcze większa strata czasu i miejsca na dysku.

Próbkowanie

Pliki MP3 mogą zawierać dźwięk o próbkowaniu 32kHz, 44.1kHz oraz 48kHz (próbkowanie zapisywane jest w skrócie jako np. 44.1k). Standardowe próbkowanie plików MP3 to 44.1k, gdyż takie jest standardowe próbkowanie formatu CD-Audio.

Nie należy podczas kompresji płyt CD-Audio (ani w żadnym innym przypadku) próbować resamplingu np. 44.1k -> 48k. W najlepszym razie nie daje to zupełnie nic. W goryszym obniży to jakość dźwięku, gdyż z jednej strony nie ma idealnego algorytu resamplingu, z drugiej strony ten sam plik MP3 44.1k ma wyższą jakość niż plik 48k). W najgorszym całkowicie zrujnuje to brzmienie np. z powodu zatosowania algorytmu, który podczas resamplingu dodaje do dźwięku znaczne zniekształcenia.

Żaden odtwarzacz nie ma problemu z poprawnym odegraniem plików o próbkowaniu 44.1k. W przypadku plików o próbkowaniu 32k i 48k istnieje niebezpieczeństwo, iż albo nie zostaną one odegrane wcale (np. sporo odtwarzaczy nie jest w stanie odtworzyć plików 48k), albo – zdaża się i tak – ich jakość zostanie zdegradowana z powodu resamplingu do 44.1k, który zostanie przeprowadzony przez odtwarzacz aby mógł odegrać taki plik.

Stereo, joint stereo, dual channel

Kanały lewy i prawy w pliku MP3 mogą zostać potraktowane na kilka sposobów.

Stereo, kiedy oba kanały kodowane są po prostu jako “kanał lewy” i “kanał prawy”. Jest to historycznie najstarszy rodzaj plików MP3. Warto go stosować tylko w przypadku wysokiego bitrate’u (256kbps, 320kbps).

Joint stereo, kiedy enkoder ma wybór, by skompresować dany fragment albo jako “kanał lewy” i “kanał prawy”, albo jako “kanał środkowy” i “kanał otaczający”. Dzięki dopracowanej implementacji w najnowszych enkoderach, tryb ten pozwala na skuteczniejszą kompresję dźwięku. Jest to podstawowy tryb kompresji muzyki niezależnie od bitrate’u.

Dual channel, kiedy “kanał lewy” i “kanał prawy” kompresowane są niczym dwa zupełnie niezależne, monofoniczne pliki. W ten sposób nigdy nie kompresuje się muzyki. Kompresuje się tak np. kursy językowe – gdzie w lewym kanale słychać mowę w jednym języku, a w prawym w innym. Bitrate jest wówczas dzielony między oba kanały dokładnie na połowę.

Szczegółowy opis kompresji stereo znajduje się w osobnym artykule (patrz: lista na samym dole strony).

CBR, VBR, ABR

Historycznie, pliki MP3 kompresowane były w trybie CBR, czyli stałego bitrate’u. Każda sekunda takiego pliku zapisywana była jako paczka danych o dokładnie tej samej wielkości. Tryb ten tryb oferuje względnie niską jakość dźwięku, gdyż nie pozwala na podwyższenie bitrate’u w przypadku “trudnych do skompresowania” fragmentów utworów. Słychać wtedy wyraźnie przekłamania w dźwięku (tzw. artefakty kompresji).

Aby obejść ten problem opracowano tryb VBR, czyli zmiennego bitrate’u. W tym trybie ilości danych koniecznych do skompresowania danego fragmentu utworu dopasowywana jest dynamicznie przez enkoder. Tym samym pozwala on na zachowanie stałej jakości dźwięku w trakcie całego utworu, niezależnie od “stopnia złożoności” wybranego fragmentu.

Tryb ABR (uśrednionego bitrate’u) jest tak naprawdę odmianą trybu VBR – tryb ABR ma zmienny bitrate, więc należy do kategorii VBR. Różnica leży w rodzaju zastosowanego algorytmu doboru bitrate’u. Podczas gdy w przypadku “prawdziwego” trybu VBR jest on bardzo zaawansowany, to w przypadku trybu ABR jest on mocno uproszczony i skutkuje gorszą jakością dźwięku niż tryb VBR.

Zasada jest taka, iż najlepszą jakość zapewnia tryb VBR, kolejno ABR a najniższą CBR.

Jakość utworu po kompresji zależy oczywiście od algorytmów zaimplementowanych w enkoderze, którego użyto do kompresji danego pliku.

Szczegółowy opis trybów kompresji znajduje się w osobnym artykule (patrz: lista na samym dole strony).

Tagi

Pliki MP3 pozwalają na zapisanie w sobie – poza samym dźwiękiem – metadanych, czyli “danych na temat danych”. Są to pola określające m.in.:

  • TITLE – tytuł utworu
  • ALBUM – nazwa albumu
  • ARTIST -wykonawca
  • TRACKNUMBER – kolejny numer utworu na płycie lub w albumie
  • GENRE – gatunek muzyki (wybrany z predefiniowanej listy lub dowolny, wpisany ręcznie)
  • DATE – rok wydania albumu lub rok nagrania albumu
  • COMMENT – dowolny komentarz, np. aranżacja, wersja utworu, dodatkowe informacje na temat wykonawcy etc.

Tagi w plikach MP3 mogą być w formacie:

  • ID3v1 – najpopularniejsze, długość poszczególnych pól jest ograniczona co do ilości możliwych do wpisania znaków
  • ID3v2 – obecny standard, mają nieograniczoną długość pól, pozwalają na używanie znaków narodowych i wstawienie do pliku okładki
  • APEv2 – równie zaawansowane co ID3v2 ale niepopularne, nie są obsługiwane przez żaden odtwarzacz przenośny i dużą część odtwarzaczy komputerowych

Szczegółowy opis tagów znajduje się w osobnym artykule (patrz: lista na samym dole strony).

Enkoder

W przypadku jakości plików MP3, najważniejszym wyborem jest wybór enkodera. Jest to o tyle ważne, że w przypadku plików MP3 o tych samych parametrach ale skompresowanych różnymi kodekami, da się usłyszeć czasem wyraźną a czasem tylko subtelną różnicę jakości.

Najlepszy – przy tym darmowy – jest LAME (patrz niżej).

Innym bardzo dobrym – choć komercyjnym – enkoderem jest FhG, pochodzący z Fraunhofer Institute. Znaleźć go można w komercyjnych edytorach audio np. CoolEdit, Adobe Audition, Nero Wave Editor i innych aplikacjach do obróbki dźwięku. Dostępny jest on również w Windows Media Playerze (płyty CD-Audio ripowane do MP3 są kompresowane przy pomocy FhG). Coraz częściej jest jednak wypierany przez LAME-a.

Do “zaledwie dobrych” enkoderów zaliczają się niepopularny już Xing (historycznie pierwszy, który potrafił kompresować w trybie VBR) oraz dość nowy Helix.

Sprawa jakości kodeka Blade jest dyskusyjna. Z jednej strony jest to stary kodek, nie oferujący zaawansowanego modelu psychoakustycznego (co obajwia się np. większymi artefaktami kompresji), z drugiej dość wiernie oddaje barwę dźwięku.

Do złych kodeków zaliczyć można każdy inny enkoder, który nie znalazł się na tej liście, np: Dist10 (najprymitywniejszy), Plugger, Shine etc.

LAME

Najlepszym istniejącym – do tego darmowym – enkoderem jest LAME. Jest on bardzo zoptymalizowany pod względem jakości dźwięku ale mimo to kompresja przebiega bardzo sprawnie. Do tego jako jedyny pozwala na zapisanie w nagłówku pliku danych, niezbędnych do odtwarzania gapless (bez przerw między utworami).

Jego najnowsza i jednocześnie rekomendowana obecnie wersja to LAME 3.97 final. Inną godną polecenia wersją jest mocno wiekowa, ale swojego czasu “dopieszczona” na forum Hydrogenaudio wersja LAME 3.90.3 (zamieszczam ją jako ciekawostkę, nadaje się do użytku jedynie z przełącznikiem –alt-preset, wersja 3.97 jest po prostu lepsza).

Wersja 3.98 beta jest obecnie wersją rozwojową, nie należy jej używać na codzień. Prace nad wersja 4.00 alpha zostały wstrzymane z powodu nękającej ją ogromnej ilości błędów (w tym ważących na jakości) – tej wersji nie należy używać w żadnym przypadku.

LAME jest specjalnie optymalizowany pod kątem tworzenia plików VBR. Możliwe jest jednak również tworzenie wysokiej jakości plików CBR.

Aby uzyskać możliwie najwyższą jakość pliku po kompresji, w przypadku wersji 3.97 należy używać przełącznika -V (np.: -V 2), a w przypadku wersji 3.90.3 przełącznika –alt-preset (np.: –alt-preset standard). Oczywiście w przypadku wersji 3.97 można używać innych przełączników, np. –preset cbr (np. –preset cbr 128) celem uzyskania plików CBR , ale nie są one tak dobrze zoptymalizowane jak te wcześniej wymienione.

W tym momenie należy się bardzo ważna uwaga.

Niektórzy próbują ustawić ręcznie, w linii poleceń, “bardzo porządne ustawienie odpowiadające temu -V czy –alt-preset a nawet jeszcze lepsze”. Takie ustawienia nie są lepsze. Parametry -V czy –alt-preset (obecnie po prostu –preset) są optymalizowane już tak długo, do tego przez osoby “siedzące w temacie jakości dźwięku od tak dawna” oraz zawierają optymalizacje których nie da się ustawić z linii poleceń, więc nie da się osiągnąć tak znakomitych efektów ot-tak. Zwłaszcza przez osobę która pięć minut wcześniej przeczytała jakiś krótki poradnik na temat “jak ustawić LAME-a”.

Przestrzegam więc przed wszystkimi “genialnymi ustawieniami LAME-a”, które da się znaleźc na co drugiej stronie traktującej o kompresji. Zwłaszcza nie należy nadużywać przełącznika -k, co często jest proponowane przez “ludzi-nietoperzy”.

Na chwilę obecną nie da się uzyskać wyższej jakości niż -V i –preset.

Dekoder

Dlaczego w ogóle wspominam o czymś takim jak “dekoder”? Ponieważ w czasie odtwarzania, skompresowany strumień MP3 (jak zresztą każdy, skompresowany w dowolnym formacie plik audio) musi zostać w locie zdekodowany przez odtwarzacz do nieskompresowanego strumienia PCM, gdyż tylko taki jest w stanie karta dźwiękowa odegrać.

W przypadku przenośnych odtwarzaczy, nie mamy na dekoder żadnego wpływu. W przypadku odtwarzaczy komputerowych jak najbardziej mamy.

Dekoderów jest wiele, ale tylko kilka się liczy. Poniżej zamieszczam listę dobrych dekoderów (kolejność przypadkowa):

  • FhG – “referencyjny” dekoder, stworzony przez instytut Fraunhofera, zaimplementowany w systemie Windows XP (więc np. w Windows Media Playerze), oraz w nowych wersjach Winampa
  • mpg123 – bardzo popularny i bardzo dobry dekoder, zaimplementowany w foobarze2000 i wtyczkach Otachana, na jego bazie powstał dekoder MPAdec
  • MAD – znakomity dekoder udostępniony na licencji GPL, zaimplementowany w wielu odtwarzaczach
  • Apollo – obecnie “matematycznie najdokładniejszy” dekoder, zaimplementowany w odtwarzaczu Apollo

Inne dekodery (jak np. te zaimplementowane w Winampie w wersji starszej niż 2.666) powodowały – przez “nieumiejętne” dekodowanie – dodatkową degradację jakości już zdegradowanego kompresją stratną dźwięku.

Uzupełnienie i materiały dodatkowe

Inne formaty kompresji

  • Kompresja stratna
    • WindowsMedia Audio (WMA) – w przygotowaniu
    • Ogg Vorbis – w przygotowaniu
    • Advanced Audio Coding (AAC), AAC+ i eAAC+
    • Musepack (MPC) – w przygotowaniu
    • ADPCM WAVE – w przygotowaniu
    • mp3PRO – w przygotowaniu
  • Kompresja bezstratna
    • PCM WAVE – w przygotowaniu
    • FLAC – w przygotowaniu
    • Monkey?s Audio (APE) – w przygotowaniu
    • Lossless WMA – w przygotowaniu

7 Responses to “Co to jest MP3?”

  1. mientus says:

    Bardzo dobry artykuł, czekam na AAC i inne :-D

  2. Daniel says:

    Dzięki za pomoc! Długo czekałem na tak porządny artykuł o kompresji w formacie mp3. Dzięki Tobie wreszcie mogłem sobie skonfigurować RazorLame’a tak, jak należy. ;-)

  3. Tarkus says:

    Jedno pytanie, na które nie znalazłem odpowiedzi. W encoderze Lame można ustawić częstotliwość próbkowania “default” (w innej nakładce ta opcja nazywa się “auto”). Czy przy zgrywaniu MP3 z CDA istnieje jakaś różnica w jakości między tą opcją a ustawieniem próbkowania 44,1? “Na chłopski rozum” nie powinno być żadnej, ale nie wiem, na jakiej zasadzie działa ten kodek, więc wolę spytać.

  4. KHRoN says:

    Różnica polega na tym, że default/auto pozostawia probkowanie oryginału jeśli zadany bitrate na to pozwala (np jest wyższy niż 128kbps).

    Jeśli nie, jeśli jest niższy, to probkowanie jest zmniejszane aby zachować jakość – przykładowo plik MP3 64kbps 32kHz brzmi lepiej niż plik MP3 64kbps 44,1kHz.

    Ponadto jeśli już decydujemy się na taka kompresje, wtedy różnica 32 a 44,1 nie robi żadnej różnicy (poza tym że brzmi lepiej) – stąd spokojnie można (a nawet nalezy) ta opcje pozostawić tak jak jest domyślnie.

  5. Marcin says:

    A jak będzie to wyglądało w takiej sytuacji: dostałem plik mp3 skompresowany w CBR 320kbps stereo (44,1KHz, LAME 3.98). Gdyż jest to CBR, doszło już chyba do straty jakości nie do odzyskania. Ale plik jest dość duży, żeby go jeszcze skompresować użyłbym tego samego LAME’a, tyle że zmienił na VBR. I jeszcze – zostawiać stereo czy zmienić na joint stereo? I czy da się ustalić próg jakości algorytmu kodowania VBR, której to jakości na pewno nie uzyskam z uwagi na wcześniejszą stratę?

Leave a Reply