За времето си MP3 направи революция в разпространението на музика. Вече не се налагаше да се купуват скъпи компактдискове. Достатъчно беше да се създаде система за изтегляне от Napster през нощта и на сутринта вече са налични множество MP3 файлове за безплатно слушане! Всички изпълнители и албуми. Преди време това си беше направо невероятно.
Но сега времената се промениха. Файловете се свалят за секунди, а дисковото пространство се измерва в терабайти. Няма смисъл музиката да се подлага на осакатяваща компресия със загуба на информация. Можете спокойно да я изтегляте и съхранявате в lossless-формати без загуби, при това със значителна компресия.

Съществуват редица кодеци без загуби, които са по-ефективни от стандартния .FLAC по отношение на компресията. Нека се спрем малко по-подробно.
Няколко думи за историята на кодеците без загуби
Преди 2000 г. повечето кодеци без загуби бяха асиметрични, т.е. те увеличаваха натоварването на процесора при увеличаване на степента на компресия, но това почти не се отразяваше на скоростта на декодиране.
В началото на 21-ви век сред специалистите се разпространи мнението, че за максимална компресия е необходимо да се използва сложен симетричен алгоритъм. Тези алгоритми изискват големи изчислителни ресурси от страна на процесора при декодиране на звука. Първият компресор, който значително надмина FLAC по отношение на компресията на файловете, беше Monkey’s Audio (формати .APE и .MAC) през 2000 г.

След това беше се появи още по-сложния, но патентован кодек OptimFROG, който превъзхожда останалите в най-тежките си режими на компресия.
Симетричният алгоритъм е приложен и в кодека WavPack от края на 90-те години, който по-късно бе подобрен и усъвършенстван.
След това се появява ТАК, който е отбелязан в зелено на следващата диаграма.
Сравнение на производителността на кодеците без загуби върху материал с качество на CD:

WavPack и след това OptimFROG реализираха допълнителна обработка на кодирането, която минимално влияе на скоростта на декодиране. В същото време FLAC е значително подобрен. Референтният енкодер работи с произволни LPC коефициенти (линейно предсказващо кодиране) на принципа на грубата оценка на няколко алтернативи (напр. дължина на историята), след което избира най-добрата и я изчислява докрай.
Сравнение на производителността на losless кодеците върху висококачествен материал:

При високи честоти на дискретизация аудиоинформацията включва много странни неща, включително празнини. Референтният FLAC не винаги се справя добре с това. Почти всички други кодеци използват същите кодове на Голомб, но се опитват да оптимизират тяхната реализация.
Сравнение производителността на кодеците без загуби при многоканално аудио:

Можете да конвертирате всички формати един в друг с помощта на програмата ffmpeg. Само че наскоро тя беше пренаписана на wasm, така че е удобно да се конвертира директно в браузъра: локално на вашия компютър или на сървър. Ето един пример за такъв сървър:

Проектът е с отворен код, което означава, че е лесен за хостване.
Бързият кодек HALAC
Един от новите Lossless кодеци е HALAC (High Availability Lossless Audio Compression) от автора на кодека за изображения с подобно име HALIC (High Availability Lossless Image Compression).
HALAC има приблизително същите качества като своя „събрат“ за изображенията: той се фокусира основно върху високата скорост на кодиране, като същевременно поддържа прилично ниво на компресия. Той е приоритизиран по този начин, тъй като при компресирането без загуби степента на компресия обикновено е ограничена. Не можете да свиете един файл десетки пъти, както при MP3, така че оптимизирането по отношение на размера не е най-благодатната задача. Но оптимизацията по отношение на скоростта е нещо различно. То дава възможност процесът да се ускори няколко пъти в сравнение със стандартните кодеци WavPack и FLAC.
Таблиците по-долу сравняват резултата от кодирането на оригинални аудиофайлове с различни кодеци без компресия: ALAC, WavPack с различни модели на кодиране (Fast и Normal), FLAC с различни модели на кодиране (Fast (0) и Default (5)) – и HALAC версия 0.1.9, която е най-първата версия от декември 2023 г.
Особено внимание заслужават долните два реда във всяка таблица: времето за кодиране и времето за декодиране.



За година и половина бяха пуснати десетина актуализации и коефициентът на компресия се подобри с около 2%.

