Захват видео с помощью Virtual Dub. Решение проблем карт захвата на базе Connexant BT8x8

Достаточно часто, посещая сайты видеостудий, оцифровывающих видео с кассет VHS (и других аналоговых), наталкиваешься на пункт, упоминающий, что студия (или вольный оцифровщик) использует профессиональную карту захвата. Конечно, чтобы быть до конца честным с клиентом, следует еще указывать модель видеомагнитофона, длину и параметры проводов. Это может являться оправданием высокой стоимости услуги, хотя это явление и не такое распространенное. Обычно таким образом пытаются как-то подчеркнуть свое преимущество перед теми, кто использует дешевые карты захвата, например, от AverMedia. И вообще-то в этом случае не мешает интересоваться, какое преимущество дает профессиональное оборудование, кроме "аппаратного сжатия" и "качества исполнения". Зачастую, кроме оборудования, важны еще софт и знания и опыт его применения.

Дорогие карты, конечно же, стоят своей цены за счет аппаратных кодеров, технических характеристик и портов ввода. Однако это не значит, что их нельзя заменить более дешевыми. Аппаратные кодеры вообще бесполезны, когда видео нужно еще дополнительно обрабатывать (улучшать). Ну, а аппаратных ресурсов любой карты захвата на базе чипсета BT8x8 достаточно для оцифровки видео c подавляющего большинства VHS-кассет. Поэтому дорогая карта захвата в большинстве случаев не дает никакого преимущества по сравнению со своими дешевыми аналогами, разве что удобство в использовании своему обладателю. Следующий момент, который хотелось бы отметить. "Качественно, быстро и недорого", как часто любят заманивать, сделать нельзя. Сразу вспоминается фраза "Быстро, качественно, дорого — выбирайте любые два пункта". И в самом деле, при индивидуальном подходе к каждому видеофрагменту сделать работу быстро нельзя. Разве что готовый шаблон фильтров для обработки данного видео окажется подходящим. А чтобы подобрать и пересмотреть фильтры, требуется много времени, равно как и для составления готовых шаблонов. Обычно же "быстрая" обработка если и присутствует, то сводится к применению стандартных низкокачественных фильтров. В ином случае низкий уровень шума убирается (сглаживается) кодеком. Этого качества иногда хватает для бытового телевизора. Как видим, качественная работа достаточно сложна и трудоемка, поэтому не может быть дешевой.

Хотелось бы заметить, что захват с помощью карт на базе Connexant BT8x8 до сих пор представляется проблемным, несмотря на "древность" чипсета. Обладателям карт захвата на базе Philips 713x в этом плане гораздо проще, т.к. их карты полностью совместимы с драйвером захвата от Microsoft. Использовать Virtual Dub для оцифровки видео в MPEG-2 (DVD) целесообразно только с программой Canopus ProCoder. Эта программа отличается высоким качеством (и большим временем) кодирования. Большое заблуждение, что сохранение видео в формате DVD повысит визуальное качество видео. Наоборот, практически любое сжатие видео влияет на его качество одинаково — ухудшает. Нельзя получить из MPEG-4 фильма DVD, лучшее по качеству. То же самое касается и VHS. При одинаковом битрейте MPEG-4 обеспечивает лучшее качество изображения, чем MPEG-2. Итак, мы собрались оцифровать кассету. Прежде всего нужно знать, на каком мониторе или телевизоре это видео будет просматриваться: квадраты, мусор, заметные на мониторе, не видны на телевизорах (если это обычный недорогой телевизор). Более "капризны" в этом отношении ЖКИ-мониторы. "Железо" для оцифровки требуется не такое уж дорогое:

. Качественный видеомагнитофон и провода для подключения к Composite- или S-Video-входу карты захвата.
. Системный блок (лучше в хорошем, а главное — закрытом корпусе) типа Celeron/Duron 1200 MГц, RAM 128 Мб, большой HDD. Лучше, если
будет 2 жестких диска, т.к. работать нужно с большими объемами видео, и, если придется обрабатывать несжатое видео в несколько
этапов, то это существенно повлияет на скорость обработки. В иных случаях достаточно одного диска.
. Дешевая карта захвата или ТВ-тюнер на базе BT8x8 (именно с ними проблемы). Лучше, если это будет AverMedia.

Не стоит удивляться таким низким требованиям. Они почти минимальные и финальное видео будут сжимать очень долго. Можно использовать процессоры и с меньшей частотой вплоть до минимальной, указанной в спецификациях карт захвата и ТВ-тюнеров, но тогда резко возрастет нагрузка на дисковую подсистему. Чтобы ускорить обработку и сжатие, следует ставить более быстрый процессор. Если верить сайту сайт скорость сжатия зависит не только от частоты, но и от типа процессора. Так, самым лучшим выбором по соотношению цена/качество являются уже устаревшие процессоры AMD Athlon XP (и предположительно старшие модели процессоров Duron). Моя конфигурация, к примеру: Athlon 2500+ (3200+), RAM 512Mb, 2хHDD 200Gb, AverMedia 203.

