Короткая информация о различных мультимедиа форматах и кодеках
преимущественно используемых в для хранения музыки и фильмов.
*Без* учёта контейнеров и кодеков для real-time передачи,
хранении DVD/BluRay, профессиональной обработки и кинотеатров.
В конце и речь про сжатие изображений.

Когда речь заходит о кодеках и их сравнении, то стоит помнить, что
огромную роль играет и кодирующий софт: хорошо закодированный XviD может
быть ощутимо лучше по качеству чем AVC с YouTube.

*Заметка*: в экосистеме Apple поддержка свободных форматов
практически отсутствует. Там господствуют кодеки и форматы имеющие тьму
патентов и принципиально дружащие с DRM. Поэтому, если написано про
широкую поддержку: это вряд ли включает экосистему Apple.

В таблицах вопрос "стоит использовать?" нужно учитывать без оглядки на
свободность/открытость кодека, чисто технические стороны. Кого волнует
свободность (например меня), то стоит любой несвободный кодек сразу
считать не стоящим использования.

                       Аудио без потери качества
                       =========================

Имя     | Где встретить? | Свободный | Стоит использовать?
FLAC    | Всюду          | Да        | Да
WavPack | торренты       | Да        | Да
APE     | торренты       | Нет       | Нет
ALAC    | Apple          | Теперь да | Нет

=> FLAC
    Создан в 2001
    Открытый и свободный
    Широкая поддержка
    Сжимает на 30-50% рок и метал
    до 655 KHz, до 32 бит fixed-point
    Позволяет встраивать изображения, CUE, Vorbis Comment

=> WavPack
    Создан в 1998
    Открытый и свободный
    Особенность: может быть как lossy, так и lossless. Lossless
                 информацию можно добавить к lossy части
    Сжимает немного лучше FLAC
    Поддержка не так широка как у FLAC
    до 16.7 MHz, до 32 бит fixed-point/floating-point, 256 каналов
    Позволяет встраивать CUE, ID3

=> Monkey's Audio (APE)
    *Не свободный*
    Сжимает немного лучше чем FLAC/WavPack
    Декодирование требует примерно столько же затрат что и
    кодирование -- ресурсоёмок
    до 655 KHz, до 24 бит fixed-point

=> ALAC
    Создан в 2004
    Apple не может использовать кодеки без тьмы патентов и без поддержки
        DRM, поэтому изобрели свой аналог FLAC
    До 2011 был несвободным
    Технических преимуществ относительно FLAC не имеет
    до 384 KHz, до 8 каналов, до 32 бит fixed-point
    *Не имеет смысла*, так как есть FLAC/WavPack

                        Аудио с потерей качества
                        ========================

Имя    | Где встретить?        | Свободный | Стоит использовать?
MP2    | DVD, DVB, DAB         | Недавно   | Нет
MP3    | музыка                | Недавно   | Нет
AC3    | DVD, BluRay, торренты | Недавно   | Нет
EAC3   | BluRay                | ?         | Нет
DTS    | BluRay                | ?         | Нет
AAC    | везде                 | *Нет*     | Да
Vorbis | торренты, YouTube     | Да        | Уже нет
Opus   | торренты, YouTube     | Да        | Да

=> MPEG audio layer 2 (MP2)
    Стандарт создан в 1993
    Широко распространён: DVD, радио/теле-вещание используют его
    до 48 KHz, штатно до 2 каналов (может 5.1), 32-384 Kbps
    *Не имеет* смысла сейчас

=> MPEG audio layer 3 (MP3)
    Стандарт создан в 1993
    Широко распространён
    Немного лучше по качеству чем MP2
    Может встраивать ID3 метаинформацию
    до 48 KHz, штатно до 2 каналов (может 5.1), 32-320 Kbps
    *Не имеет* смысла сейчас

=> AC-3 (A/52) (Dolby Digital)
    Стандарт создан в 1991
    Патентован
    Приемлемое качество, имеет только на битрейтах >192Kbps
    Применяется в BluRay, DVD
    до 48 KHz, до 5.1 каналов, до 640 Kbps
    *Не имеет* смысла сейчас

