> Как работать с Virtual Dub Frameserver
 VxWorks Member is Offline
 Posted: 07-05-2006, 20:10 (post 1, #597600)

Daysleeper
Forum moderator
Group: Privileged
Posts: 21921
Warn:0%-----
Как работать с Virtual Dub Frameserver
VxWorks

О чем эта статья?

Иногда требуется использовать какие-то фильтры (коих для Virtual Dub великое множество) в кодерах MPEG (таких, как Mainconcept или TMPGEnc). В этом случае можно либо перекодировать исходный файл в Virtual Dub, а затем, перекодированный файл использовать в MPEG кодерах.
Такой подход занимает много времени и может привести в привнесению дополнительных искажений видеоматериала. Чтобы этого не произошло, надо использовать фреймсервер.

Мне известны два типа фреймсервера - Virtual Dub Frameserver и AviSynth.
Второй намного мощнее, в то время, как первый легче в использовании. О том, как работать с фреймсервером Virtual Dub и расказывается в этой статье


Софт

Нам понадобится Virtual Dub.



Начнем, пожалуй!


Прежде всего, надо установить Frameserver, если это еще не сделано (эту операцию необходимо проделать только один раз). В директории, где находится Virtual Dub присутствует программка AuxSetup.exe. Запускаем ее и получаем вот такое окно:

user posted image


В открывшемся окне, нажимаем на кнопку Install Handler, после чего начнется установка необходимых библиотек в систему:

user posted image

После установки библиотек, AuxSetup выдаст радостное сообщение о том, что установка фреймсервера успешно завершена:

user posted image

Все, что теперь остается сделать в AuxSetup - это пару раз кликнуть на OK, а затем выйти из программы, нажав Exit.

После установки фреймсервера, запускаем Virtual Dub и, как обычно, выбираем нужный видеофайл, для чего идем в меню File->Open video file:

user posted image

Выбираем файл и к нашим услугам кнопка Open:

user posted image

Теперь - самое время задасться вопросом - "а зачем, собственно, нам этот самый фреймсерв, нужен?".
Допустим, нам надо закодировать видео в VCD с помощью Mainconсept MPEG1 Encoder'a. Обычно, при захвате видеосигнала с кассеты, по краям кадра остаются всякого рода неровные края и линии, несущие служебную информацию, но которые, тем не менее, были записаны вместе c видео.
Для того, чтобы убрать эти линии и неровности, применяется очень простой способ, который называется Cropping. Однако, при всей своей скорости, качестве и т.п., Mainconcept MPEG Encoder не умеет обрезать кадры по краям (в отличие от того же TMPGEnc).
Чтобы решить "эту маленькую частную проблему" © Стругацкие, используем фильтр Cropping из Virtual Dub, после чего видео будет фреймсервиться (ну как это по-русски то сказать?!!) в Mainconcept.
Итак, идем в меню Video->Filters:

user posted image

Список фильтров, естественно, пуст. Чтобы добавить фильтры, нажимаем на кнопку Add:

user posted image

В списке фильтров выбираем Null Transform. Сам по себе,этот фильтр ничего не делает, но, поскольку в Virtual Dub нет отдельного фильтра Cropping, а только возможность использования этой функции с другими фильтрами, то выбираем этот "ничего не делающий фильтр", (указываем на него мышкой и нажимаем на ОК):

user posted image

И "навешиваем" на него функцию Cropping

user posted image

Нажатие кнопки Cropping приводит к тому, что открывается окно, где можно задать количество обрезаемых строк и столбцов. В опциях "X1 offset", "X2 offset", задаем количество обрезаемых вертикальных строк (столбцов) для обрезки слева и справа, соответственно.
PM
Top Bottom
 VxWorks Member is Offline
 Posted: 07-05-2006, 20:11 (post 2, #597601)

Daysleeper
Forum moderator
Group: Privileged
Posts: 21921
Warn:0%-----
Для обрезки верхних строк, выбираем опцию "Y1 offset" (обратите внимание на перевернутые по значению кнопки увеличения\уменьшения значений в окошке опции), а для обрезки нижних - "Y2 offset".
Ползунок внизу окна поможет выбрать позицию в файле, где края будут видны наиболее четко, что позволит более точно выставить значения для "обрезки":

user posted image

После того, как значения опций выставлены, нажимаем пару раз на ОК и, вернувшись в главное окно Virtual Dub, выбираем Video->Full Processing Mode (иначе, видео просто будет копироваться, как есть, без обработки фильтрами):

user posted image

Поскольку для фреймсерва не нужна компрессия (уж как-нибудь, передачу нескольких несжатых фреймов между программами компьютер должен выдержать), идем в меню Video->Compression:

user posted image

И выбираем тип сжатия "видео без компрессии" -Uncompressed RGB, после чего, кликаем на обязательный ОК.

user posted image

После того, как все настройки закончены (можно добавить фильтры по вкусу - например, grayscale для черно-белого видео или temporal smoother для уменьшения количества артефактов кодирования в VCD - надо пробовать :), включаем режим фреймсервера (File->Start Frame Server):

user posted image

Virtual Dub попросит имя для фреймсервера, которое, в принципе, не имеет никакого значения, за исключением случая, когда одновременно работают несколько фреймсерверов (что, впрочем, довольно редкое явление). Так что, просто жмем на ОК:

user posted image

После этого, откроется окно выбора имени для специального файла (по умоланию с расширением VDR, которое, впрочем, можно менять). Этот файл имеет очень маленький размер (десятки байт), и, представляет собой "указатель" на фреймсервер.
Чтобы активировать фреймсервер, надо в том же Mainconcept Encoder'e открыть этот файл, как обычный AVI.

user posted image

После выбора имени файла (и нажатии на Save), появится окно фреймсервера (окно Virtual Dub'a показываться не будет - оно вернется на экран только тогда, когда режим фреймсервера будет выключен кнопкой Stop Serving.
Также, очень важно, чтобы в графе Frameclients installed была запись AVIFile only. Если там будет None - это значит, что фреймсервер не установлен.

user posted image

Все, что теперь осталось - это воспользоваться фреймсервером, то есть, открыть его файл в MPEG кодере (например, Mainconcept или TMPGEnc).
Кстати, если по каким-либо причинам кодирование было прекращено, то необходимо перезапустить фреймсервер.
Удачного кодирования!

PM
Top Bottom
Topic Options