Zrozumienie konwersji i (de) kompresji bezstratnego dźwięku

12

Mam kilka pytań dotyczących bezstratnego dźwięku. Zastanawiam się nad zebraniem całej mojej kolekcji muzyki do bezstratnego pliku .flac, ale najpierw chcę zrozumieć kilka rzeczy.

Jeśli mam plik .flac i chcę przekształcić go w, powiedzmy, .wav, jak mogę to zrobić, aby nie stracić jakości? Jeśli go zdekompresuję, wiem, że nie stracę jakości. Czy konwersja .flac do .wav jest taka sama jak dekompresja?

Czy dotyczy to również formatu .ape? Mam kilka nagrań z domeny publicznej, które pobrałem w .ape, ale chcę to zrobić .flac. .Ape byłby możliwy do .flac bez użycia .wav jako pośrednika. Chcę mieć pewność, że w żaden sposób się nie zgubisz.

Ponadto, jeśli istnieją jakieś przewodniki, które bezbłędnie wyjaśniają świat bezstratnych, czy ktoś byłby skłonny udostępnić link? :)

Ryan McClure
źródło

Odpowiedzi:

14

Pierwszy:

Poznaj różnicę między kodowaniem a formatem kontenera . http://en.wikipedia.org/wiki/Digital_container_format

Format kontenera to format danych, który „kapsułkuje” inne zakodowane dane. Często zawiera „meta-informacje” o zakodowanych danych lub ma sposób na przechowywanie wielu oddzielnych strumieni zakodowanych danych lub coś w tym rodzaju.

Kodowanie, wytwarzane przez kodek, jest rzeczywistym „mięsem” strumienia danych.

Najczęstszym przykładem, jaki mogę wymyślić, jest format „Ogg / Vorbis”. Ogg to format kontenera, a Vorbis to kodowanie. Masz więc plik sformatowany w formacie Ogg, a w środku są te małe segmenty, które zawierają zakodowane dane. W każdym segmencie znajduje się strumień danych zakodowany przez Vorbis i nic więcej. Na wiaderku może być na przykład wybita nazwa wykonawcy i tytuł piosenki.

Wróćmy do technologii:

  1. Jeśli masz już muzykę w formacie stratnym, takim jak mp3 lub ogg / vorbis, przekonwertowanie jej na format bezstratny zużyje tylko (dużo) miejsca na dysku i NIE BĘDZIE - absolutnie NIE BĘDZIE - poprawiać jakości dźwięk w ogóle. Nie możesz stworzyć wierności, gdy już została utracona. Chyba że piszesz interfejs GUI w języku Visual Basic w jakimś popularnym programie telewizyjnym o nazwie CSI, ale to fantazja, a nie rzeczywistość.

  2. Jeśli masz muzykę w innych bezstratnych formatach i chcesz przekonwertować ją na FLAC, możesz to zrobić.

  3. Zachowaj ostrożność przy rzucaniu wokół terminu „WAV”. Wav nie musi być bezstratny; w rzeczywistości WAV to tylko kontener dla różnych możliwych formatów. W pewnym sensie przypomina to AVI. Możesz mieć bezstratny WAV, jeśli są to tylko surowe dane PCM, ale możesz także osadzić dane MPEG-1 Layer III (stratne) w pliku WAV.

  4. Istnieje możliwość utraty danych podczas konwersji z jednego bezstratnego formatu na inny, jeśli zmniejszysz wierność danych. Na przykład, jeśli konwertujesz niepodpisany 16-bitowy strumień danych PCM przy 48000 Hz na 8-bitowy strumień danych PCM przy 44100 Hz, tracisz wierność na dwa sposoby: próbki są scalane z 48000 do zaledwie 44100 na sekunda (co powoduje utratę danych), a dane muszą zostać zmiksowane w dół, aby zmieścić informacje w zaledwie 8 bitach zamiast 16 na próbkę, co dramatycznie pogorszy jakość.

