Odtwarzanie bez przerw: wyprzedzenie i dopełnienie w MP3, AAC, Opus i FLAC, pomiar

Management Summary
Odtwarzanie bez przerw zachowuje ciągłość koncertów i DJ-setów przy zmianie utworu. Kompresja dźwięku może dodawać materiał przed nagraniem lub po nim; zapisane w pliku informacje wskazują odtwarzaczowi części do pominięcia. Potrzebne są właściwe cięcie, zachowane dane o czasie oraz odpowiedni odtwarzacz. Sama długość pliku nie dowodzi słyszalnej pauzy, a wybrany format audio nie gwarantuje płynnego przejścia na każdym urządzeniu.
Spis treści
Odtwarzanie bez przerw oznacza rozpoczęcie kolejnego utworu bez dodatkowej pauzy. Koncert lub DJ-set powinien zachować ciągłość także na granicach ścieżek. Znaczenie mają poprawne cięcie, informacje kodera i program odtwarzający. Plik może mieć właściwą długość, a odtwarzacz nadal zatrzymywać dźwięk podczas otwierania następnego pliku.
Kodery stratne często przetwarzają bloki próbek i potrzebują materiału przed zamierzonym fragmentem lub po nim. Wyprzedzenie oznacza część na początku pomijaną podczas odtwarzania. Dopełnienie oznacza dodatkową część na końcu. Te próbki nie muszą składać się wyłącznie z cyfrowej ciszy. Plik musi wskazywać właściwy odcinek dźwięku, a dekoder i odtwarzacz muszą poprawnie wykorzystać te informacje.
Co udowadnia kontrola długości
Dwie sekundy przy 44,1 kHz zawierają 88 200 próbek na kanał. Jeśli dekodowanie takiego źródła daje 89 088 próbek, pozostaje 888 dodatkowych. To 20,14 ms. Nie dowodzi to jednak, że każda dodatkowa próbka jest cicha ani że konkretny odtwarzacz wstawia słyszalną pauzę o długości dokładnie 20,14 ms.
Próg poziomu odpowiada na inne pytanie: jak długo przebieg pozostaje poniżej wybranej amplitudy? Sinus regularnie przechodzi przez zero, a muzyka zawiera ciche fragmenty. Krótki odcinek poniżej progu nie jest więc automatycznie dodaną przerwą.