=> EAC-3 (Dolby Digital Plus)
    Стандарт создан в 2008
    Расширение AC3
    до 48 KHz, до 15 каналов, до 6144 Kbps

=> DTS (DCA (DTS Coherent Acoustics))
    Создан в 1990-х
    В отличии от MP2/MP3/AC3/etc основан на ADPCM сжатии, что
        крайне легковесно, но сжимает в два (или более) раза хуже
    Применяется в BluRay, опционально DVD

=> AAC
    Создан в 1997
    *Патентован*
    Везде лучше по качеству чем MP3
    до 192 KHz, до 48 каналов, 8-529 Kbps

=> Vorbis
    Создан в 2000
    Открытый и свободный
    Везде лучше по качеству чем MP3
    По качеству схож, зачастую лучше, чем AAC
    до 192 KHz, до 255 каналов, 45-500 Kbps
    Широкая поддержка
    Может встраивать Vorbis Comment метаинформацию
    Лучший выбор, если нет возможности использовать Opus

=> Opus
    Создан в 2012
    Открытый и свободный
    Везде лучше по качеству всех остальных
        (субъективно 96 Kbps схож с 128 Kbps Vorbis)
    Является комбайном из CELT и SILK алгоритмов.
        SILK используется в Skype для передачи речи на низких битрейтах.
    Подходит идеально хорошо и для передачи речи с низкой задержкой и
        для музыки с фильмами
    до 48 KHz, до 255 каналов, 6-510 Kbps

                       Видео без потери качества
                       =========================

Обычное сжатие
    На ZFS ФС с LZ4 я могут половину места сэкономить храня сырое
    несжатое видео. Это стоит иметь в виду, особенно когда нужно иметь
    промежуточный формат.

=> YUV4MPEG2
    Не предоставляет сжатие, но часто используется как
    промежуточный формат передачи видео в YCbCr 4:2:0/4:2:2/4:4:4
    Имеет очень простые plaintext заголовки и легко парсится в C

=> HuffYUV
    Создан в 2000
    Открытый и свободный
    Быстро жмёт

ffvhuff
    Немного изменённый HuffYUV, дающий 20% лучше сжатие

=> FFV1
    Создан в 2003
    Жмёт лучше HuffYUV
    Довольно ресурсоёмок даже при декодировании
    Открытый и свободный
    Широко распространён -- де-факто для архивирования

                        Видео с потерей качества
                        ========================

Отмечу, что принципиально все нижеуказанные кодеки работают схожим
образом как и H.261 -- все принципы аналогичны: закодировать картинку
(I-кадр), разбить картинки на блоки, закодировать "движение" блоков,
ссылаясь на другие блоки/кадры. Разница между почти всеми кодеками
только в искусственных ограничениях (поддержка больших разрешений,
поддержка цветности отличной от YUV 4:2:0, и т.д.) и возможностях
задания информации о предсказаниях блоков и их взаимоотношений между
собой (на сколько кадров можно сослаться, сколько вариантов "движения"
есть у блока, как можно разбить картинку на блоки, какого они размера,
и т.д.). Но суть работы аналогична кодеку из 80-х годов. Разве что
добавлены гораздо лучшие алгоритмы сжатия энтропии (CABAC), алгоритмы
де-блокинга, lapped преобразование (VC-1, Daala).

Имя        | Где встретить?             | Свободный | Стоит использовать?
MPEG-1     | уже нигде                  | Недавно   | Нет
MPEG-2     | DVB, DVD                   | Ещё нет   | Нет
MPEG-4     | торренты                   | Нет       | Нет
MPEG-4 ASP | торренты                   | Нет       | Нет
Theora     | торренты                   | Да        | Нет
AVC        | везде                      | *Нет*     | Уже нет
VP8        | торренты, YouTube          | Да        | Уже нет
HEVC       | заменяет AVC, UHD BluRay   | *Нет*     | Да
VP9        | торренты, YouTube          | Да        | Да
AV1        | Netflix, стриминг, YouTube | Да        | Да
VVC        | ?                          | *Нет*     | ?

