Компьютерная графика
Работа с видео
Статьи о железе


Технологический процесс - Оцифровка видео

Первое, что нам необходимо сделать — это получить копию видеозаписи в цифровом виде на жёстком диске компьютера. Операция записи видео сигнала в цифровом виде носит название «захват видео» (video capture). Аналоговый видео сигнал предварительно нужно привести к цифровому виду — оцифровать. Процесс захвата и оцифровки видео происходит одновременно, потому часто эти термины используются как синонимы.

Прежде, чем я продолжу рассказ о программах оцифровки видео, я упомяну о том, как реализуется захват видео в операционной системе Windows. Ещё в начале 1990–х годов операционная система Windows была оснащена подсистемой для работы с видео: Video for Windows (сокращённо VfW или V4W). VfW существует и в самых современных версиях Windows, успешно работает и используется по сей день целым рядом программ.

В конце 1990–х годов Microsoft разработала новую, более гибкую подсистему работы с видео, которая получила название DirectShow (с 7 –й версии она входит в состав DirectX). Подавляющее большинство новых программ использует именно эту подсистему (интерфейс) для работы с видео.

Для нас важным является то, что в драйверах карты оцифровки видео может быть реализован только захват посредством DirectShow — некоторые современные карты имеют именно такие драйверы. Это делает невозможным использование программ оцифровки, которые используют интерфейс V4W для захвата видео. Популярная серия карт оцифровки на базе чипа Conexant имеют полную поддержку оцифровки через DirectShow и ограниченную через V4W — размер кадра ограничен 384x288 пикселями. (Справедливости ради отмечу, что существует вариант драйверов для таких карт захвата, в которых реализована возможность захвата полного кадра через V4W: от Eduardo Jose Tagle.)

Следует понимать, что задача обеих подсистем не ограничивается только захватом видео. Каждая из подсистем создана для поддержки полного спектра задач по работе с видеозаписями: захват, запись, воспроизведение, копирование, редактирование. Используемый интерфейс нас будет интересовать в контексте именно захвата видео — есть ли поддержка со стороны драйвера карты захвата, в состоянии ли использовать этот интерфейс для захвата видео какая-либо программа? В то самое время, эта же программа может использовать другой интерфейс для других задач, например: запись видео в файл.

Проблемы при захвате видео


Поскольку оцифровка и захват видео происходят со скоростью воспроизведения исходной видеозаписи, важно чтобы компьютер успевал вовремя обрабатывать полученные данные и записывать их. Возможные причины, почему компьютер может не успевать: низкая скорость записи на жёсткий диск, невысокая мощность процессора при использовании программной компрессии (выбранный алгоритм сжатия не успевает сжать кадр за 40 мс), ресурсы компьютера «отвлекаются» для выполнения дополнительных задач при захвате (напр. переключение файла, в который происходит захват), системных задач (напр. работа с файлом подкачки) или каких-либо программ пользователя. Вам нужно предварительно перед захватом подготовить жёсткий диск к захвату видео (см. раздел «Подготовка жёсткого диска — дефрагментация»), проверить достаточна ли мощность процессора для сжатия видео в выбранный вами формат при выбранных настройках (проведите тестовый захват фрагмента видеозаписи в несколько минут). Во время захвата видео желательно воздержаться от работы с другими программами, которые активно используют необходимые при захвате ресурсы компьютера (процессор, дисковая подсистема).

Если компьютер не успевает обрабатывать поступающий поток кадров, то часть кадров пропускается. Оцифровка видео и звука производится разными устройствами, потому пропуск кадров видео вызовет потерю синхронизации со звуковым сопровождением. 25 пропущенных кадров приведут к отставанию видеоряда относительно звукового сопровождения на 1 секунду, потому не рекомендуется сохранять записи с более чем 5–10 пропущенными кадрами: лучше провести захват заново. При помощи правильно настроенной системы можно захватывать многочасовые видеозаписи без единого пропущенного кадра.

Формат контейнера AVI подразумевает постоянную частоту кадров по всей видеозаписи, то есть видеоряд и звуковое сопровождение синхронизируются единожды. Небольшое несовпадение реальной частоты кадров со средней частотой на сколько-нибудь больших отрезках времени приведёт к потере синхронизации: несовпадение уже в 200 мс легко заметно. Иногда возникает необходимость оцифровать запись, в которой частота кадров постоянно меняется, например старая видео кассета. В результате захвата такой записи в AVI?файл вы обязательно получите рассинхронизацию: звуковое сопровождение будет то отставать от видео, то уходить вперёд. Единственный возможный вариант захвата подобных записей: использовать при захвате формат контейнера MPEG?1/2: звук и видео синхронизируются много раз в течении записи, и за это короткое время не успевает накопиться заметная разница между видео и звуком.

Кодек HuffYUV


Этот кодер идеально соответствует требованиям, которые перечислены в разделе «Промежуточное сжатие видео». Он сжимает каждый кадр отдельно при помощи одного из самых эффективных методов сжатия данных без потерь: методом Хаффмана (его также использует архиватор RAR). Хоть это нетипично для сжатия видео, но этот кодер обеспечивает сжатие данных совершенно без потерь. Правда, эффективность такого сжатия не очень велика: типичные потоки данных для HuffYUV — 10–13 Мбайт/сек (35–45 Гбайт/час). Учтите, что если часть кадра постоянно занимает однородный фон, то потребуется меньший поток данных: это касается записей широкоэкранных кинофильмов (с чёрными полосами сверху и снизу изображения). Кодек достаточно требователен к ресурсам компьютера: для захвата видео с размером кадра 768x576 нужен процессор не меньше 700 МГц. Автор — Ben Rudiak-Gould, последняя авторская версия — 2.1.1.

Также в интернете доступна модифицированная версия от Klaus Post — 2.2.0. Мне не удалось заставить её работать: она создаёт файлы неправдоподобно малого размера (почти втрое меньше, чем версия 2.1.1), декодеры HuffYUV версий 2.1.1 и 2.2.0 зависают при попытке воспроизвести такой файл, декодер ffDShow показывает видеозапись, в которой большая часть кадра заполнена цветным мусором. (В конференции RU.MPEG сообщали о том, что эта версия кодера нормально работает при некоторых условиях: вы можете попробовать, будет ли она работать у вас.)

>Далее, страница-2

 


    Вопросы и предложения принимаются по адресу info@bercov.h1.ru