Pomiar
Test wykorzystał FFmpeg 7.1.5, sinus mono 441 Hz przy 44,1 kHz i dwie połowy po dwie sekundy. Źródłem był 16-bitowy PCM ze szczytem 16 000/32 768. Każda połowa zawiera dokładnie 882 okresy. Obie połowy zakodowano niezależnie; zdekodowane próbki obu przebiegów były identyczne dla każdego formatu.
FLAC stanowił kontrolę bezstratną. Pozostałe kodery to libmp3lame przy 320 kbit/s, koder AAC z FFmpeg przy 256 kbit/s w M4A, libopus przy 128 kbit/s i libvorbis przy 192 kbit/s. Wszystkie zdekodowane wyniki wyprowadzono przy 44,1 kHz do porównania długości. Dla Opus obejmuje to zmianę częstotliwości próbkowania.
| Plik i sposób dekodowania | Próbki na połowę przy 44,1 kHz | Dodatkowe próbki |
|---|---|---|
| FLAC, zwykły odczyt | 88 200 | 0 |
| MP3, zwykły odczyt | 88 200 | 0 |
| MP3, usunięta ramka Info/Xing | 89 856 | 1656 |
| AAC/M4A, zwykły odczyt | 89 088 | 888 |
| AAC/M4A, pominięta lista montażowa | 90 112 | 1912 |
| Opus, zwykły odczyt | 88 200 | 0 |
| Ogg Vorbis, zwykły odczyt | 88 200 | 0 |
FLAC odtworzył próbki źródła dokładnie. Równa długość formatu stratnego nie oznacza natomiast identycznych próbek ani całkowicie niezmienionego przejścia. Osobne kodowanie może zmieniać przebieg przy początku i końcu.
MP3: poprawka dekodera dotyczy także końca
Badany MP3 deklarował 576 próbek wyprzedzenia kodera i 1080 próbek dopełnienia. FFmpeg 7.1.5 dodaje 529 próbek do pominięcia na początku i odejmuje tę samą poprawkę od odrzucanego końca. Usuwane jest więc 1105 próbek z początku i 551 z końca. Razem daje to 1656 próbek i przywraca pierwotną długość.
Liczba 529 występuje wprost w kodzie czytnika MP3 tej wersji FFmpeg. Nie jest niewyjaśnioną dodatkową próbką ani uniwersalną wartością dla każdego dekodera. Dodanie 529 na początku bez zmniejszenia pierwotnego dopełnienia liczy tę poprawkę podwójnie przy obliczaniu całej nadwyżki czasu.
Po ponownym zapisaniu bez ramki Info/Xing MP3 dawał w tym teście 89 856 zdekodowanych próbek. Cała nadwyżka wyniosła 37,55 ms. To różnica długości, a nie gwarantowany odcinek całkowitej ciszy.
AAC: podany czas nie jest liczbą zdekodowanych próbek
Lista montażowa M4A deklarowała przesunięcie początku o 1024 próbki audio i czas dwóch sekund. Taka lista przypisuje zapisany materiał do zamierzonej osi odtwarzania. Zwykłe dekodowanie usuwało przesunięcie początku, ale nadal dawało 89 088 próbek. Pominięcie listy dawało 90 112.
Opcja FFmpeg advanced_editlist jest domyślnie włączona. Wyłączenie przy zachowanym uwzględnianiu listy montażowej również dało w tym teście 89 088 próbek. Dokumentacja opisuje zmiany przypisania czasu w strumieniu. Nie obiecuje, że każdy eksport PCM zakończy się dokładnie na liczbie próbek źródła.
Jawne zachowanie pierwszych 88 200 próbek po zwykłym przycięciu początku przywróciło znaną długość źródła. Było to osobne przycięcie według oryginalnego pliku, a nie wynik samego włączenia przełącznika. Nieznanego nagrania nie należy przycinać do zgadywanej długości, ponieważ może zniknąć słyszalne zakończenie.
Opus, Vorbis i FLAC
Ogg Opus liczy pre-skip i pozycje stron według stałej podstawy czasu 48 kHz. Tutaj pre-skip wynosił 312 jednostek, czyli 6,5 ms. Dekoder może jednak wyprowadzać 8, 12, 16, 24 lub 48 kHz. Podstawa czasu pola metadanych i częstotliwość próbkowania pliku wyjściowego to różne wielkości.
W Ogg Vorbis pozycje stron pomagają wyznaczyć koniec dźwięku. FLAC zachowuje pierwotne próbki PCM bez dopełnienia wynikającego z kodowania stratnego. Pole całkowitej liczby próbek w STREAMINFO może zgodnie ze specyfikacją zawierać zero, czyli „nieznana”. Brak liczby w tym miejscu nie uniemożliwia dekodowania poprawnego FLAC do właściwego końca.
Także te formaty potrzebują odtwarzacza uruchamiającego kolejne utwory bez zatrzymania. Zmiana częstotliwości próbkowania, buforowanie i ustawienia odtwarzania mogą wpływać na przejście. Sama nazwa formatu nie zastępuje próby odtwarzania.
Dlaczego próg ciszy ma znaczenie
Przy progu amplitudy 0,00001, około −100 dBFS, najdłuższy cichy odcinek w oknie 100 ms wokół połączenia miał jedną próbkę dla FLAC i zwykłego MP3. MP3 bez ramki osiągał 12,31 ms, a zwykle dekodowany AAC 15,99 ms. Wartości różnią się od dodatkowej długości pliku, ponieważ ciche wybrzmiewanie nie jest tym samym co dokładne zero.
Inny sygnał, próg lub koder może dać inne odczyty. Badano syntetyczny sinus, a nie utwór muzyczny. Nie sprawdzano telefonu ani aplikacji muzycznej. Długość, przebieg i faktyczne odtwarzanie wymagają więc osobnych kontroli.
Praktyczna kontrola przed publikacją
- Ciągłe źródło pozostaje zachowane jako PCM WAV lub FLAC, z udokumentowanymi granicami utworów.
- Osobne pliki do publikacji zwykle powstają przez cięcie tego źródła przed kodowaniem stratnym. Bezstratne cięcie plików skompresowanych wymaga narzędzi znających format i ponownej kontroli.
- Gotowe pliki są dekodowane i porównywane z długościami źródła. Kontrola połączeń obejmuje niechcianą ciszę i skoki przebiegu.
- Docelowy odtwarzacz jest sprawdzany z właściwą kolejnością utworów, ustawieniem przenikania i trybem odtwarzania. Jeśli platforma konwertuje plik, liczy się także dostarczana wersja.
Powiązane narzędzie do sprawdzania odtwarzania bez przerw pokazuje wybrane pola nagłówka. Wyliczona przerwa nie jest zmierzoną pauzą odtwarzania i może wynikać z uproszczonych założeń. Narzędzie pomaga we wstępnym sprawdzeniu metadanych. Nadal potrzebne są liczba zdekodowanych próbek i rzeczywista próba odtwarzania.
Pytania i odpowiedzi
Czy AAC zawsze ma około 20 ms dopełnienia?
Nie. Pokazany wynik dotyczy tego kodera, długości źródła i kontenera. Inne profile AAC, kodery i długości mogą dawać inne wyniki. Stałe przycięcie o 20 ms nie jest uniwersalną naprawą.
Czy jeden ciągły plik usuwa każdy problem odtwarzania?
Jeden plik eliminuje przełączanie między osobnymi plikami na zaznaczonych granicach utworów. Nie zapobiega przerwom buforowania, zanikom ani błędom już obecnym w nagraniu.
Czy poprawne informacje mogą później zniknąć?
Tak. Ponowny zapis lub podział może usunąć pola albo pozostawić nieaktualne liczniki. Istotna jest kontrola ostatecznie dostarczanego pliku. Konwersja po stronie platformy może wymagać kolejnej próby odtwarzania.