§ 14 Кодирование звука и видео
Оцифровка звука
Звук — это колебания среды (воздуха, воды), которые воспринимает человеческое ухо. С помощью микрофона звук преобразуется в непрерывный (аналоговый) электрический сигнал, который в любой момент времени может принимать любое значение в некотором интервале.

Как вы знаете, современные компьютеры обрабатывают только дискретные сигналы (двоичные коды). Поэтому для работы со звуком необходима звуковая карта — специальное устройство, которое полученный с микрофона аналоговый сигнал превращает в двоичный код. Это называется оцифровкой звукового сигнала.
Оцифровка — это преобразование аналогового сигнала в цифровой код.
Ситуация напоминает ту, с которой мы столкнулись при кодировании рисунка — любая линия состоит из бесконечного числа точек, поэтому, чтобы её закодировать, нужна бесконечная память. Здесь тоже придётся использовать дискретизацию — представить аналоговый сигнал в виде набора чисел, т. е. записать в память только значения сигнала в отдельных точках, взятых с некоторым шагом Т по времени.

Число Т называется интервалом дискретизации, а обратная ему величина 1/Т — частотой дискретизации. Частота дискретизации обозначается буквой f и измеряется в герцах (Гц) и килогерцах (кГц). Это число показывает, сколько раз в секунду выполняются измерения.
Чем больше частота дискретизации, тем точнее мы записываем сигнал, тем меньше информации теряем и тем лучше будет качество звучания. Однако при этом возрастает количество данных и увеличивается объём файла, в котором хранится закодированный звук.
Как же выбрать оптимальную частоту при кодировании? Учёные установили, что частоту дискретизации нужно брать в два раза больше, чем максимальная частота колебаний сигнала, который мы хотим записывать.
Известно, что человек в среднем слышит только звуки (колебания воздуха или другой среды) с частотами от 16 Гц до 20 кГц, поэтому все частоты выше 20 кГц можно «потерять» практически без ухудшения качества звука (человек не почувствует разницу!). Поэтому достаточно использовать частоту дискретизации около 40 кГц, повышать её дальше нет смысла. Более низкие частоты дискретизации применяют тогда, когда важно всячески уменьшать объём звуковых данных (например, для трансляции радиопередач через Интернет), даже ценой ухудшения качества.
С помощью оцифровки можно закодировать любой звук, который принимает микрофон. Это единственный способ кодирования человеческого голоса и различных природных звуков (шума прибоя, шелеста листвы и т. п.).
Однако у этого метода есть и недостатки:
- при оцифровке звука всегда есть потеря информации (из-за дискретизации);
- звуковые файлы, полученные с помощью оцифровки, имеют, как правило, большой размер.
Глубина (разрядность) кодирования
Кроме того, что при кодировании звука выполняется дискретизация с потерей информации, нужно учитывать, что для хранения одного результата измерения в памяти отводится ограниченное место. При этом вносятся дополнительные ошибки.
Представим себе, например, что на одно измерение выделяется 3 бита. При этом код каждого сохранённого значения — это целое число от 0 до 7. Весь диапазон возможных значений сигнала делится на 8 полос, каждой из которых присваивается свой код. Все значения, попавшие в одну полосу, имеют одинаковый код.

Преобразование измеренного значения сигнала в целое число называется дискретизацией по уровню, или квантованием. Эту операцию выполняет АЦП — специальный блок звуковой карты.
Глубина кодирования (или разрядность кодирования) звука — это число бит, используемое для хранения одного отсчёта.
Вывод звука
Устройства вывода звука — наушники и звуковые колонки — это аналоговые (не цифровые) устройства, поэтому при проигрывании звука звуковая карта должна как-то восстановить аналоговый сигнал. Вспомним, что у нас есть только значения, измеренные с интервалом Т. В простейшем случае по ним можно восстановить ступенчатый сигнал, который будет существенно отличаться от исходного (до кодирования). В современных звуковых картах для повышения качества звука этот ступенчатый сигнал сглаживается с помощью специальных фильтров, однако восстановить точно исходный сигнал всё равно не удаётся, так как информация о значениях сигнала между моментами квантования была потеряна при оцифровке.