=> H.261
    Создан в 1988
    Практически все основы видеосжатия зародились в нём и
    современные кодеки принципиально не сильно отличаются
    Он тут для исторической справки
    Техособенности: 16x16 блоки, DCT 8x8, P-кадры

=> MPEG-1
    Создан в 1993
    Широчайшая поддержка
    Как правило кодируется разрешение не выше 352:288, 1.5Mbps
    *Не имеет* смысла использовать
    Техособенности (относительно H.261): полупиксельный вектор движения, B-кадры

=> MPEG-2 (H.262)
    Создан в 1995
    *Патентован*
    Широчайшая поддержка: используется в телевещании и DVD
    Хорошее качество только на высоких битрейтах
    Как правило, до 10 Mbps
    Любой MPEG-2 декодер может проигрывать MPEG-1
    Не требователен к процессору, но вряд ли имеет смысл использовать сейчас
    Техособенности (относительно MPEG-1): 16x8 блоки, чересстрочное видео

=> H.263
    Создан в 1996
    Ориентирован на низкие битрейты
    Широчайшая поддержка: использовался в видеоконференциях,
    online-видео (Sorenson/Flash), видеокамерах сотовых телефонов (3GP)
    Не требователен к процессору, но вряд ли имеет смысл
    использовать сейчас

=> MPEG-4 part 2 (DivX)
    Создан в 1998
    *Патентован*
    DivX это одна из проприетарных программ, но некорректно часто
    использующаяся как синоним
    В разы более требователен к процессору
    Значительно лучше сжимает чем MPEG-2 на низких битрейтах:
    в неплохом качестве можно уместить три фильма на одном DVD
    Неплохое качество даже на низких битрейтах меньше 1Mbps
    До сих пор огромное количество фильмов кодируют в него
    Базовый профиль (DivX старый) почти идентичен H.263
    Техособенности (относительно MPEG-2): 8x8 блоки, де-блокинг, до 4-х
    векторов движения в макроблоке, global motion compensation

MPEG-4 part 2 ASP (XviD)
    ASP это один из профилей MPEG-4 part 2 добавляющий множество технологий
    Заметно лучше качество чем у MPEG-4 part 2
    XviD это свободная программа реализующая ASP
    Техособенности (относительно MPEG-4):
        четвертьпиксельные вектора движения, B-кадры, чересстрочное видео

=> Theora
    Создан в 2004
    Открытый и свободный
    Схож по ресурсам и качеству с MPEG-4 part 2
    Техособенности:
        8x8 DCT, нет B-кадров, чересстрочной развёртки, только 8-бит на компонент

=> MPEG-4 part 10 (AVC) (H.264)
    Создан в 2003
    *Патентован*
    На данный момент это основной из распространённых кодеков для
    качественного видео
    В разы требовательнее к процессору даже при декодировании:
    FullHD требует под 80% моего Intel Core i5 ядра.
    Кодирование одного фильма занимает много часов
    3.5 Mbps MPEG-2 поток с аналогичным качеством занимает 1.5 Mbps в AVC
    Есть lossless режим
    Техособенности (относительно MPEG-4 ASP):
        полностью целочисленный
        16x16->4x4 блоки (варьируемый размер)
        ссылка на два опорных кадров
        CABAC/CAVLC сжатие энтропии
        до 32-х векторов движения в макроблоке
        широкая поддержка цветности (4:4:4, 14-бит на компонент, и т.д.)
        8x8->4x4 DCT
        8 направлений движения

=> VP8
    Создан в 2008
    Открытый и свободный
    Можно считать свободным аналогом AVC (не для всех задач)
    Поддерживает только прогрессивную развёртку, 4:2:0, 8-бит на
    компонент
    Его алгоритм кодирования кадра используется как основа lossy WebP
    Техособенности:
        четвертьпиксельные вектора движения
        ссылка до трёх опорных кадров
        де-блокинг
        16x16/8x8/4x4 блоки

