Коротко о видео
Подумалось мне, что вполне возможно я тоже могу писать годные посты, а после этого мемасика, я подумал а чем я хуже всех остальных авторов?
Это так сказать фабула, и для текущего поста я выбрал тему, которая нас постоянно окружает, и с которой я в последнее время очень много работал. Сегодня давайте поговорим о такой, вроде бы простой штуке, как видео. Да, просто видео.
Для начала, думаю что ни для кого не секрет, что видео это последовательность картинок. Берем флипбук, быстро его пролистаем и получим видео. Если в случае флипбуков все просто - это, можно сказать, видео без оптимизаций, костылей, блэкджека и всего остального. Если бы в реальном видео использовалась точно такая же технология, то не сложно посчитать сколько весил был современный фильм в качестве 1080p
Для примера возьмем что одна картинка в разрешении 1080p весит 200kb. Получается что при 30 кадрах в секунду и полуторачасовом фильме (90 минут) мы получаем следующее
200 (кб) * 30 (fps) * 90 (мин) * 60 (сек) = 32.4 Гигабайта.
А это уже сравнимо с парочкой, а то и тройкой фильмов в 4к.
Можно было бы призвать на помощь архивацию данных, но, к сожалению, изображения и видео сжимаются меньше всего. Кстати, все ведь помнят такую штуку как кодеки? Так вот, кодеки это по сути те же самые архиваторы. Разница между разными кодеками точно такая же как разница между zip и rar. Каждые просто запаковывают по своему, и соревнуются в скорости и итоговом размере архива.
Так как же еще пытаются уменьшить объем видео? В основном это делают, реализуя алгоритмы на основе 2х видов кадров (их, правда, побольше, но сейчас поговорим только об основных)
1. Опорные кадры - I кадры
2. Промежуточные кадры - P кадры
I кадр - это та самая полноценная картинка, которая занимает так много ценных килобайт, а P кадры - это просто небольшие картинки, которые хранят в себе отличие от I кадра.
Ничего не понятно? Покажу на примере гифки, так как с видео мне сейчас лень работать
I кадр P кадр P кадр P кадр P кадр P кадр
Ну а на выходе мы получаем следующее

И в данном случае, вместо того, чтобы потратить 10 кб * 6 кадров = 60 кб, мы потратили только 10 (кб 1 кадр) + (1 (кб) * 5 (кадров)) = 15 килобайт.
Согласитесь, выгода ощутимая.
И в итоге чем больше у нас GOP (расстояние между 2мя I кадрами) тем меньше весит видео. Но как и у любой медали здесь тоже есть обратная сторона. Я думаю, что все наблюдали подобную картинку при просмотре чего бы то ни было хотя бы раз в жизни
Ну и происходит это от того, что i кадры слишком редкие, и при декодировании видео, происходят мелкие ошибки, которые и приводят к тому, что P кадры накладываются не на тот I кадр.
И кстати, возможно вы замечали, что подобные артефакты пропадают при полной смене кадра. Например, при начале съемки с другого ракурса, или другой локации. Все потому, что при подобных финтах, P кадр не может наложиться на старый i кадр. Точнее он может, но он уже не будет выглядеть обрезком как на картинке, которую я показал. Он будет уже точно тем, чем являются опорные кадры (i кадры).
Вот, собственно, именно так и работает вся эта херня, которую мы с вами наблюдаем целыми днями.
Дальше попробую развить эту тему, и в следующем посте (если меня ссаными тряпками не погонят) обсудим, нахрен нам нужны 100+ FPS, если из каждого утюга трубят про пресловутые 24 кадра