Każdy cyfrowy strumień audio, nawet kodowany przez koder kompresujący (stratny lub bezstratny), ma następujące „właściwości formatu próbki”, które są niezbędnymi elementami opisującymi właściwości strumienia:

  1. Przykładowa szerokość i głębokość bitów, tj. 8 bitów, 16 bitów itp. Szerokość i głębokość bitów są nieznacznie różne, a także little-endian / big-endian (co nie wpływa na jakość) oraz podpisane lub niepodpisane (co również nie wpływa na jakość, ale wpływa na sposób, w jaki koder / dekoder radzi sobie z danymi). Kluczową kwestią do zapamiętania jest to, że „więcej bitów jest lepsze”. Tak więc wersja 32-bitowa jest lepsza niż 16-bitowa itp.

  2. Częstotliwość, znana również jako częstotliwość próbkowania. Im więcej, tym lepiej, ponieważ na sekundę odtwarzanych jest więcej „próbek” dźwięku. Wyobraź sobie, że szybko przesuwasz palcem po talii kart i patrzysz, jak karty przemijają - tak właśnie dzieje się cyfrowe audio. Każda próbka jest kartą, a jeśli masz więcej kart lecących na sekundę, dźwięk jest bardziej płynny. Tak jakbyś naprawdę zauważył, gdybyś przerzucał tylko 5 kart na sekundę, ale wszystko by się rozmazało, gdybyś przerzucał tysiące kart na sekundę. Im więcej, tym lepiej, ponieważ jest bardziej naturalny i bliższy rzeczywistości, która jest analogiczna i nieskończenie podzielna (cóż, aż do jednostek Plancka, ale jest to dyskusyjne i nie na temat).

„Bezstratny” oznacza po prostu, że jeśli użyjesz tego samego lub lepszego formatu próbki na wyjściu, jak na wejściu, nie stracisz żadnych danych.

Więc jeśli przejdziesz z 16-bitowego na 32-bitowy format próbki, nie stracisz danych. Ale jeśli przejdziesz z 32 do 16 bitów, stracisz dane.

Odpowiedź na pytanie, czy użycie FLAC ma sens, zależy od danych źródłowych: jeśli masz 64-bitowe pliki WAV, które zostały pierwotnie nagrane w tym formacie próbkowania, z częstotliwością 192000 Hz (czyli 192 kHz), i przekonwertujesz je na „ standardowy „przykładowy format FLAC 16-bitowy i 44,1 KHz, stracisz tonę danych. Ale jeśli plik WAV jest 8-bitowy z jedynie 22100 próbkami na sekundę i konwertujesz go na 16-bitowy plik FLAC z 44100 próbkami na sekundę, nie stracisz danych. Możesz nawet zwiększyć rozmiar pliku, w zależności od tego, czy wygra kompresja bezstratna, czy mniejszy format próbki.

Przykładowy format będzie miał wpływ na ilość miejsca zajmowanego przez plik, więc „większe” bity i „szybsze” częstotliwości próbkowania zajmą więcej miejsca.

Jeśli chodzi o kwestie praktyczne i ludzkie ucho: tak naprawdę nie zauważysz, jeśli przekonwertujesz oryginały o wysokiej wierności do 16-bitowego formatu FLAC 44,1 KHz. Ale nie zauważysz poprawy, jeśli konwertujesz MP3 na FLAC. Musisz więc ocenić, w jakim formacie przykładowym są Twoje dane źródłowe, zanim zdecydujesz, co zrobić.

Teraz, gdy przekazałem ci wszystkie te informacje, oto moje bezpośrednie i bezpośrednie, bez wyjaśnień odpowiedzi na twoje pytania:

Mam kilka pytań dotyczących bezstratnego dźwięku. Zastanawiam się nad zebraniem całej mojej kolekcji muzyki do bezstratnego pliku .flac, ale najpierw chcę zrozumieć kilka rzeczy.

Jeśli twoja kolekcja muzyki znajduje się na płytach CD i chcesz zgrać ją do FLAC, to moim zdaniem bardzo dobrze pasuje. Jakość dźwięku CD będzie wynosić 44,1 KHz i 16 bitów na próbkę. Jest to dokładnie zgodne z domyślnymi ustawieniami FLAC (przynajmniej domyślnymi w koderach, których używam). Dlatego nie stracisz żadnych danych, a po zdekodowaniu będą one matematycznie identyczne z danymi wejściowymi.

Jeśli mam plik .flac i chcę przekształcić go w, powiedzmy, .wav, jak mogę to zrobić, aby nie stracić jakości? Jeśli go zdekompresuję, wiem, że nie stracę jakości. Czy konwersja .flac do .wav jest taka sama jak dekompresja?