Софт, который нам понадобится:
. Windows 2000. Из всех "окон", по моему мнению, для обработки видео больше подходят именно эти. Да и под минимальное требование RAM 128 Мб Windows XP плохо подходит. Разделы на жестком диске — не менее 60-70 Gb и файловая система NTFS.
. Улучшенные драйверы от iuLabs ( сайт ) Они являются, пожалуй, лучшими для Connexant BT8x8. На сайте есть инструкции по их установке. Работа с этими драйверами позволит избежать мелких глюков. Это не значит, что со стандартными драйверами от производителя карты Virtual Dub работать не будет.
. Virtual Dub 1.6.3 или выше. Или же его модификация Virtual Dub MPEG-2.
. Аудио- и видеокодеки по вашему усмотрению. Для наших экспериментов понадобится пока что один видеокодек — HuffYUV 2.2.1 — кодек без потерь качества (loseless). То есть своеобразный zip для видео. Другие кодеки мы рассмотрим позже.

При оцифровке видео обязательно отключите антивирусный монитор, также желательно отключить компьютер от локальной сети (если он в сети) и сопутствующие приложения, особенно файрволл и чат. В общем, ничего не должно быть лишнего, что может вызвать кратковременную высокую загрузку процессора или интенсивное использование жесткого диска. Если все это отключать вы не хотите, то лучше установите повышенный приоритет для Virtual Dub. Рассмотрим этапы оцифровки видео в формат MPEG-4 для последующего просмотра на компьютере (или MPEG-4-проигрывателе).
. Захват видео с помощью Virtual Dub со следующими параметрами: аудио несжатое, видео сжимается кодеком HuffYUV. Если позволяет процессор, то можно применить и фильтры, которые будут первыми в списке последующей обработки — например, Deinterlace (деинтерлейс), Denoise (шумоподавитель).
. Обработка и сжатие видео в Virtual Dub одним из кодеков, перечисленных выше (или другим понравившимся).
. Обработка и сжатие аудио. Всегда предпочтительнее, чтобы аудио обрабатывалось отдельным этапом, т.к. это снижает вероятность рассинхронизации потоков аудио и видео.

Задача первого этапа — сохранить видео с максимальным качеством. Для этого используется HuffYUV — кодек без потерь качества. Можно использовать и любой другой, который понравится. Однако стоит внимательно читать документацию и обращать внимание на системные требования. В режиме захвата рабочее окно Virtual Dub выглядит несколько иначе. Нас интересуют следующие пункты:
- В меню File пункт Set capture file. В диалоговом окне можно указать, что это имя файла используется по умолчанию.
. В меню Device из числа доступных нужно выбрать драйвер DirectShow (обычно это "Conexant Capture (Direct Show)"), как показано на рис. 1.


Рис. 1. Выбор устройства захвата

. В меню Options пункт Stop conditions (условия остановки). В открывшемся окне нужно указать, чтобы Virtual Dub останавливал захват, когда на диске останется меньше 10~50 Мб. Если место на диске будет исчерпано, Virtual Dub попытается "завершить" файл, однако при использовании кодека HuffYUV обычно на это не хватает места. Поэтому лучше указать лимит оставшегося свободного места на диске, как показано на рис. 2.


Рис. 2. Окно Stop Conditions

. В меню Options есть еще такие пункты, как Hide on capture (скрывать при захвате — экономит ресурсы при захвате) и Show big timer (показывать большой таймер). Отметить, если нужно.

Отдельно разберем пункты меню Video. Версия Virtual Dub 1.6.10 (и 1.6.11) все же имеет несколько "глюков". По умолчанию в меню Video отмечен пункт Overlay. В этом режиме воспроизведения расходуется меньше ресурсов компьютера, чем в режиме Preview. Однако окна воспроизведения может и не быть (или вы его случайно закрыли). Чтобы вернуть окно на место, следует выбрать заново частоту кадров. В строке статуса это вторая кнопка (первая — настройки аудио) (см. рис. 3). Изображение в окне будет "правильным", если вы выберете для Preview формат RGB24. В других случаях картинка может быть искажена или отсутствовать. Кроме того, в режиме Preview может неправильно работать переключатель ускорения DirectDraw (после многократного переключения Off может выключать видео или отображать видео на входе, то есть без применения фильтров).


Рис. 3. Кнопки на панели статуса

