
Вы почти готовы к захвату видео. Вы должны принять еще одно решение: какой кодек использовать. Кодек? Это сокращение оставшееся от слов КОдер/ДЕКодер. Он сжимает данные при захвате и разжимает их при просмотре или редактировании. Кодек это программа похожая на драйвер, которая проводит компрессию-декомпрессию данных. (Давайте проясним некоторые веши: существуют кодеки, которые не производят сжатие, но их тоже называют кодеками, простоты ради.) Некоторые кодеки предназначены для специальных плат, некоторые - для всех. Специальные кодеки должны работать параллельно с видеоплатой, как, н
Сжатие с потерями и безСуществуют убыточные и неубыточные методы сжатия. Неубыточное сжатие позволяет вам сжимать и разжимать данные без каких-либо потерь информации. Например, если цену сорок девять долларов девяносто девять центов выразить, как 49,99 $, то в таком представлении данные будут занимать меньше места. И вы не потеряете их при преобразовании из одного формата в другой. Убыточное сжатие означает не точный возврат к исходным данным при декомпрессии. Выразите сорок девять долларов девяносто девять центов, как 50 $ и получите очень хорошее сжатие, но при декомпрессии в пятьдесят долларов вы получите не совсем точный результат. Для большей части компьютерных данных нельзя использовать сжатие с потерями; вы определенно не захотите, чтобы ваш документ с финансовыми данными стал "почти точным". Но данные изображений можно сжимать без потери их информационной сущности. Например, на моем жестком диске находится изображение леса. Его размер около 740 М. В Windows формате BMP изображение не сжато, поэтому оно занимает 740 М. Простейший вид сжатия просмотр длины; вы анализируете изображение на наличие повторяющихся байтов и сохраняете только один образен. Например если горизонтальная линия содержит 500 синих пикселей, то вы не сохраняете их как "синий, синий, синий ..."; вместо этого информация будет сохранена в виде "повторяется "синий пиксель" 500 раз". Сохраненный в формате просмотра длины файл уменьшился в размере до 249 М. Формат просмотра длины неубыточен. Основные алгоритмы сжатия с потерями называют JPEG сжатие (из-за названия группы изобретателей этих алгоритмов, Joint Photographic Experts Group). Файл, сохранный в формате JPEG, будет занимать 95 М. Поместите рядом два изображения, и вы не увидите разницы....
Кроме просмотра длины и JPEG сжатия существует еще много алгоритмов. Один из них кодирование переменной длинны; кодек сканирует изображение на наличие повторяющихся образов байтов. Например, если шаблон "г, г, b, b, г, г, b, b, г, g, g, g, g, g, г" появится в изображении несколько раз, то кодек построит словарь, в котором будет этот и другие шаблоны. Каждому шаблону будет дан короткий идентификатор, который затем используется в сохраненном файле. Упрощенно работу кодека можно представить так: при кодировании изображения здания Объединенных Наций кодек сохраняет изображение флагштока, называя его "изображение 01". Вместо того, чтобы сохранять все флагштоки стоящие перед зданием Объединенных Наций, кодек пропускает все пиксели, изображающие флагшток, сохраняя вместо его изображения инструкцию "вставить здесь изображение 01" везде, где появляется флагшток. Существует также другой неубыточный метод сжатия, называемый кодирование Хафмана. Если вы используете сжатие программами PKZIP или LHARC, то вы используете кодирование Хафмана....
Еще один неубыточный алгоритм дельта-кодирование. При дельта-кодировании видеофайлы хранятся как группы, составленные из целых или ключевых кадров и серий «скелетных кадров», в которых записываются только отличия от предыдущего кадра. При скорости 15 кадров в секунду экран в основном не меняется от кадра к кадру. Если на видео записан говорящий и сидящий человек "говорящая голова", этой фразой Дэвид Берн (David Byrne) назвал свою музыкальную группу то фон останется неизменным в течение всего видео. Фон может занимать три четверти всего изображения, это означает, что дельта кадрам не нужно будет хранить три четверти информации экрана. Идея дельта-кодирования применима не только от кадра к кадру, но и внутри кадра. Кодек может, например, закодировать горизонтальную линию и затем заметить, что следующая горизонтальная линия почти идентична, и не будет сохранять всю линию, он сохранит только изменения, или, говоря терминологией математики и инженерии, дельту для этой линии....
Идея ключевых кадров, похожих на дельта-кадры, используется во многих кодеках, как в убыточных, так и неубыточных. Кодеки не могут сильно сжать данные без потерь; лучшее сжатие достигается при использовании убыточных методов. Большинство убыточных алгоритмов полагается на тот факт, что люди более чувствительны к серому изображению (Y -сигнал), чем к цветному (С, U и V в зависимости от того, о кодировании какого изображения идет речь).Intel Smart Video Recorder требует записи 24-битных данных, но не записывает их, а использует метод анализа площадей размером четыре на четыре пикселя. Так как 16 24-битных пикселей занимают 48 байтов. Плата захвата фирмы Intel считает, что в каждом 3-байтном пикселе, первый байт описывает Y-сигнал, а остальные байты описывают U и V сигналы, т. е. цветность. Кодек Intel платы не трогает Y-байт, но подробно рассматривает U и V байты, сжимая их в один бит; Как? Четыре на четыре пикселя это очень маленькая площадь. В результате, вы не видите незначительные изменения цвета от пикселя к пикселю. По этой причине Intel использует вид сжатия, называемый суб-квантованием. При тиком сжатии вычисляется среднее значение U и V байтов для группы пикселей размером четыре на четыре. Среднее значение 16 U байтов занимает 1 байт, и среднее значение 16 V байтов занимает тоже 1 байт. Поэтому 1 U байт и 1 V байт или 16 бит описывают площадь размером четыре на четыре. Из 16 пикселей группы на каждый приходится 1 бит, поэтому каждый пиксель содержит 8 бит нетронутого Y-сигнала и 1 бит общей U/V информации. Этот процесс проиллюстрирован на img....
Другие платы делают похожие вещи; например, Video Spigot имеет возможность использования YUV 4:2:2 сжатия, в котором также применяются группы четыре на четыре, но сохраняется больше бит об информации цвета (2 бита на U и 2 бита на V) и меньше о серой шкале изображения (4 бита на Y).Кодек Intel Indeo идет еще дальше, получая среднее значение не только для U и V информации, но и для Y информации. Если от него требуют лучшего сжатия, то он вычисляет среднее значение для группы пикселей размером 4x8 или 8x8. Indeo кодек также удаляет 1 бит 8-битной Y-информации, поэтому то, что было YUV9 информацией, становится YUV8 информацией.Векторное квантование еще один алгоритм сжатия с потерями, похожий на алгоритмы неубыточного дельта-кодирования. При дельта-кодировании вы сохраняете дельта-кадры, которые содержат отличия от ключевых кадров, и дельты внутри кадров. Но если вы просмотрите дельта-шаблоны, то вы увидите, что у них есть некоторые общие части. Возьмем, к примеру, изображение заката. Кодек кодирует каждую линию изображения как пиксели. Но если вы просмотрите каждую горизонтальную линию изображения, вы увидите, что ее цвет изменяется от полуночно синего к синему, затем к красному, а потом к оранжевому. Это небольшое изменение, когда небо темнеет; отношение изменений темноты неба почти постоянно, если смотреть сверху вниз. Градиент может быть выражен как таблица дельт, и кодек Intel Indeo содержит несколько таких встроенных таблиц. Indeo кодек пытается найти соответствие между одной из этих таблиц и изображением, с которым он работает, и преобразовывает изображение в дельта таблицы....
Сжатие должно проходить очень быстро. Я хочу, чтобы вы поняли из всего этого, что хорошее сжатие включает в себя хороший анализ и сильно использует процессорное время. У платы видеозахвата нет лошадиных сил, чтобы выполнить действительно хорошее сжатие в реальном времени. Сейчас видеоплаты в основном поставляются с программой видеоредактором, которая подвергнет ваше видео автономной компрессии; сжатие минутного видео может занять час или два. Я говорю о минутной автономной компрессии, подразумевая, что автономные компрессоры могут делать действительно хорошее уплотнение ваших видеоданных, минимально повреждая их; этого не могут сделать компрессоры реального времени. Это звучит так, будто я не советую вам делать какое бы то ни было сжатие во время захвата, но это, вероятно, не реальный совет....
Вспомните вычисление 320x240x15? Вероятно, через несколько лет в будущем мы увидим, что на компьютерном рынке появятся жесткие диски, которые смогут поглощать 3,5 М данных за одну секунду такой скорости диска хватит, чтобы избежать удаления данных - а память останется такой же дорогой для больших захватов еще пять или более лет.Ограничения скорости передачи данных в современных компьютерах означают, что, вероятно, вам придется использовать некоторые виды сжатия в реальном времени; но мой вам совет - поиграть с некоторыми кодеками, поддерживаемыми вашей системой, чтобы найти тот, который при сжатии наносит меньший ущерб данным, чем все остальные. Как вы и ожидали, кодеки, которые сильно уменьшают частоту передачи данных, так же сильно изменяют и исходное изображение. Для начала используйте не сжимающий кодек, если у вас есть такая возможность; такие платы, как Video Blaster и Video Spigot, позволяют сделать это, а платы Intel не позволяют - параллельно с их работой будет работать относительно мягкий, но убыточный YUV9 кодек или более суровый Intel кодек. Записывайте переданные данные и тогда вы будете уверены в том, что вы делаете запись при одинаковых условиях - и посмотрите, как много данных вы сможете записать с помощью каждого кодека, перед тем, как кадры начнут удаляться. Затем найдите минимально сжимающий кодек, с которым вы только сможете работать, и начинайте работу. (Я сказал, "с которым вы только сможете работать", так как медленные кодеки позволяют делать только короткие по времени захваты, из чего следует, что вам придется проводить больше времени за редактированием и соединением захватов.)...