=> MPEG-H part 2 (HEVC) (H.265)
    Создан в 2013
    *Патентован*
    На 25-50% эффективнее AVC
    На низких битрейтах особенно заметно лучшее качество
    Во много раз требовательнее к процессору чем AVC. FullHD без
    активных сцен у меня не часто может быть проигран в real-time.
    Кодирование фильма занимает дни
    Есть lossless режим
    Техособенности (относительно MPEG-4 AVC):
        64x64->4x4 блоки
        33 направления движения
        только CABAC

=> VP9
    Создан в 2013
    Открытый и свободный
    Можно считать свободным аналогом HEVC
    В отличии от VP8, есть lossless режим
    Отличное решение на сегодняшний день, если есть мощности
    Техособенности (относительно VP8): 64x64->4x4 блоки, 32x32/16x16 DCT

=> AV1
    Создан в 2018
    Открытый и свободный
    За основу был взят VP9 (->VP10),
        Daala (CfL, CDEF, кодирование энтропии) и Thor (CfL, CDEF)
    На 30% эффективнее HEVC/VP9
    Ощутимо требовательнее к процессору чем HEVC/VP9
    Техособенности (относительно VP9):
        предсказание цветности по яркости (Chroma-from-Luma)
        улучшенный де-блокинг (Constrained Directional Enhancement Filter)
        не бинарное интервальное кодирование энтропии
        более разнообразное T-образное партиционирование
        128x128->4x4 суперблоки
        внутренняя работа идёт в 10/12-бит
        ссылка до семи опорных кадров
        56 направлений движения
        global motion
        работа с зернистостью (film grain)
        SVC (scalable video coding) и S-кадры

                               Контейнеры
                               ==========

Имя            | Где встретить?    | Свободный | Стоит использовать?
AVI            | торренты          | Да        | Нет
MPEG PS        | DVD               | Недавно   | Нет
MPEG TS        | DVB, BluRay       | Недавно   | Нет
Ogg            | торренты          | Да        | Нет
MP4            | везде             | ?         | Нет
Matroska, WebM | торренты, YouTube | Да        | Да

=> AVI
    Создан в 1992
    Широко поддерживается
    Множество ограничений, препятствующих использованию множества
    кодеков: AC3/MP3-VBR, Vorbis/Opus, AAC. Нет возможности сохранить aspect ratio
    Не поддерживает streaming
    В принципе, для простых задач, если кодеки позволяют, подходит
    и сегодня. Но Matroska будет иметь меньший overhead

=> MPEG PS
    Создан в 1993
    Широко поддерживается: DVD и HD-DVD хранят именно в нём
    Не имеет сейчас смысла для хранения

=> MPEG TS
    Создан в 1995
    Несёт MPEG PS потоки
    Имеет обнаружение и коррекцию ошибок, синхронизацию, маленькие
    пакеты: поэтому у него существенный overhead
    Широко поддерживается: DVB, ATSC, BluRay
    BluRay имеет не стандартный MPEG TS, а с 32-бит timecode-ом
    Не имеет смысла для хранения

=> Ogg
    Разработка начата ещё в 1993
    Открытый и свободный
    Идеально заточен для потоковой передачи. Лучший в этой задаче,
    в том числе с маленьким overhead-ом и возможностью потери пакетов
    Требует mapping между кадрами кодеков и страницами Ogg,
    поэтому на данный момент кодеков для Ogg не много: Speex, Vorbis,
    Opus, FLAC, Theora, Daala, Dirac
    Это контейнер по умолчанию штатно используемый для Vorbis,
    Opus, Theora
    Не имеет индекса для поиска: используется метод проб и ошибок

=> MPEG-4 part 14 (MP4)
    Создан в 2001
    *Патентован*
    Идентичен QuickTime формату
    Поддерживает только несвободные кодеки
    Менее широко поддерживается чем Matroska

=> Matroska
    Создан в 2002
    Открытый и свободный
    Грубо говоря, можно использовать любой кодек
    Может нести самую различную метаинформацию, прикреплять любые
    файлы, изображения
    Поддерживает потоковую передачу
    Имеет малый overhead
    Поддерживает деление на части (chapters), трэки, может
    объединять и нести несколько мультимедиа потоков
    Лучший формат (Ogg будет иметь больший overhead)