В меню Video в третьей группе находятся пункты управления как VfW-, так и DirectShow-устройствами. В зависимости от выбранного драйвера доступна только часть из них. К пунктам DirectShow-устройств относятся следующие:
. Video Source. Выбор источника видео. Обычно это Video Composite. Выберите тот источник, к которому подключен ваш видеомагнитофон. . Capture pin. Настройки устройства захвата. На рис. 4 показано окно настроек. В зависимости от видеостандарта будет частота кадров 29.97 или 25 (если установлены драйверы iuLabs). Размер на выходе — 720(704)х576 (целый кадр) или 352х288 (половина кадра). Любые
другие размеры не рекомендуются. Цветовое пространство и сжатие можно выбрать YUY2 (или YV12). В сравнении с форматом RGB24 этот
формат лучше сжимается кодеком HuffYUV за счет того, что для представления точки используется 16 бит, а не 24. Для сравнения: 1 час в формате YUY2 будет занимать 20-30 Гб, а в формате RGB в 1,5-2 раза больше. В составе кодека FFDShow для HuffYUV доступен также 12-
битный формат YV12.


Рис. 4. Настройки устройства захвата

. Preview pin. Настройки устройства предпросмотра. Эти параметры используются для режима просмотра Overlay. Как было сказано выше, лучше указать цветовое пространство RGB24.
. Capture filter. В состав фильтра захвата определены выбор стандарта (в нашем случае это PAL D/K или SECAM D/K) и настройки картинки (яркость, контрастность, оттенок, насыщенность). Правильность выбора стандарта определяется по цветности картинки. Иногда требуется перезапустить режим захвата (например, при переключении с NTSC на PAL).
. Crossbar. Переключатель. По действию аналогичен пункту меню выбора источника.
В четвертой группе находятся пункты, отвечающие за обработку входного потока видео перед сжатием. Они основаны на внутренних фильтрах Virtual Dub. Наиболее интересны следующие:
. Noise reduction (шумоподавление). По качеству это очень плохой фильтр. Его можно использовать, когда нету других фильтров (хотя бы Dynamic Noise Reduction от Steven Don).
. Deinterlace (деинтерлейс). Этот пункт отвечает за устранение эффекта расчески. Этот эффект связан с особенностью реализации стандарта PAL. Как известно, частота кадров, оговоренная этим стандартом — 25 кадров в секунду (25 Гц). А частота питания в промышленной сети — 50 Гц. Поэтому информация об изображении передается в виде полукадров с частотой 50 Гц. Такой способ передачи и воспроизведения получил название череcстрочной развертки. Существует и так называемая прогрессивная развертка, когда информация о кадре передается целиком с произвольной частотой (25 Гц в случае PAL). Этот способ используется в компьютерной технике. Таким образом, для составления целого кадра в режиме прогрессивной развертки используется два полукадра, причем следуют они друг за другом. Разница во времени появления между ними проявляется в так называемом эффекте расчески. Использовать стандартный деинтерлейс Virtual Dub также не рекомендуется, т.к. на сегодняшний день существуют более качественные фильтры — например, Smart Deinterlace от Donald Graft. Можно также использовать половинную высоту изображения. Это позволит отображать только один полукадр, вследствие чего эффект не проявится. . Swap fields. Если используется "сырой" драйвер, то возможно, что порядок полей полукадров будет нарушен, то есть четные строки становятся нечетными, и наоборот. В этом случае используется эта опция, которая меняет порядок полей.
. Cropping. Обрезание краев картинки бывает нужно, чтобы удалить черные поля по краям. Эту опцию следует использовать осторожно, потому что кодек HuffYUV может отказаться сжимать видео. При обрезке нужно соблюдать следующее правило: высота картинки должна без остатка делиться на 16, а ширина — на 8. В любом случае обрезать картинку можно на любом этапе обработки видео.

Оставшиеся пункты меню:
. Compression. Сжимать, как и говорилось ранее, мы будем кодеком HuffYUV. На рис. 5 показано окно настроек этого кодека. В число поддерживаемых цветовых пространств включены RGB24, RGB32, YUY2, YV12 (в составе FFDShow). Кодек поддерживает несколько методов сжатия. В зависимости от скорости различной будет и степень сжатия. В окне настройки кодека содержатся и краткие сведения о нем. Так, если используется конверсия RGB => YUY2, то это приведет к потере качества. Опция Always suggest RGB format for output (всегда предлагать RGB-формат на выходе) предназначена для совместимости с некоторыми приложениями. Эта опция декодера абсолютно бесполезна для Virtual Dub, т.к. Virtual Dub умеет преобразовывать YUY2 в RGB. Опция Enable RGBA будет полезна, если предусматривается обработка видео приложениями, использующими альфа-канал (например, Adobe After Effects). Опция Swap fields on decompress по действию аналогична пункту меню Swap fields. Опция console-window logging включает ведение лога.


Рис. 5. Окно настроек кодека HuffYUV

