Простыми словами о сжатии видео
Вы, наверно, не раз замечали, как в каком-либо видео в YouTube или другом видеохостинге в определённый момент сильно ухудшается качество, а потом через несколько секунд всё встаёт на свои места. Особенно это замечают люди, которые привыкли смотреть всё в высоком качестве. Во всём виноваты алгоритмы сжатии видеоданных.
Для примера я возьму видео, которое показывает играющего человека (имя и фамилия человека, а также название игры я не буду называть, чтобы мой пост не показался рекламой, кто знает, тот молодец).
Как подсказывает Википедия, одна секунда видео с разрешением кадра 720x576 и частотой 25 кадров в секунду без звука и применения сжатия будет весить 14,8 мегабайта. Уж больно много для одной секунды. Полуторачасовой фильм вообще будет весить 78 гигабайт. 78, Карл! В момент зарождения цифрового видео это были немыслимые цифры, не говоря уже о передаче через интернет. Если бы в этот момент прекратили применять сжатие, то торрент, как явление, полностью бы исчезло.
Поэтому надо было как-то решать проблему... и его решили. Эффективное спасение пришло от организации Moving Picture Experts Group, который разработал формат сжатия видеоданных MPEG-1. Суть сжатия предельно проста: на один статический кадр вставляются места изменения.
Для примера возьмём видео, где автомобиль едет от точки А до точки Б. В таком случае кадр будет делиться на две части - на задний план, в котором ничего не двигается (или мелкие движения просто игнорируются) и на область движения (тот самый автомобиль). Соседние кадры сравниваются и находятся различия. Эти различия и накладываются на предыдущий кадр. А потом снова всё также, пока процесс сжатия не пройдёт над всеми кадрами. Поэтому фактически вместо множества полных кадров получаются обрезанные, накладываемые друг на друга. Это очень существенно уменьшает вес видео.
Далее появляется MPEG-2, в котором начинает применяться слегка другой алгоритм сжатия под названием "Компенсация движения". Там он уже не просто сравнивает соседние кадры, но ещё находит векторы движения отдельных частей. Ну а дальше как в MPEG-1, совпадающие части кадров удаляются.
Самый первый кадр видео ни с чем не сравнивается, поэтому ему уготована вечная судьба в виде простого ухудшения (размытие, увеличение мозаичных дефектов, шакалы). Но бывает иногда и такое, что различий между кадрами настолько много или вообще нет никакой схожести между ними, что компенсация просто не эффективна или вообще не срабатывает. Тогда очень отличившемуся кадру приходится пройти через ухудшение.
Такое можно наблюдать на скриншотах ниже, когда в игре после проигрыша появляются помехи. Из-за этих помех (очень сильны различия между кадрами) и срабатывает не компенсация, а ухудшение. Просто приглядитесь к человеку в левом верхнем углу и вы всё увидите. Видео воспроизводились в самом высоком качестве.
Двоичная система для чайников. Часть 2.
Здравствуйте, товарищи!
Для лучшего понимания сути данного поста желательно сначала прочитать
первую часть.
Я решил сделать серию постов по информатике для чайников. Это второй пост.
Ставьте лайки, если хотите еще немного лампового ликбеза ;)
---------------------------------------------------------
Перевод из десятичной системы в двоичную
Как я говорил ранее, любое десятичное число можно разбить на сумму вида
а*10^0 + b*10^1 + c*10^2 + d*10^3 +...
где a, b, c, d - это числа от 0 до 9.
Точно так же, любое двоичное число можно записать как сумму вида
а*2^0 + b*2^1 + c*2^2 + d*2^3 +...
где a, b, c, d - это 0 или 1.
Таким образом, перевод числа из одной системы в другую состоит в подборе этих самых коэффициентов a, b, с, d и т.д.
Давайте переведём число 185 в двоичную систему.
Очевидно (надеюсь), что нет смысла рассматривать степени двойки большие нашего числа (185) нет смысла. В данном случае нет смысла рассматривать числа от 2^8 (=256) и более.
Соответственно, нам надо найти максимальную степень двойки, которая меньше или равна числу, с которым мы работаем. В данном случае это 2^7 (=128).
Получаем:
185 = 1 * 2^7 + x
где x - это остаток, который нам еще предстоит разобрать.
Находим x:
x = 185 - 2^7 = 185 - 128 = 57
Теперь имеем:
185 = 1 * 2^7 + 57
Дальше нам надо применить тот же алгоритм к полученному хвосту:
57 = 1 * 2^5 + x1 = 1 * 2^5 + 25
И дальше:
25 = 1 * 2^4 + x2 = 1 * 2^4 + 9
9 = 1 * 2^3 + x3 = 1 * 2^3 + 1
1 = 1 * 2^0
Теперь соберём все "хвосты" вместе:
185 = 1 * 2^7 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^0
Давайте оценим, сколько цифр будет в нашем двоичном числе.
Максимальная степень двойки получилась 7.
Соответственно, всего получим 7+1 цифр (т.к. считаем степени с нулевой), наглядно:
76543210
И вот последний шаг. В каждой позиции двоичного числа мы должны поставить либо 1, если соответствующая степень двойки присутствует в наших "хвостах", либо 0, если отсутствует:
76543210 - это номер позиции (соответствует степени двойки)
10111001 - а это наш ответ (185 в двоичной системе)
Проверим результат обратным преобразованием:
10111001 => 1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0
уберём все нулевые слагаемые и получим
10111001 => 1 * 2^7 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^0
Теперь посчитаем всё это дело и получим:
10111001 => 185
Вот как-то так.
Интересный факт.
Все мы знаем, что, чтобы умножить число на десять, достаточно просто приписать к нему справа нолик.
234*10 = 2340
А чтобы поделить на десять (если нас не интерисует дробная часть, конечно), достаточно убрать последнюю цифру:
234/10 = 23 (и 4 в остатке).
Точно так же можно делать и в двоичной системе, только умножать и делить не на десять, а на два:
1101 * 10 = 11010 (напоминаю: это запись в двоичной системе)
1101 / 10 = 110
Этот приём иногда применяют в программах для ускорения вычислений.
Небольшое теоретическое обоснование
У некоторых может всплыть такой вопрос: почему при разложении числа на степени двойки не может оказаться, что какой-то степени будет больше, чем одна?
Объясняю. Допустим, у нас есть число в котором 2^7 помещается два раза, т.е. это получается 2*2^7, а это уже равно 2^8.
Всё :)
Вот такие задания по информатике у нас в школе...
Особенно интересно третье
Двоичная система для чайников
Здравствуйте, ребята!
Я решил сделать серию постов по информатике для чайников.
Если первый пост пойдёт хорошо, то будет еще несколько в том же духе.
---------------------------------------------------------
Введение
Чтобы провести хирургическую операцию, анатомию знать не обязательно, но вот результаты будут непредсказуемы. Точно так же, чтобы программировать, не обязательно знать, как компьютер устроен изнутри, но иногда такое незнание может привести к душераздирающим последствиям.
Основа основ современного компьютера – ДВОИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ (2-СС). Звучит угрожающе!.. Чтобы понять, что такое ДСС, и научиться с ней работать, надо уметь складывать, умножать и возводить числа в степень. Ок, даю шпаргалку.
Сложение чисел
Пусть у нас есть какое-то число. Допустим, 5. И мы хотим прибавить к нему другое число. Допустим, 3. Как нам это сделать? Давайте, представим число 5 как пять палочек:
|||||
А число 3 как три палочки:
|||
Чтобы сложить их, сначала нарисуем пять палочек, потом допишем к ним еще три:
||||||||
Теперь пересчитаем – получилось 8.
Зря смеётесь! Когда считаем палочками – в Википедии это называется (ВНИМАНИЕ! НЕНОРМОТИВНАЯ ЛЕКСИКА!) «Единичная непозиционная система счисления с единичным весовым коэффициентом». Ну, или попросту будем называть УНАРНАЯ СИСТЕМА СЧИСЛЕНИЯ (1-СС).
В обычной жизни мы (люди) пользуемся ДЕСЯТЕРИЧНОЙ СИСТЕМОЙ СЧИСЛЕНИЯ (10-СС). Она так называется, потому что у нас есть десять цифр. К тому же, она еще и ПОЗИЦИОННАЯ, что означает, что значение (вес) цифры зависит от её положения в записи числа, например, в числах 2, 21 и 211 цифра 2 означает, соответственно, единицы, десятки и сотни.
Десятичная система счисления
Как мы складываем в 10-СС? Например, столбиком:
12
+ 99
Сначала складываем единицы: 2+9 = 11, т.е. при сложении двух единичных чиселок появился новый десяток. Ясное дело, что из них может появиться только один десяток, потому что самое большое, что можно сложить – это 9+9 = 18. Таким образом, разбиваем сложение на кусочки: вместо 12+99 мы делаем 2+9 + 10+90, т.е. единицы и десятки (а потом и сотни) складываем отдельно друг от друга:
12 + 99 = [разобьем на разряды]
= (2+9) + (10+90) = [сложим первые разряды]
= 11 + (10+90) = [снова разобьем на десятки и единицы]
= (1 + 10) + (10 + 90) = [снова перегруппируем, чтобы отделить десятки от единиц]
= 1 + (10 + 10 + 90) = [сложим десятки]
= 1 + (110) = [разобьем на сотни и десятки]
= 1 + 10 + 100
Ясно, что получится 111, но давайте остановимся и посмотрим на эту полученную форму записи:
1 + 10 + 100
Фишка в том, что любое число можно представить как сумму отдельно единиц, отдельно десятков, сотен и т.д., например:
564 = 500 + 60 + 4, 7031 = 7000 + 000 + 30 + 1
Особенность такой записи в том, что мы видим во всех разрядах одну значащую цифру (первую), все следующие за ней цифры – это нули. Запомните этот момент – это важно.
При этом вместо того, чтобы писать 1000, мы можем написать 10^3 (т.е. десять в третьей степени, что можно расшифровать как 10*10*10).
В частности:
7000 = 7*1000 = 7 * 10^3
А всё число 7031 можно расписать так:
7031 = 7*10^3 + 0*10^2 + 3*10^1 + 1*10^0
Напомню, что любое число в нулевой степени даёт единицу, и 10^0 = 1, а любое число в первой степени даёт само себя 10^1 = 10. Еще напомню, что любое число умноженное на 0 даёт 0, т.е. 0*10^2 = 0.
Так вот, наша система счисления называется десятичной именно благодаря этой десятке, которую в степень возводим.
Краткое отступление. Дорогие мои! Не путайте числа и цифры! Путать цифры и числа – это как путать буквы и звуки. Цифра – это просто символ для записи чисел. А число – это абстрактная величина, обычно означающее количество чего-нибудь. Думаю, все поняли. :)
Двоичная система счисления
Теперь, поговорим о 2-СС. Её особенность в том, что в ней есть всего 2 символа для записи чисел: 0 и 1. Что интересно, при этом любое число, которое можно записать в 10-СС, так же можно записать и в 2-СС, и даже в 1-СС!
Двоичная система тоже позиционная и отличается от десятичной тем, что в ней вместо 10 в степень возводится двойка, например, число двоичное число 101101 можно прочитать так:
101101= 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 32 + 0 + 8 + 4 + 0 + 1 = 45 (это уже в десятичной системе)
Начнём с простого: 0+0 = 0, 1+0 = 1, 0+1 = 1
Ничего удивительного, в 10-СС это точно так же выглядит.
Теперь посложнее: 1 + 1 = 10
Ой! Почему десять???
А вот никакие не ДЕСЯТЬ! Это число ДВА. Просто в двоичной записи.
Дальше: 10 + 1 = 11
Нет!!! Это не десять плюс один! Это два плюс один! В 10-СС это выглядит так: 2 + 1 = 3, а в 1-СС так: || + | = |||. Ясно –понятно?
Усложняем программу: 11 + 1 = ?
Хм… сложновато? Давайте упростим! По той же схеме, что и 12 + 99. Не забываем, что всё это в двоичной системе!
11 + 1 = [разобьем на разряды]
= (10 + 1) + 1 = [перегруппируем]
= 10 + (1 + 1) = [О! “1+1” складывать умеем!]
= 10 + 10 = [ну, здесь просто сначала игнорируем нули, складываем 1+1 и потом приписываем 0 к результату]
= 100
Ну, сколько можно??? Это не СТО!!! Если то же самое записать в 10-СС, то получим: 3 + 1 = 4. Т.е. это 100 в записи 2-СС – это ЧЕТЫРЕ.
Ну, и для закрепления материала сложим в 2-СС:
1101 + 1001
= (1000 + 100 + 00 + 1) + (1000 + 000 + 00 + 1)
= (1000 + 1000) + (100 + 000) + (00 + 00) + (1 + 1)
= (10000) + (100) + (00) + (10)
= (10000) + (100) + (00 + 10)
= (10000) + (100) + (10)
= (10000) + 110
= 10110
А по-русски: 13 + 9 = 22
Информатика.Помогите с решением
Упростить логические выражения:
-(А А) & B$
-A & ( A B) & (B B).