Możesz przekonwertować go na plik .wav o takim samym lub szerszym formacie próbkowania niż dane wejściowe i nie spowoduje to utraty jakości.

Gdy odtwarzacz multimedialny odtwarza dźwięk w pliku flac, w zasadzie dekoduje dane flac do formatu PCM przed wysłaniem tych danych PCM na kartę dźwiękową. Rozpakuje go do dokładnie tych samych danych, które weszły; więc jeśli 16-bitowe dane PCM 44,1 KHz wejdą, to wyjdzie i przejdzie do twoich głośników.

Jedyną różnicą między tą aktywnością a konwersją dźwięku do pliku WAV jest to, że podczas konwersji go do pliku WAV musi on utworzyć pojemnik WAV z odpowiednimi bitami wypełniającymi itp., A także pozwala wybrać format próbkowania pliku WAV. Ale zakładając, że przykładowy format jest taki sam, jedyną różnicą między plikami FLAC i WAV będzie rozmiar pliku: pliki WAV będą znacznie większe.

Czy dotyczy to również formatu .ape? Mam kilka nagrań z domeny publicznej, które pobrałem w .ape, ale chcę to zrobić .flac. .Ape byłby możliwy do .flac bez użycia .wav jako pośrednika. Chcę mieć pewność, że w żaden sposób się nie zgubisz.

Nie, to nie jest możliwe, aby to zrobić bez użycia jakiegoś formatu PCM jako pośrednik. Ale tak, to jest możliwe, aby to zrobić bez użycia pliku WAV. Zwróć uwagę na różnicę. Strumień danych PCM. Plik WAV. Jeśli to rozróżnienie nie jest dla ciebie jasne, przeczytaj ponownie początek mojego postu. Jeśli chcesz mieć pewność, że „ani trochę” nie zostanie utracone, musisz sprawdzić pliki APE i zrozumieć, w jakim formacie próbnym się znajdują, i upewnić się, że koder FLAC jest ustawiony na kodowanie dla tych samych ustawień.

Wewnętrznie każdy program konwertujący dźwięk będzie dekodował z formatu źródłowego na jakiś bezstratny format próbny PCM, a następnie pobierał te próbki PCM i ponownie kodował je w formacie docelowym.

Ponadto, jeśli istnieją jakieś przewodniki, które bezbłędnie wyjaśniają świat bezstratnych, czy ktoś byłby skłonny udostępnić link? :)

Moim zdaniem najlepszym sposobem na naukę jest robienie. Jeśli poświęcisz trochę czasu na naukę frameworka Gstreamer, jak go używać i znaczeń różnych tunerów formatu próbkowania oraz jak zbudować potok, wyjdziesz z naprawdę silnym zrozumieniem cyfrowego dźwięku. Sprawdź to. http://gstreamer.freedesktop.org/ Możesz również pobrać zestaw Gstreamer SDK ze strony http://code.entropywave.com/gstreamer-sdk/ (system Windows jest obsługiwany) i eksperymentować z gst-launch-0.10 bez konieczności kompilowania czegokolwiek ze źródła.

Kilka odkrywczych rzeczy:

gst-inspect-0.10 vorbisenc gst-inspect-0.10 vorbisdec gst-inspect-0.10 audioconvert gst-inspect-0.10 audioresample

Następnie dowiedz się więcej o ograniczeniach, konstruowaniu rurociągów itp., A będziesz od razu postępować.

* Uwaga: Zdaję sobie sprawę, że nie wyjaśniłem, co to jest PCM. Wikipedia robi to lepiej niż ja: http://en.wikipedia.org/wiki/Pulse-code_modulation

