Dlaczego kod FLAC z dekodowanego pliku MP3 jest większy niż plik MP3?

13

Mówiąc dokładniej niż w tytule, załóżmy, że mam plik MP3 o szybkości 320 kb / s. Jeśli go zdekompresuję, to logicznie wszystkie dane z wyjątkiem około 320 kilobitów na każdą sekundę dźwięku powinny być nadmiarowymi danymi, które można skompresować. Kiedy koduję zdekompresowany plik do FLAC lub innego bezstratnego kodeka, dlaczego jest on o wiele większy?

W pokrewnej uwadze, czy teoretycznie jest możliwe bezstratne odzyskanie źródłowego dźwięku mp3 z dekompresowanego wav? (Wiem, że sam plik mp3 jest stratny. Pytam, czy można go ponownie zakodować bez żadnych dalszych strat).

EDYCJA: Pozwól mi wyjaśnić powiązane pytanie i uzasadnienie tego. Załóżmy, że mam plik WAV, który został zdekompresowany z pliku MP3 (i zakładam, że z jakiegoś powodu nie mam samego pliku MP3). Jeśli nie chcę stracić więcej jakości, mogę ponownie zakodować go za pomocą FLAC lub innego bezstratnego kodera i uzyskać większy plik, aby zachować tę samą jakość. Mogę też ponownie zakodować go do formatu mp3 i uzyskać taki sam rozmiar jak oryginał, ale stracić więcej danych. Oczywiście żaden z tych przypadków nie jest idealny. Mogę mieć oryginalny rozmiar lub oryginalną jakość, ale nie oba (mam na myśli jakość oryginalnego mp3, a nie oryginalne bezstratne źródło). Moje pytanie brzmi: czy możemy dostać oba? Czy teoretycznie możliwe jest odzyskanie stratnie skompresowanych danych z stratnych, zdekompresowanych danych, bez utraty jeszcze więcej?

Jeśli to możliwe, wyobrażam sobie algorytm bezstratnej kompresji, który kompresuje dźwięk za pomocą FLAC. Następnie skanuje również dźwięk pod kątem wszelkich oznak wcześniejszej stratnej kompresji, a jeśli zostanie wykryty, ponownie kompresuje go bezstratnie do oryginalnego pliku stratnego. Następnie zachowuje dowolny plik, który jest mniejszy.

Ryan C. Thompson
źródło
oto mój ulubiony przewodnik po zgrywaniu i kodowaniu dźwięku. ciesz się, jest to doskonała lektura: mp3.radified.com
2
Dekoder nie tylko wypełnia 320kb do 1411kb bezsensownymi bitami, bitrate pliku PCM jest podany przez wartość bit-per-sample, liczbę kanałów i częstotliwość próbkowania. W przypadku standardowego dźwięku CD jest to (2 kanały) * (częstotliwość próbkowania 44,1 KHz) * (16 bitów na próbkę) = 1411 kb / s.
skelly
Prosty, MP3 jest skompresowany, FLAC jest nieskompresowany. Podczas konwersji dekompresuje dane MP3.
Moab
2
To jest złe. FLAC to format kompresji dźwięku.
Ryan C. Thompson

Odpowiedzi:

31

Powodem, dla którego FLAC jest większy niż MP3 tych samych danych, jest to, że kodują one inaczej. :) MP3 po prostu koduje informacje percepcyjne, podczas gdy FLAC przechowuje każdą pojedynczą plamkę danych, tylko w bardziej kompaktowym formacie.

  • Konwersja WAV do FLAC jest jak konwersja BMP do PNG.
    • Te same dokładne piksele, ale skompresowane bezstratnie jak plik ZIP do mniejszego rozmiaru.
  • Konwersja WAV do MP3 jest jak konwersja BMP do JPEG.
    • Zamiast przechowywać dokładne piksele, to tak naprawdę przechowuje instrukcje dotyczące generowania kwadratów z pofalowaniami kolorów, które wyglądają trochę jak oryginał.

Podobnie, MP3 przechowuje tylko instrukcje generowania zmarszczek, które po zsumowaniu brzmią jak oryginalne. Różnica między sygnałem prawdziwym a sygnałem generowanym (sygnałem błędu) składa się z przypadkowych, hałaśliwych artefaktów, takich jak JPEG jaggies . Kiedy następnie przechowujesz to w perfekcjonistycznym formacie, takim jak FLAC, musi przechowywać wszystkie te jaggies, a losowy hałas jest trudniejszy do skompresowania bezstratnie, więc zwiększa rozmiar pliku. (Prawdziwie losowy szum jest nieściśliwy. Gdy kompresujesz plik bezstratnie, eliminujesz zbędne powtarzające się wzorce i sprawiasz, że wygląda bardziej jak losowy szum).