Для повышения качества звука, т. е. для большего соответствия между сигналом, принятым микрофоном, и сигналом, выведенным из компьютера на колонки, нужно увеличивать частоту дискретизации, однако при этом, как вы уже знаете, увеличивается и объём файла.
Объём звуковых данных
Объём данных, полученный после оцифровки звука, зависит от разрядности кодирования и частоты дискретизации. Например, пусть частота оцифровки равна 44 кГц (за 1 с выполняется 44000 измерений сигнала), и используется 16-разрядное кодирование (каждое из измеренных значений занимает 16 бит = 2 байта). Тогда за 1 секунду накапливается 44 000 • 2 = 88 000 байт информации, а за 1 минуту:
88 000 • 60 = 5 280 000 байт * 5 Мбайт.
Если записывается стереозвук (левый и правый каналы), это число нужно удвоить.
Форматы файлов
Среди форматов оцифрованных звуковых файлов наиболее известны:
- WAV (англ. Waveform Audio File Format, файлы с расширением wav) — стандартный формат звуковых файлов в операционной системе Windows; сжатие данных возможно, но используется редко;
- MP3 (файлы с расширением mp3) — самый популярный формат звуковых файлов, использующий сжатие с потерями: для значительного уменьшения объёма файла снижается качество кодирования для тех частот, которые практически неразличимы для человеческого слуха;
- Ogg Vorbis (файлы с расширением ogg) — свободный (не требующий коммерческих лицензий) формат сжатия звука с потерями.
Все эти форматы являются потоковыми, т. е. можно начинать прослушивание до того момента, как весь файл будет получен (например, из Интернета).
Инструментальное кодирование звука
Существует ещё один способ кодирования звука, который можно применить только для записи инструментальных мелодий. Он основан на стандарте MIDI (англ. Musical Instrument Digital Interface — цифровой интерфейс музыкальных инструментов). В отличие от оцифрованного звука в таком формате хранятся последовательность нот, коды инструментов, громкость, тембр, время затухания каждой ноты и т. д.
Фактически такая запись звука — это программа для звуковой карты, в памяти которой хранятся образцы звуков реальных инструментов (волновые таблицы, англ, wave tables).
Современные звуковые карты поддерживают многоканальный звук, т. е. в звуковом файле может храниться несколько дорожек, которые проигрываются одновременно.
Существуют специальные MIDI-клавиатуры, которые позволяют вводить звук и сразу сохранять его в стандарте MIDI.

Для проигрывания MIDI-файла используют синтезаторы — электронные устройства, имитирующие звук реальных инструментов. Простейший синтезатор — звуковая карта компьютера.
Главные достоинства инструментального кодирования:
- кодирование мелодии (нотной записи) происходит без потери информации;
- файлы имеют значительно меньший объём в сравнении с оцифрованным звуком той же длительности.
Однако произвольный звук (например, человеческий голос) в таком формате закодировать невозможно.
Кодирование видеоинформации
Для того чтобы сохранить видео в памяти компьютера, необходимо закодировать звук и изменяющееся изображение. При этом нужно обеспечить их синхронность (одновременность), т. е. звук не должен ни «отставать» от изображения, ни опережать его.
Для кодирования звука чаще всего используют оцифровку с частотой 48 кГц.
Изображение состоит из отдельных растровых рисунков, которые меняются с частотой не менее 25 кадров в секунду, так что глаз человека воспринимает смену кадров как непрерывное движение. Это значит, что для каждой секунды видео нужно хранить в памяти 25 изображений.
Подсчитаем, сколько памяти потребуется для хранения видео. Если размер картинки 768 х 576 точек (стандарты PAL/SECAM) и глубина цвета 24 бита на пиксель, то закодированная 1 секунда видео (без звука) будет занимать примерно 32 Мбайт, а 1 минута — около 1,85 Гбайт. Это недопустимо много, поэтому в большинстве форматов видеоизображений используется сжатие. Упаковку и распаковку видеоданных выполняют специальные программы — кодеки.
Основная идея сжатия видео заключается в том, что за короткое время изображение изменяется очень мало, поэтому можно запомнить «базовый» кадр, а затем сохранять только изменения. Через 10-15 секунд изображение изменяется настолько, что необходим новый базовый кадр. Для того чтобы ещё больше уменьшить объём файла, применяют сжатие с потерями, при котором теряются некоторые детали, несущественные для восприятия человеком.
Наиболее известны следующие видеоформаты:
- AVI (англ. Audio Video Interleave — чередующиеся звук и видео, файлы с расширением avi) — формат, разработанный компанией Microsoft для системы Windows; может использовать разные алгоритмы сжатия;
- WMV (англ. Windows Media Video, файлы с расширением wmv) — формат, разработанный компанией Microsoft; может использовать разные алгоритмы сжатия;
- MPEG (файлы с расширениями mpg, mpeg) — формат, использующий один из лучших алгоритмов сжатия, который разработала экспертная группа по вопросам движущегося изображения (англ. MPEG — Motion Picture Experts Group);
- MP4 (файлы с расширением mp4) — формат, позволяющий хранить несколько потоков видео, а также субтитры (текстовые надписи на экране);
- WebM — открытый (не требующий оплаты лицензии) видеоформат, который поддерживается в современных браузерах без установки дополнительных модулей.