. Set custom format. В нашем случае эта опция бесполезна. Она позволяет выбрать особый формат видео. Однако формат должен поддерживаться картой захвата.
. Filters, Enable RGB filtering. При использовании фильтров следует иметь в виду, что для их применения Virtual Dub выполнит преобразование YUY2 => RGB, что снизит степень сжатия.
. BT8x8 Tweaker. Настройщик BT8x8 использует библиотеки программы DScaler, которые должны быть скопированы в папку Virtual Dub.
. Extend luma black/white point. Эти опции желательно отмечать, если выбрано любое цветовое пространство YUV (YCbCr, если быть корректным). Они включают фильтр, исключающий некорректные значения координат в пространстве YUV. Некорректность этих значений выражается в том, что из них нельзя получить допустимые значения координат RGB. Подробнее об этом мы поговорим в следующей статье. Согласно документации, кодек HuffYUV самостоятельно фильтрует корректные значения координат пространства YUV, однако не факт, что другой кодек будет делать так же. Приступим к захвату видео. Захват начинается по нажатию клавиши F6. И если все настроено правильно, то отобразится большой таймер записи (если соответствующая опция была включена), а панель справа "оживет". По цифрам в этой панели будем судить о том, насколько качественно проходит наш захват.

Рассмотрим, какие параметры приведены здесь (см. рис. 6):
. Frames captured. Число захваченных кадров.
. Total time. Время от начала захвата.
. Time left. Оставшееся время (по количеству свободного места).
. Total file size. Общий размер файла.
. Disk space free. Оставшееся свободное место на диске.
. CPU usage. Загрузка процессора программой Virtual Dub.
. Size. Размер видео.
. Average rate. Средняя скорость. Из расчета средней скорости исключаются "выпавшие" кадры.
. Data rate. Скорость данных.
. Compression. Степень сжатия.
. Avg frame size. Средний размер кадра.
. Frames dropped. Число "выпавших" кадров.


Рис. 6. Информационная панель во время захвата видео

Во время захвата следует обратить внимание на число "выпавших" кадров. Эти кадры не обрабатываются процессором, а значит, отсутствуют. Причины выпадения кадров могут быть разными. Рассмотрим их:

. Перегрузка процессора. Процессор отбрасывает кадры, потому что ему не хватает времени их обработать. Определить это просто по CPU usage — уровень загрузки постоянно больше 90%. В этом случае следует последовательно:
1. Установить опцию Hide on capture.
2. Отключить любые фильтры.
3. Установить другой метод сжатия у кодека HuffYUV.

Вполне возможно, что Virtual Dub не нагружает систему до предела, а кадры все равно выпадают. Нужно обратить внимание на уровень загрузки процессора в диспетчере задач. Если он близок к 100%, следует найти и отключить приложение, нагружающее процессор.
. Плохое качество входного видео или слишком высокий лимит скорости видео. В этом случае кадры будут выпадать при любой загрузке процессора, потому что устройство захвата по своим техническим характеристикам или по другим причинам не может захватывать большее число кадров. . Превышение установленного лимита скорости видео. Бывает, что устройство захвата может выдавать больше кадров в секунду, чем было установлено. Эти кадры будут отброшены программно, чтобы не превышать лимита скорости видео. "Выпавших" кадров в полученном видео не будет.

Если все было сделано правильно, на первом этапе оцифровки вы получите видео без потерь качества. Что еще попробовать? Думаю, есть смысл попробовать такие программы, как iuVCR, BorgTV, Dscaler, программы от производителей карт захвата и ТВ-тюнеров включая программы для карт на базе Philips 713x, а также VideoLAN Media Player (который позволит не только захватывать видео, но и транслировать его в локальную сеть с относительно небольшими затратами ресурсов. Интересная возможность для ретрансляции ТВ, не правда ли?). Несмотря на удобство iuVCR в использовании, по некоторым причинам я посчитал его применение невозможным. Virtual Dub предоставляет более правдивую статистику относительно "выпавших" кадров. Существуют ситуации, когда iuVCR не успевает обработать кадры и соответственно "выбрасывает" их, но в своей статистике об этом умалчивает. Фильтры у iuVCR мне показались хуже, чем у Virtual Dub, кроме того, нет никакой информации о том, в каком цветовом пространстве они работают, а попытка просмотреть результат их работы может привести к тому, что iuVCR придется перезапускать. Впрочем, в остальном это очень удобная программа с богатыми возможностями.

Ссылки:
iuVCR (4.10.0.372) — сайт (условно бесплатная — 30 дней, автор Иван Усков).
HuffYUV (2.2.1) — сайт (бесплатная, автор Ben Rudiak-Gould, однако существует несколько баг-фиксов от разных авторов).

Продолжение следует

Maxe Erte the Mad, maxe.erte@gmail.com


Компьютерная газета. Статья была опубликована в номере 20 за 2006 год в рубрике софт

©1997-2024 Компьютерная газета