feat: расписал MPEG и M-JPEG
This commit is contained in:
@ -14,6 +14,7 @@ source:
|
|||||||
### Форматы для хранения графических данных
|
### Форматы для хранения графических данных
|
||||||
### Краткая характеристика наиболее распространенных растровых форматов
|
### Краткая характеристика наиболее распространенных растровых форматов
|
||||||
|
|
||||||
|
## Всякие там алгоритмы сжатия
|
||||||
### Алгоритмы сжатия без потерь
|
### Алгоритмы сжатия без потерь
|
||||||
|
|
||||||
Неплохое видео: https://www.youtube.com/watch?v=CJFUN6BrkGE
|
Неплохое видео: https://www.youtube.com/watch?v=CJFUN6BrkGE
|
||||||
@ -147,5 +148,45 @@ JPEG - формат хранения изображения с потерями.
|
|||||||
5. После того, как мы писали этот ужас мы сжимаем его страшной помесью Хаффмана и RLE. Описывать я это дело пожалуй не буду, просто скажу, что таблицы для алгоритма Хаффмана построены заранее.
|
5. После того, как мы писали этот ужас мы сжимаем его страшной помесью Хаффмана и RLE. Описывать я это дело пожалуй не буду, просто скажу, что таблицы для алгоритма Хаффмана построены заранее.
|
||||||
|
|
||||||
В целом этот алгоритм позволяет сжимать изображения в десятки раз. (вплоть до 50-кратного уменьшения размера)
|
В целом этот алгоритм позволяет сжимать изображения в десятки раз. (вплоть до 50-кратного уменьшения размера)
|
||||||
|
|
||||||
|
Повторим еще раз идейно наши шаги:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD;
|
||||||
|
convert(Перекодировать цвета, чтобы появился явный параметр яркости)-->resize(Выкинуть часть информации о цвете, которую глаз не заметит);
|
||||||
|
resize-->split(разбить изображения по каналам, а содержимое каналов поделить на группы по 8х8 для цветов и по 16х16 для яркости);
|
||||||
|
split-->DCT(Выявить какие узоры из числа заранее известных 64-х в каких пропорциях присутствуют в группах);
|
||||||
|
DCT-->clean(выкинуть все несущественные узоры);
|
||||||
|
clean-->compress(Оставшиеся коэффициенты матрицы компактно упаковать);
|
||||||
|
compress-->Готово!;
|
||||||
|
```
|
||||||
|
|
||||||
|
### MPEG
|
||||||
|
|
||||||
|
*Сжимаем видео*
|
||||||
|
|
||||||
|
Фактически базируется на JPEG и разделяет с ним идеи. Помимо них добавляется еще одна:
|
||||||
|
|
||||||
|
- Между двумя отдельными кадрами видео изменения как правило малы
|
||||||
|
|
||||||
|
Краеугольным камнем всего формата являются кадры двух типов: I - кадры, сжатые полноценно и независимо, и P - кадры, которые построены с ссылкой на предыдущий)
|
||||||
|
|
||||||
|
В целом уже довольно сильное сжатие можно было бы достичь и этим, но мы пошли чуть дальше и ввели категорию B - кадры, которые ссылаются на следующий и предыдущий кадры. В реализациях классического MPEG алгоритма они вообще просто генерируются на основании двух ближайших кадров категорий I и P. Обычно являются неким "средним арифметическим" между этими двумя кадрами. на эту категорию ничего не ссылается
|
||||||
|
|
||||||
|
Примерное кодирование выглядит так: нeзависимо кодируется кадр видео целиком. Обычно кодируются каждый пол секунды видео. Затем если мы говорим про частоту кадров в 24 кадра/секунду, то на равных промежутках вставляется еще 3 кадра категории P. Они кодируются, как и было сказано, со ссылкой на предыдущий кадр. А дальше добивается это дело B-кадрами. Судя по описанию методички их по факту даже нет в исходном видеоряде. Они просто строятся на основе двух соседних кадров^[Чем-то напоминает dlss если вы понимаете о чем я]. Обычно кодирование ведется группами по N кадров. Такие группы могут декодироваться независимо от других групп. Обычно размеры группы естественным образом определяются расстоянием между кадрами типа I.
|
||||||
|
|
||||||
|
Говоря о самих изображениях, они состоят из макроблоков (размером 16х16 пикселей %%ничего не напоминает?)%%). Такие блоки имеют привычку смещаться и немного изменяться со временем. Вот их смещения обычно отслеживают и сжимают. Сжатие происходит очень сходно с JPEG
|
||||||
|
|
||||||
|
#### Основные пути повышения степени сжатия
|
||||||
|
|
||||||
|
- Улучшение сжатия I-кадров
|
||||||
|
- Улучшение подбора векторов смещения блоков (исходно - среднеквадратичное смещение%%Я тоже не в курсе, что за смещения векоторов. Такое чувство, что Молодяков тут не объясняет а напоминает%%)
|
||||||
|
- Если у вас еще остались тяжелые наркотики можете посравнивать коэффициентики в соседних блоках 8х8. Там адовы преобразования можно усреднить значения соседних блоков и добавить степени сжатия
|
||||||
|
- Если сжать кадры слишком сильно, то будут видны края блоков, но в целом можно алгоритмами убирать их на пост обработке и продолжать увеличивать сжатие
|
||||||
|
- Можно предварительно обработать видео, чтобы оно лучше подходило для сжатия (вырезать многие детали, которые все равно не заметны), вырезать разные шумы и "высокие частоты"^[Молодяков их так назвал. Что это в контексте изображения - ума не приложу]
|
||||||
|
|
||||||
|
### Motion-JPEG
|
||||||
|
|
||||||
|
Если видео короткое, или вам в целом все равно, что один видосик будет занимать у вас пол диска, то можно обойтись и Motion-JPEG (M-JPEG). Он заключается в основном в том, что все кадры будут независимо сжаты при помощи JPEG.
|
||||||
|
|
||||||
|
Это помогает при монтаже видео и в целом JPEG обладает аппаратным ускорением^[То есть в процессоры вмонтированы устройства подобные тем, что мы на схемаче собираем, которые гоняют только операции над JPEG и ничем другим не занимаются. За счет того, что такие сопроцессоры не программируются а один раз собраны, скорость обработки получается очень быстрой]
|
||||||
Reference in New Issue
Block a user