Założę się, że jeśli przekonwertujesz JPEG na PNG, zobaczysz taki sam wzrost wielkości, jak podczas konwertowania MP3 na FLAC, ponieważ perfekcyjny bezstratny kodek musi pamiętać każdy mały szum i artefakt, który nie był w oryginalnym bmp.

Ta analogia nie jest idealna, ponieważ dźwięk jest bardziej jak zdjęcie niż schemat grafiki liniowej, ale pomaga w zrozumieniu:

Oryginalny rozmiar BMP: 29 kB

Niebieskie kropki w formie PNG

Rozmiar PNG: 629 B.

Niebieskie kropki w formie JPEG z postrzępionymi krawędziami

Rozmiar JPEG: 1,7 kB

Niebieskie kropki z postrzępionymi kodowaniami do formatu PNG

PNG utworzony z JPEG: 6,2 kB

endolit
źródło
3
Ale oczywiście po przekonwertowaniu pliku na JPG dane są tracone i nie można ich odzyskać przez konwersję na PNG. Jeśli w FLAC / PNG jest więcej danych, większość z nich będzie fikcyjna.
pavium
1
Tak. Znaczące dane są tracone i tworzone są błędne dane.
endolith
1
Jest to wyraźnie zilustrowane na przykładowych diagramach Endolith.
hplbsh
1
To jest niezwykle dokładna odpowiedź. Dobra robota!
cowgod
1
Masz rację. Nie wiem o czym myślałem.
Kevin Panko
2

Podczas dekodowania pliku MP3, bez względu na bitrate, otrzymujesz standardowy dźwięk PCM 1411 kb / s / 44100 Hz (lub cokolwiek to było źródło), który ma wszystkie zauważalne i niezauważalne efekty procesu kodowania stratnego, ten format jest wymagany do odtwarzania i kodowanie / ponowne kodowanie, każdy plik dowolnego kodeka jest dekompresowany podczas odtwarzania na komputerze, odtwarzaczu MP3 itp.

Koder FLAC nie dba o to, czy skompresowany przez niego dźwięk pochodzi z dekodowanego pliku MP3 lub z nowej płyty CD, po prostu zmniejszy rozmiar pliku źródłowego bez zmiany danych audio, umożliwiając pełne odzyskanie źródła, bezstratny proces.

Plik FLAC utworzony z MP3 będzie brzmiał dokładnie tak samo jak MP3, plik FLAC utworzony ze ścieżki CD będzie brzmiał dokładnie tak samo jak CD.

skelly
źródło
0

Aby odpowiedzieć na drugą część, jeśli konwertujesz z powrotem do WAV z MP3, a następnie wybierasz bezstratny koder, powinieneś mieć plik o identycznej jakości po zakończeniu.

Jeśli chodzi o to, dlaczego FLAC jest większy niż MP3, bierzesz jeden z bardziej skompresowanych formatów, dekompresujesz go, a następnie ponownie kompresujesz w mniej wydajnym narzędziu do kompresji (choć z wyższą jakością odtwarzania).

To trochę jak pytanie, dlaczego konwersja JPG do PNG czyni go większym - [częściowo] dekompresujesz plik, a następnie kompresujesz bezstratnie. FLAC, podobnie jak PNG, nie jest zoptymalizowany pod kątem miejsca , ale jakości .

królikarnia
źródło
FLAC (i PNG) są bezstratne, więc powiedzenie, że są zoptymalizowane pod kątem jakości, nie ma sensu.
Joakim Elofsson
3
@Joakim: bezstratna == maksymalna jakość, więc bezstratne formaty są zoptymalizowane pod kątem jakości z definicji .
quack quixote
2
o to mi chodzi z definicji, więc nie ma optymalizacji. jeśli definicją jest maksymalna jakość, to nie ma nic do optymalizacji
Joakim Elofsson
0

mp3 wymaga dekodera do odtworzenia, wynikiem dekodera jest przybliżenie oryginalnej ścieżki (zwykle z płyty CD), więc dekoder dodaje dane, aby umożliwić odtwarzanie (i nie są to nonsensowne dane). Wynikowe przybliżenie uzyskało taką samą szybkość transmisji jak oryginalny utwór. Bez dekodowania mp3 informacja nie ma sensu, więc nie można go przekonwertować na nic innego (chyba że kodowanie bardzo podobne, np. Stereo-mp3 na 2X mono-mp3). A FLAC i mp3 nie są nawet podobne. Podczas dekodowania FLAC wynik nie jest przybliżeniem danych oryginalnych zakodowanych w FLAC, ale jest dokładnie taki sam.

Joakim Elofsson
źródło