Разработена е отделна експериментална версия на HALAC+ с увеличен коефициент на компресия на FLAC -8, като скоростта на кодиране е около четири пъти по-висока. Този кодек прилага алгоритъм за адаптивно рисово кодиране и проста корекция на грешките.
Кодеците като HALAC привличат вниманието не толкова заради практическата си полезност, колкото заради академичния си интерес: как да се подобри ефективността на компресиране и за сметка на какви алгоритми/методи (повече за това по-долу).
Теоретично HALAC може да се използва и като оригинален начин за замаскиране/криптиране на аудиофайловете в неизвестен формат. За „неизвестен“ не е преувеличено: за една година от официалното обявяване във форума на HydrogenAudio енкодерът и декодерът са изтеглени съответно 490 и 463 пъти, а последната версия – 198 и 169 пъти.
Както можете да се види от сравнителните тестове, времето за кодиране и декодиране на HALAC е няколко пъти по-малко от всички други формати за компресия без загуби. Същественото е, че той използва ентропийните кодери Asymmetric Numeral Systems (ANS) и Finite State Entropy (FSE).
Новият метод за ентропийно кодиране – ANS
Ентропийното кодиране е метод за компресиране на данните без загуби (lossless compression) чрез осредняване на вероятностите за поява на елементите в кодираната последователност.
Според теоремата на Шанън за криптиране на източника съществува граница на компресията без загуби, която зависи от ентропията на източника. Колкото по-предсказуеми са получените данни, толкова по-добре могат да бъдат компресирани. Една случайна независима последователност с равна вероятност не може да бъде компресирана без загуби.
Двата най-популярни метода за ентропийно кодиране са кодът на Хъфман и аритметичното кодиране, те се използват в почти всички кодеци, архиватори и др. Основата идея е показана по-долу:

ANS е нов метод за ентропийно кодиране, създаден през 2006 г. от полския учен и програмист Ярек Дуда от Ягелонския университет. ANS дава приблизително толкова добро приближение до оптималното ентропийно кодиране, колкото и аритметичното кодиране по отношение на степента на компресия, но е по-бърз.
Той е също толкова бърз, колкото алгоритмите за декомпресия на Хъфман, не е защитен с патенти и е безплатен за използване. Целта е била именно да се създаде безплатна алтернатива на п;атентованото аритметичното кодиране.
Благодарение на свободния си лиценз и високата си ефективност, от около 2014 г. ANS намери своето място в проекти на софтуер с отворен код, включително:
- Компресиращата Facebook Zstandard (използвана и в Linux ядрото),
- браузъра Google Chrome (от версия 123, пусната през март 2024 г.),
- операционната система Android (от Android 4.14 през януари 2024 г.), публикуван като RFC 8478 за MIME и HTTP,
- компресора LZFSE на Apple,
- библиотеката за 3D компресия Google Draco (използвана от Pixar и други),
- алгоритъма за компресиране на изображения PIK;
- библиотеката за високоскоростно компресиране Nvidia nvCOMP,
- алгоритъма за компресиране на Dropbox DivANS,
- алгоритъма за компресиране на изображенията JPEG XL.
ANS се оказа ефективна алтернатива на аритметичната компресия. Използва се в някои съвременни операционни системи и браузъри, както и във форматите за компресиране на изображения. В същото време досега не е използвана във формати за компресиране на аудио.
В повечето от тях се използват кодовете на Голомб, добре познато семейство ентропийни кодове. Но при тестовете кодовете на Голомб извършват кодиране с около 30-40% по-бавно поради изчисляването на адаптивния параметър $m$, което дава само незначителна печалба в степента на компресия (1-2 %).
HALAC вероятно е първият аудиоформат, който използва ANS за кодиране без загуби. Резултатите от бенчмарковете показват, че той категорично превъзхожда ALAC, WavPack и FLAC, въпреки че разработчикът дори не е сигурен, че е приложил ANS по най-ефективния начин… Кодекът HALAC не използва никакви оптимизации за GPU и SIMD, а настоящата версия е еднонишкова. В бъдеще той планира първо да добави паралелизъм.
HALAC е 3-5 пъти по-бърз от обикновения FLAC. Може да се предположи, че и другите кодеци без загуби от бъдещите поколения ще прилагат методите за компресия на ANS, което значително ще увеличи производителността.
Източник: Kaldata
Leave a Reply