=> WebM
    Создан в 2010
    Открытый и свободный
    Это просто подмножество Matroska (любой кто умеет Matroska,
    умеет и WebM), ограничивающее выбор видеокодека до VP8/VP9/AV1, а
    аудиокодека до Vorbis/Opus
    Если кодирование идёт в эти свободные кодеки, то имеет смысл
    создавать WebM контейнер, вместо полноценной более сложной Matroska

                              Изображения
                              ===========

Имя      | Где встретить? | Свободный | Lossy | Lossless | Interlace | Стоит использовать?
GIF      | Вымирает       | Уже да    | Нет   | Да       | Да        | Нет
JPEG     | Везде          | Уже да    | Да    | Нет      | Да        | Вряд ли
PNG      | Везде          | Да        | Нет   | Да       | Да        | Вряд ли
WebP     | Интернет       | Да        | Да    | Нет      | Нет       | Вряд ли
VP8L     | Интернет       | Да        | Нет   | Да       | Нет       | Вряд ли
HEIC     | Apple          | Нет       | Да    | Не стоит | Нет       | Нет
AVIF     | Интернет       | Нет       | Да    | Не стоит | Нет       | Нет
JPEG2000 | Вне Интернета  | Уже да    | Да    | Да       | Да        | Если нет JPEG XL
JPEG XL  | ?              | Да        | Да    | Да       | Да        | Да

=> GIF
    Создан в 1987
    Стал свободным от патентов в 2004
    Использует 256-цветов палитру, 1-бит альфа-канал
    Чересстрочная развёртка

=> JPEG
    Создан в 1992
    Стал свободным от патентов ~2010
    64k x 64k пикселей, 4:4:4/4:2:2/4:2:0, 8-бит на канал
    Не поддерживает альфа-канал

=> PNG
    Создан в 1996
    Свободный
    2G x 2G пикселей, до 16-бит на канал, WCG
    Прогрессивная развёртка

=> WebP (VP8)
    Создан в 2010
    Свободный
    16k x 16k пикселей, только 4:2:0, до 8-бит на канал
    Является просто VP8-кадром
    Нет прогрессивной развёртки
    Быстрый декодер

WebP lossless (VP8L)
    Всё аналогично WebP, только 4:4:4 RGBA 8-бит lossless

=> HEIC
    Создан в 2015
    Патентован
    8k x 4k пикселей -- иначе между tile-ами будут артефакты,
        не держит lossy 4:4:4, до 12-бит на канал, WCG, HDR
    Нет прогрессивной развёртки

=> AVIF
    Создан в 2019
    Использует патентованный HEIF контейнер
    8k x 4k пикселей -- иначе между tile-ами будут артефакты,
        до 12-бит на канал, WCG, HDR
    Нет прогрессивной развёртки
    *Очень* медленный

=> JPEG2000
    Создан в 2000
    Стал свободным от патентов в 2019
    4G x 4G пикселей, до 38-бит на канал, 16k каналов, WCG
    Природа wavelet-а автоматически даёт progressive декодирование
    Lossless сжатие фотографий лучше чем у PNG
    Нет артефактов связанных с DCT природой

=> JPEG XL
    Создан в 2021
    Свободный от отчислений
    Размер стандарта/документации почти на порядок меньше по
        размеру чем у AVIF например -- существенно проще
    1G x 1G пикселей, до 32-бит на канал, 8k каналов, WCG, HDR
    Progressive декодирование
    На 60% лучше JPEG
    На 35-40% лучше PNG (но VP8L ещё лучше для screenshot-ов)
    До 10% лучше lossless JPEG2000 для фотографий
    С качеством q>40 лучше AVIF
    *Очень* быстрый и при декодировании и кодировании,
        распараллеливается
    Может без потерь транскодировать JPEG, а также восстановить
        его с точностью до бита обратно, экономя 20% размера