Мультимедиа: звук и видео в памяти
Считаем по формулам, сколько байт занимают песня и ролик: дискретизация, глубина кодирования, вес кадра и работа кодека — с прикидкой на глаз.
Телефон показывает, что свободно четыре гигабайта памяти. Тебе хочется сохранить клип на полторы минуты, несколько песен и голосовые сообщения за месяц — и половина из этого не влезает. Странно: страница текста весит пару килобайт, а минута видео тянет на сотни мегабайт. Откуда такая разница? Мультимедиа — это звук и видео, а их превращают в числа куда менее экономно, чем текст: каждая секунда песни — это тысячи замеров громкости, каждая секунда ролика — два с половиной десятка фотографий подряд. В этом уроке посчитаем по формулам, сколько байт занимает запись и ролик, разберёмся, где файл «разбухает», и научимся прикидывать объём до калькулятора — на контрольных этим умением пользуются постоянно. Заодно поймём, почему одна и та же песня в разных форматах весит в разы по-разному.
Звук: волна превращается в замеры
Звук — это волна: давление воздуха плавно растёт и падает. Хранить бесконечно гладкую кривую невозможно, поэтому программа делает дискретизацию: измеряет громкость через равные промежутки времени. Число замеров за секунду — частота дискретизации, измеряется она в герцах. Человек различает звуки примерно до 20 000 Гц, поэтому для музыки замеры делают чаще сорока тысяч раз в секунду: на Audio CD — 44 100 Гц, в видеозаписи — 48 000 Гц. Голосу хватает куда меньшего: телефонная связь оцифровывает речь на 8 000 Гц, и собеседник звучит узнаваемо. Каждое измерение округляется до ближайшего уровня, а число уровней задаёт глубина кодирования: 8 бит дают 256 уровней громкости, 16 бит — уже 65 536. Третий множитель — каналы: моно записывает одну дорожку, стерео — левую и правую отдельно, то есть двойной набор замеров. Все четыре величины — частота, глубина, время и каналы — входят в формулу объёма.
Секунда записи с частотой f, глубиной b и в k каналах занимает f · b · k бит, а запись длиной t секунд — в t раз больше. Формула честная: удвоишь частоту — файл станет вдвое больше; включишь стерео вместо моно — снова вдвое. Посчитаем голосовое сообщение: 8 000 Гц, 16 бит на замер, 30 секунд, один канал. Перемножаем: 8 000 · 16 · 30 · 1 = 3 840 000 бит. Делим на восемь — получаем 480 000 байт, это около 469 Кбайт: полмегабайта на полминуты речи. А теперь секунда музыки на CD: 44 100 замеров, 16 бит, два канала — 1 411 200 бит, то есть 176 400 байт. Минута такой записи уносит больше десяти миллионов байт. Настройки различаются в разы — и вес файлов вместе с ними.
Результат формулы выходит в битах, а размеры файлов мы привыкли видеть в байтах, Кбайт и МБ. Цепочка переводов простая: биты делишь на восемь — байты; байты делишь на 1024 — Кбайт; ещё раз на 1024 — мегабайты. Секунда CD-записи 176 400 байт — это около 172 Кбайт, а минута — 10 584 000 байт, то есть примерно 10 МБ. Для сравнения: страница учебника весит около двух Кбайт, значит одна минута CD-музыки «тяжелее» пяти тысяч страниц текста. Прикидка на глаз полезнее точного расчёта: голосовая связь за секунду занимает около 8 Кбайт, песня в сжатом формате — единицы мегабайт, минута несжатой студийной дорожки — десятки мегабайт. Если твой ответ уехал от такой прикидки в сотню раз, где-то потерялось деление на восемь или лишний ноль в частоте. Точность записи наращивают одинаково: чаще замеры — точнее по времени, больше уровней — точнее по громкости, и каждое улучшение стоит байтов.
| Материал | Настройки записи | Вес одной секунды |
|---|---|---|
| голосовая связь | 8000 Гц, 8 бит, моно | около 8 Кбайт |
| голосовое сообщение | 8000 Гц, 16 бит, моно | около 16 Кбайт |
| музыка на Audio CD | 44100 Гц, 16 бит, стерео | около 172 Кбайт |
| студийная дорожка | 48000 Гц, 24 бита, стерео | около 281 Кбайт |
- Дискретизация#
- превращение непрерывной волны в серию замеров громкости
- Частота дискретизации#
- число замеров за секунду, в герцах
- Глубина кодирования#
- бит памяти на один замер, задаёт число уровней громкости
- Канал#
- отдельная дорожка записи: моно — одна, стерео — две
- Кадр#
- одна неподвижная картинка в цепочке кадров видео
- Кодек#
- программа сжатия: убирает избыточные данные из звука и видео
Видео: поток кадров со звуком
С видеофайлом работают два слагаемых. Первое — кадры: ролик показывают как быструю смену неподвижных изображений, обычно 25 или 30 кадров в секунду. Каждый кадр — тот же растр из пикселей, что и фотография: ширина умножить на высоту даёт число точек, у каждой свой цвет. При глубине 24 бита на пиксель одна точка весит ровно три байта. Кадр размером 1280 на 720 пикселей занимает 1280 · 720 · 3 = 2 764 800 байт — почти два с половиной мегабайта за одну картинку. Второе слагаемое — звуковая дорожка: её объём считается по уже знакомой формуле звука и просто прибавляется к видео. Итого ролик весит примерно как все его кадры плюс звук — если его не сжали. Чем выше разрешение и чаще кадры, тем больше каждый множитель.
Соберём всё вместе. Одна секунда видео 1280 на 720 при 25 кадрах в секунду — это 25 кадров по 2 764 800 байт, то есть 69 120 000 байт, около 66 МБ. Минута такого несжатого ролика заняла бы почти четыре гигабайта — на многие флешки не поместилась бы. Реальные файлы в сотни раз меньше, потому что кадры пропускают через кодек — программу сжатия. Она замечает, что соседние кадры почти не отличаются: фон неподвижен, двигается только человек, — и записывает не весь кадр, а только изменения. Звук сжимается отдельно теми же приёмами, что и MP3: выкидывается то, что ухо почти не различает. Сжатие всегда берёт плату качеством: меньше данных на секунду — более «мыльная» картинка. Но запас у видео огромный: глаз не замечает детали, которые выбрасывает кодек, поэтому ролики из интернета выглядят прилично и весят в сотни раз меньше несжатой записи.
- Считаем вес одного кадра: 1280 на 720 пикселей, по 3 байта на пиксель.
- Умножаем на 25 кадров в секунду — получаем байты за одну секунду ролика.
- Делим на миллион — около 69 МБ в секунду; умножаем на 60 секунд.
- Минута несжатого видео — примерно 4 ГБ. Кодек сжимает её в сотни раз.
Одна секунда несжатого видео 1280 на 720 пикселей при 25 кадрах в секунду и 24 битах на пиксель. Сколько МБ это занимает? Считай 1 МБ = миллион байт.
Практикум на вечер: открой свойства любого видеофайла в телефоне и раздели его вес на длительность — получишь настоящую скорость записи данных в мегабайтах за секунду. Потом посчитай по формуле, сколько весила бы секунда этого видео без сжатия, и сравни: разница покажет, во сколько раз поработал кодек. Те же две формулы — звуковая и «кадровая» — закрывают половину задач на объём в контрольных 7 класса и на ОГЭ. Если в задаче просят найти частоту или глубину, а известен объём, формула читается в обратную сторону: делай объём, дели на остальные множители. Так из «файл весит столько-то» достаётся любой параметр записи. Дальше по программе — арифметика позиционных систем счисления: там нули и единицы, из которых состоят все эти байты, начнут складываться и вычитаться по правилам столбика.
Нажми на элемент, затем на категорию. Нажми на разложенный элемент — вернётся в пул.
Проверь себя
Клавиши 1–9 выбирают вариант, Enter — «Проверить»
1 Сколько байт займёт 5 секунд монозаписи с частотой 8000 Гц и глубиной 16 бит?
2 Что произойдёт с объёмом файла, если частоту дискретизации удвоить, а глубину кодирования вдвое уменьшить?
3 Видео с 30 кадрами в секунду при прочих равных весит больше, чем то же видео с 15 кадрами в секунду.
4 Соедини понятие и его смысл.
Нажми на элемент слева, затем на его пару справа. Повторное нажатие отменяет связь.
5 Допиши расчёт секунды звука.
Выбери подходящее слово в каждом пропуске.
Секунда монозвука при 16000 Гц и глубине 16 бит: 16000 · · 1 = бит.
6 Что увеличивает объём несжатого видео?
7 Запись длится 3 секунды при частоте 8000 Гц и глубине 8 бит, моно. Каков объём файла в байтах?
Было понятно? Скажи — так мы видим, какие темы переписать.
Частые вопросы
Как посчитать объём звукового файла по формуле?
Перемножь частоту дискретизации, глубину кодирования, длительность в секундах и число каналов: I = f·b·t·k. Получишь биты, поэтому в конце раздели на 8, чтобы перейти к байтам.
Почему видео в телефоне весит меньше, чем получается по формуле?
Потому что файл сжат кодеком: он записывает не каждый кадр целиком, а только изменения между соседними. Реальные ролики легче несжатой записи в сотни раз.
Сколько весит один кадр видео?
Умножь ширину кадра на высоту и на байты одного пикселя. Кадр 1280 на 720 при 24 битах на точку весит 2 764 800 байт — почти два с половиной мегабайта.
Что такое глубина кодирования простыми словами?
Сколько бит памяти выделяется на один замер громкости. Чем она больше, тем больше уровней громкости различается и тем точнее звучит запись.