allquixotic
źródło
Wow, to jest po prostu niesamowite, jak jasno i jak doskonale to wszystko wyjaśniłeś. Nigdy nie myślałem o połowie z tych rzeczy, dobre jedzenie do namysłu. Dzięki za odpowiedź - i tyle czasu zajęło ci napisanie tego wszystkiego! +1!
Ryan McClure,
Zawsze powinieneś dążyć do utrzymania nienaruszonych przepływności i częstotliwości próbkowania, ponieważ brak strat idealnie implikuje identyczne dane PCM. Próbkowanie w górę do czegokolwiek innego niż dwukrotność częstotliwości próbkowania nigdy nie będzie bezstratne (nie można równomiernie dodawać zer) i marnuje miejsce na dysku. W każdym razie nie powinno to stanowić problemu w przypadku FLAC, ponieważ może on obsługiwać dowolną rozdzielczość bitową PCM od 4 do 32 bitów na próbkę, dowolną częstotliwość próbkowania od 1 Hz do 655,350 Hz w przyrostach 1 Hz oraz dowolną liczbę kanałów od 1 do 8 ( en.wikipedia.org/wiki/FLAC#Design )
mtone
WAV zawsze zawiera PCM. Może to nie być PCM jakości CD (ale praktycznie mówiąc, ogólnie można to założyć, ponieważ prawie zawsze tak jest), ale będzie to PCM, a nie coś innego jak MPEG 3 warstwa 2.
PSUSI
@psusi: Przepraszamy, ale się mylisz. Przeczytaj artykuł w Wikipedii na temat WAV: en.wikipedia.org/wiki/WAV . Jeśli chcesz, mogę zamieścić link do pliku WAV zawierającego dźwięk MP3. Należy pamiętać o plikach WAV, ponieważ są one tylko plikiem RIFF, a plik RIFF jest dość prymitywną wersją formatu kontenera multimediów. Ale przynajmniej w swoim podstawowym celu nie różni się on tak bardzo od Ogga czy Matroski, oprócz wspierania tylko dźwięku, a nie wideo. Edycja: Nie muszę tworzyć pliku wav / mp3; tak! W rzeczywistości jest to powiązane z Wikipedią! nch.com.au/acm/8kmp316.wav
allquixotic
W tej odpowiedzi są pewne nieścisłości. „Częstotliwość, znana również jako częstotliwość próbkowania. Więcej jest lepszych, ponieważ masz więcej„ próbek ”dźwięku odtwarzanych na sekundę.” - Nie tak działają częstotliwości próbkowania. Gdyby nie uwzględniono głębokości bitów, dane o częstotliwości próbkowania 48 kHz mogłyby bezstratnie reprezentować sygnały do ​​24 kHz, a dodanie większej liczby próbek nie zmieniłoby tego. Więcej próbek wpływa tylko na częstotliwości, które możesz reprezentować. Konwersja z 44,1 kHz na 48 kHz również nie jest ściśle bezstratna, nawet jeśli wprowadzony błąd jest niesamowicie mały.
cooky451
1

Nie mogę się zgodzić z twierdzeniem allquixotic.

Jeśli masz już muzykę w formacie stratnym, takim jak mp3 lub ogg / vorbis, przekonwertowanie jej na format bezstratny zużyje tylko (dużo) miejsca na dysku i NIE BĘDZIE - absolutnie NIE BĘDZIE - poprawiać jakości dźwięk w ogóle. Nie możesz stworzyć wierności, gdy już została utracona. Chyba że piszesz interfejs GUI w języku Visual Basic w jakimś popularnym programie telewizyjnym o nazwie CSI, ale to fantazja, a nie rzeczywistość.

Brakuje Ci wiedzy na temat inżynierii dźwięku i karmienia ludzi fałszywym stwierdzeniem.

  1. Zarówno Ogg, jak i Vorbis mają kontenery, w których zapisywane są oryginalne dane falowe, które można przekształcić w bezstratne za pomocą tych danych. Zrób wystarczająco google.

  2. nawet konwersja plików MP3 o niskiej jakości na bezstratną zapewnia DUŻĄ poprawę dźwięku, nie jest tak doskonała jak oryginalna, ale można to łatwo naprawić za pomocą dynamiki i ditheringu. https://www.izotope.com/en/products/master-and-deliver/ozone.html/OzoneDitheringGuide.pdf

Dźwięk nie jest danymi 10100110101001, więc mniejszy rozmiar pliku nie oznacza utraty jakości. Być może masz doświadczenie z szybkością od 128 kb / s do 320 kb / s dekady temu i zgadnij, że od 128 kb / s do bezstratnej jest niemożliwe. Proszę przetestować to proste zadanie i je zrealizować.

Seandex
źródło