Обзор программы VirtualDub

OSzone.net » Программы » Обзоры программ » Видео и Мультимедиа » Обзор программы VirtualDub
Иcточник: http://www.3DNews.ru
Опубликована: 01.02.2005
Пожалуй, все кто занимается или пытался заниматься видеомонтажом, сталкивался с программой VirtualDub. Преимущества VirtualDub над другими программами очевидны - программа бесплатна, проста в освоении (при знании основ работы с видео), постоянно совершенствуется и обновляется и что самое полезное - для неё написано много фильтров обработки видео.

Естественно, с такими монстрами, как Adobe Premier или Ulead Media Studio ей тягаться просто невозможно, но несложные операции над видеоматериалом VirtualDub делает на ура. Более того, VirtualDub умеет выполнять те операции, которые не под силу этим монстрам. Например, очистка видео от специфических помех. Всё дело в том, что фильтры для VirtualDub могут писать все, кто имеет навыки программирования, что очень сильно развязывает руки при обработке видео.

Я решил написать статью, которая поможет освоить программу VirtualDub в полной мере. В этой статье будет содержаться описание работы с VirtualDub и в конце приведены маленькие примеры работы с ней. Вот как выглядит стандартный VirtualDub:

Вы спросите, что значит - "стандартный VirtualDub"? Дело в том, что эту программу написал (и продолжает писать) Avery Lee, но на основе VirtualDub уже написано несколько клонов - VirtualDubMod, VirtualDub Mpeg2. Не надо понимать, что клон это что-то плохое, наоборот, за основу был взят VirtualDub и добавлены некоторые дополнительные возможности.

В двух словах расскажу о том, как работает VirtualDub внутри. Это поможет вам понять логику некоторых операций и станет более понятно то, что я написал. При открытии какого-либо видео, VirtualDub открывает его при помощи декодеров, установленных в системе. Это касается только AVI формата. VirtualDub умеет так же открывать и MPEG1 видео, но только открывать (причём внутренним декодером).

Для того, что бы сохранить это видео, вам нужно будет его сжать в какой-либо кодеком, который можно сохранить в AVI формате. Если я веду разговор о декодерах, то это означает, что при открытии видео, VirtualDub воспользовался каким-то системным (или внутренним) декодером для открытия видео (и звука). Если же, разговор зашёл о кодеках (или кодерах), это значит, что он используется для сжатия видео, которое выдал VirtualDub и сохранения в AVI файле.

Итак, посмотрим, что у нас есть в программе VirtualDub. Сверху находится панель меню, снизу находится панель навигации по видеоряду.

Меню File

Первый раздел в панели меню - "File". Как можно понять из названия раздела, здесь находятся функции, отвечающие за работу с файлами (будь то профайлы или файлы видео).

Здесь сгруппированы все команды VirtualDub, которые открывают или создают различные файлы. Начнём их обзор сверху.

"Open video file" - открывает файл с вашим видео.

Изначально, VirtualDub может открыть множество видео форматов, перечислять их нет большого смысла. Если вы не смогли открыть какой-то формат, то можете попробовать VirtualDubMod, в него заложена поддержка большего количества форматов.

Если же у вас видео состоит из множества кусков (или вы составляете видеоряд из множества картинок), то вы можете автоматизировать их открытие. Для этого, в окне открытия файлов нужно поставить галочку "Automatically load linked segments" (внизу окна). Далее, у всех кусков видео, должны быть одинаковые имена и отличаться только окончанием - номером куска. Например: Video_1, Video_2, Video_3… При этом, все файлы, которые попадут под этот шаблон будут открыты в соответствии с номером в конце файла. Откроются, правда, однотипные файлы (BMP только с BMP, AVI только с AVI…). Галочка "Ask for extended options after this dialog" отвечает за дополнительное меню при открытии файлов. При выставлении этой галочки, после открытия видео появится следующее меню:

Поясню, что значат пункты этого меню.

"Re-derive keyframe flags" - восстановление ключевых кадров. Зачем это надо? При передаче файлов по Интернету (или чтении AVI файла с повреждённого диска или…), периодически возникает ситуация, когда повреждаются заголовки AVI. При этом, вся информация о ключевых кадрах теряется и полноценная навигация по фильму будет невозможна. Но внутри видео потока эти кадры никуда не делись и их можно восстановить. Эта команда этим и занимается.

"Open in AVIFile compatibility mode" - если исходить из названия функции, то при открытии файла, VirtualDub должен переходить в режим работы с AVI файлом. Реально же, не зависимо от расширения файла, VirtualDub распознаёт что там внутри и соответственно открывает.

"Force video format FOURCC code to" - включает обработку открываемого видео при помощи кодека, указанного в окошке FOURCC метки. FourCC метка - это четырёх знаковый индекс. В AVI файле их ставится 2 штуки: один обозначает кодек, при помощи которого был сжат данный видео файл, а второй обозначает кодек, при помощи которого нужно просматривать данное видео. При открытии видео файла AVI, проигрыватель смотрит на FourCC метку и ищет соответствующий кодек в системе. Так вот, при открытии видео в VirtualDub можно подменить эту метку и в программе видео откроется при помощи указанного кодека. В жизни это на вряд ли пригодится, разве что для Mpeg4 совместимых кодеков. Полный список FourCC меток можно посмотреть здесь.

"Force video codec handler FOURCC code to" - как я уже сказал, в AVI файле есть 2 FourCC метки. При открытии AVI в VirtualDub, он смотрит на метку кодека, при помощи которого было сжато и открывает соответствующим кодеком. Проигрыватели же смотрят на метку, при помощи которой нужно воспроизводить видео. Если в поле "Force video codec handler FOURCC code to" поставить какую-либо метку, то на работу VirtualDub это никак не отразится. А вот если сделать после этого сохранение видео в режиме "Direct stream copy", то FourCC метка кодека (при помощи которого нужно воспроизводить видео) будет заменена на ту, которую вы укажете.

По большому счёту, работа с FourCC метками достаточно бесполезные функции. Уже давно вышли отдельные программы, которые позволяют не производя копирования видео заменять обе FourCC метки.

"Force audio sampling rate to" - эта функция изменяет частоту дискретизации звуковой дорожки. Не знаю, для чего может пригодиться эта функция. Ведь при изменении частоты дискретизации изменяется и продолжительность звука. Разве что, это позволяет устранить ошибки, которые были допущены ранее при записи звука.

"Disable optimized streaming I/O (saves memory)" - вот с этой функцией есть определённые "непонятки". Описания её нет. В моём понимании, она отключает оптимизацию работы с потоками, что поможет экономить память, но замедляет работу.

"Use VirtualDub routines for MJPEG (disables any hardware decompression)" - эта функция включает внутреннюю обработку VirtualDub-ом формата сжатия MJPEG, при этом не будут работать аппаратные декодеры, которые установлены на компьютере. Иногда это избавляет от определённых сбоев. Но основная прелесть этой функции в том, что она даёт нам возможность работать с полями.

После активизации этой функции, можно будет произвести с ними следующие операции:

"Normal" - не производятся никакие действия с полями.

"Split interlaced frames into two fields (unswapped) and double framerate" - производит разложение кадров на поля. При этом, производится увеличение частоты кадров в 2 раза и снижение высоты кадра в 2 раза. Порядок полей при этом разложении - верхнее поле первое (TFF). Если видео открытое при помощи этой опции будет смотреться не правильно (кадры будут прыгать то назад, то вперёд), значит ваше видео с нижним полем первым (BFF) и открывать его нужно при помощи следующей опции.

"Split interlaced frames into two fields (swapped) and double framerate" - это то же самое, что и предыдущая функция, но порядок открытия полей - нижнее поле первое (BFF).

"Discard first field" - при разложении на поля, откидывает первое (верхнее) поле. При этом производится уменьшение высоты кадра в 2 раза.

"Discard second field" - при разложении на поля, откидывает второе (нижнее) поле. При этом производится уменьшение высоты кадра в 2 раза.

"Swap field" - меняет порядок полей в кадре. Эта опция пригодится для видео, которое было сжато со сбоями во время работы MJPEG кодека. Вернёмся же к первому разделу в панели меню.

После "Open video file" идёт функция "Append AVI segment". Здесь можно произвести присоединение какого-либо видео к вашему. При присоединении учтите, что видео должно иметь те же параметры, что и уже открытое. То есть, у открываемого видео должны быть те же размеры и частота кадров. В звуке так же не должно быть различий (частота дискретизации, число уровней квантования). При открытии дополнительных видео файлов, можно поставить галочку "Autodetect additional segments by filename", которая автоматически определит дополнительные сегменты видео.

"Preview input" - эта функция включает просмотр видео, которое открыто в VirtualDub.

"Preview filtered" - эта функция включает просмотр видео, после прохождения обработки во всех фильтрах.

"Preview output from start" - эта функция включает просмотр видео потока на выходе VirtualDub. Если включить VirtualDub в режим "Direct stream copy", то VirtualDub покажет поток видео, который находится внутри открытого AVI файла.

"Save as AVI" - тут задаётся имя файла, в который будет производиться запись. Здесь есть единственная галочка ("Don`t run this job now; add it to job control so I can run it in batch mode"), которая позволит вместо моментальной записи, произвести отложенную запись. Подробнее, что это такое. Объясню чуть ниже.

"Save as old format AVI" - при сохранении видео в этом формате, в AVI файле ставится заголовок старого типа (1.0). Для файлов этого типа есть ограничения в 2 Гигабайта. Использование этого типа AVI файла на данный момент не имеет какого-то смысла и она была сделана для старых программ, которые не понимают AVI формата 2.0.

"Save segmented AVI" - эта функция позволяет при сохранении видео делить его на куски.

Допустим, вы пользуетесь файловой системой FAT16, для неё есть ограничение на максимальный размер файла - 2 гигабайта. Так же вам может потребоваться разделить видео на куски по 25 кадров, при помощи этой функции это возможно. А конкретнее: "Don`t run this job now; add it to job control so I can run it in batch mode" - как уже писалось выше, эта функция заносит запись в список отложенных заданий, которые можно будет запустить позже.

"Limit number of video frames per segment:" - если поставить галочку в этом поле и указать количество кадров, то выходящее видео будет разбито на отдельные файлы, в каждом из которых будет содержаться то количество кадров, которое вы укажете. Правда, есть тонкости при работе этой функции:

  1. Реальное количество кадров в куске будет выставленное плюс 1 (если выставить как показано на картинке, то в каждом куске будет по 25 кадров)
  2. Если выходной поток состоит из ключевых и дельта кадров, то в большинстве случаев, количество кадров, входящих в один кусок, не будет совпадать с выставленным. Это происходит потому, что отдельный видео кусок не может начинаться с дельта кадра, поэтому в предыдущий кусок пишется до первого ключевого кадра, а следующий кусок начинается с этого ключевого кадра.

"File segment size limit in MB (50-2048):" - здесь задаётся максимальный объём файла, который будет создаваться. При превышении этого объёма, начинается запись следующего куска.

"Close video file" - эта функция закрывает открытый для редактирования видео файл. По большому счёту, пользоваться этой функцией нет необходимости. У меня по этому поводу есть 2 соображения:

  1. Если файл открыт и производились какие-то настройки фильтров, кодеков… то при открытии следующего файла все эти настройки останутся. По этому, лучше совсем закрыть VirtualDub, а потом запустить заново и открыть нужное нам видео. В этом случае от предыдущих настроек точно ничего не останется.
  2. Если же вам нужно оставить настройки и применить их для следующего видео, то можно его открывать сразу, без закрытия предыдущего (оно автоматически закроется).


Смотрим далее:

"File Information" - здесь вы можете посмотреть информацию об открытом видео:

"Save striped AVI", "Save stripe master" - это довольно интересная функция, но на данный момент она не очень то пригодится. Смысл её сводится к тому, что при записи, видео будет разбито на несколько потоков и будет записываться в разные файлы. Это напоминает работу RAID массивов. Файлы с расширением .stripe создаются в ручную, и в них прописывается, куда и как будет производиться запись. Для тех, кто захочет разобраться подробно, как работает эта функция, я рекомендую взять Help (VirtualDub_help.rar) от первых версий VirtualDub и почитать его.

"Save image sequence" - вот, вот та функция, которой я люблю пользоваться для определения, на сколько ухудшилось качество видео (или для сравнения разных кодеков). При использовании этой функции, кадры вашего видео будут преобразованы в картинки и записаны в файлы. Потом, мы сможем подробно рассмотреть каждый кадр.

Рассмотрю поподробнее это окошко:

"Filename prefix:" - какое-либо имя или символ, который будет добавлен перед названием файлов (точнее говоря их номерами).

"Filename suffix, include extension:" - окончание имени файла (добавляется после порядкового номера).

"Minimum number of digits in name:" - количество цифр в порядковом номере. Если поставить 4, то отсчёт начнётся с 0001, 0002… 9999 и после того, как порядковый номер уйдёт за пределы 4 цифр, буде добавлена ещё одна цифра - 10000, 10001…

"Directory to hold images" - здесь указывается директория, в которую будет производиться запись графических файлов. Для того, что бы выбрать эту директорию, нужно нажать на кнопку "…" в конце этого поля (или же, можно написать в ручную, если вам это больше нравится).

"First frame filename" и "Last frame filename" - показывают, куда и с какими именами будут сохранены первый и последние файлы картинок.

"Output format" - выставляется графический формат, в котором будет производиться запись. Я предпочитаю BMP (формат без сжатия), что вы выставите - большого значения не имеет.

"Don`t run this job now; add it to job control so I can run it in batch mode" - пока я только обещаю рассказать, что даёт отложенная запись, но не рассказываю. Видно не пришёл ещё черёд рассказа, про отложенную запись. Потерпите немного. Если поставить эту галочку, то картинки не начнут записываться сразу, а встанут в очередь отложенных записей.

Теперь тонкость при работе с этой функцией. Для того, что бы правильно сохранялись картинки, нужно выставить режим работы "Full processing mode" и поставить формат сжатия (Video->Compressin) - Uncompressed RGB. Только в этом случае на формирование изображений пойдёт правильный поток. Далее, когда будете разглядывать картинки, не забудьте, что Mpeg4 кодеки формируют B-frames, которые хуже соседних кадров по качеству.

"Save WAV" - производит запись звуковой дорожки видеофильма в WAV формате. При пользовании этой функцией, нужно учитывать определённые особенности. Запись в WAV формате не производит декомпрессии сжатого звука, а записывает его как он есть внутри видео файла, просто подставляя заголовок WAV. Я использую эту функцию при монтаже видео. Допустим, я свёл несколько фрагментов в один фильм (производя попутно подрезку, стыковку…). Естественно, что бы потом звук совпал с видео, мне нужно его сохранить вместе со всеми этими обрезками. Вот в этом случае я пользуюсь функцией "Save WAV" (звук у всех фрагментов был не сжат и спокойно сохраняется в WAV формате). Далее, произвожу действия с видео и в последнюю очередь свожу звук и видео.

Ниже по меню находятся пункты, отвечающие за работу с профайлами:

"Load processing settings" - Производится запись установок VirtualDub, которые были сделаны для данного видео. Вы спросите, какие же конкретно установки записываются? Да все. Начиная с установок фильтров (видео и аудио) и заканчивая кодеками, установленными для кодирования и их установками. Единственное, что не записывается - системные установки, находящиеся в меню "Options".

"Include selection and edit list" - если поставить эту галочку, то в профайл запишутся так же и все действия по монтажу видео. То есть, будут записаны все вырезки из монтируемого видео.

"Save processing settings" - Производится установка параметров VirtualDub из профайла, записанного ранее.

Теперь разберёмся, что можно делать при помощи файла конфигурации. Допустим, вы подготовили к сжатию видео. То есть, настроили фильтры, сделали все вставки, вырезки, настроили кодеки на сжатие. Сохранили всё это в профайл и запустили на сжатие из VirtualDub. Но… о неудача, размер сжатого видео зашкалил за нужные нам размеры файла. Заново настраивать фильтры, делать вырезки, довольно муторно. Мы просто открываем открытое ранее видео и загружаем профайл. Единственное, что нужно сделать, настроить заново кодек на меньший битрейт и запустить процесс сжатия видео заново. Или, вы ведёте покадровое редактирование 6 часового фильма - вырезка плохих кадров идёт долго и нудно. Как правило, это не получается сделать за один раз. На время перерывов можно записывать вырезки в профайл, а когда настанет время продолжить редактирование, открыть видео и загрузить профайл. Все ранее сделанные вырезки сохранятся и можно будет продолжить с того места, где вы закончили. В целом, эта функция довольно полезная и стоит всегда помнить о её наличии.

Далее по меню "File"

"Start frame server" - фреймсервер, хм, попытаюсь объяснить, что это такое. Допустим, вы сделали определённые действия над видео в программе VirtualDub (фильтры, вырезки…) и хотите произвести сжатие в другой программе (например, в формат Mpeg2, ведь VirtualDub этого не может). У нас есть 2 пути решения этой задачи. Первое - сохранить видео в промежуточный файл, сжатый кодеком без потерь (или с минимальными потерями), потом сжимать из этого промежуточного файла в нужной нам программе сжатия. Второй - воспользоваться фреймсервером. Для этого, из VirtualDub запустить фреймсервер и в нужной программе сжатия открыть промежуточный файл фреймсервера. Немного подробнее о работе фреймсервера: при запуске фреймсервера, он создаёт файл на винчестере (в этом файле нет реальных видео данных), при обращении к которому фреймсервер начинает выдавать кадры программе, обратившейся к этому файлу.

Теперь, о преимуществах и недостатках этих способов. Первый способ - занимает на винчестере много места. Второй способ - довольно медленный, но не требует больших объёмов винчестера. Есть так же третий способ, который предпочитаю я, но он уже не имеет отношения к VirtualDub - воспользоваться утилитой Avisynth, которая позволяет подгружать фильтры от VirtualDub и имеет собственные большие возможности для работы с видео.

Что такое фреймсервер я рассказал, а вот как им воспользоваться, рассказывать не буду, потому, что сам не имею опыта его использования. Для тех, кто захочет им воспользоваться, могу предложить почитать об этом на странице автора VirtualDub и в уже упомянутом Help от старых версий VirtualDub. Если же вы спросите моих рекомендаций, как лучше всего это делать, то я вам посоветую изучать Avisynth (или ждать, пока появится статья по практическому использованию этой утилиты).

"Capture AVI" - Эта функция производит захват видео с карт захвата и TV-тюнеров. Работу VirtualDub в этом режиме я описал в статье про захват.

"Run script" - Происходит запуск скриптов. Что же такое скрипт? Это файл, содержащий команды, которые понятны VirtualDub-у. В результате исполнения скрипта, VirtualDub произведёт какие-либо действия с видео (загрузка видео, включение фильтров, настройка кодеков…). Из самого VirtualDub скрипты пишутся двумя способами. Первый - записать при помощи команды "Save processing settings". При загрузке такого скрипта, его действие будет равноценно загрузке через "Save processing settings". Второй способ на много более интересен. Я уже долго говорю про отложенную запись, настало время рассказать про неё поподробнее. Если при сохранении видео или картинок воспользоваться функцией "Don`t run this job now; add it to job control so I can run it in batch mode", то создастся скрипт, в который будет внесёно задание (файл VirtualDub.jobs в каталоге VirtualDub). В этом скрипте будет указанно всё, что нужно знать VirtualDub-у для сжатия видео (видео источник, все настройки фильтров, настройки кодека сжатия и файл, в который будет производиться запись сжатого видео). Если теперь открыть этот скрипт из VirtualDub, то запустятся на исполнение все задания, ранее внесённые в него (в соответствии с очерёдностью внесения в скрипт - первое внесённое задание будет исполнено первым). Это очень удобно. Например, при работе кодеков в двух проходном режиме, для того, что бы не подходить к компьютеру после первого прохода. Я всегда пользуюсь этим способом.

"Job control" - А этой функцией можно просмотреть список отложенных заданий и запустить их на выполнение.

Если удалить файл VirtualDub.jobs, то все задания из этого списка удалятся. Теперь посмотрим, как мы можем воспользоваться этой функцией. Здесь есть кнопки, которыми можно управлять работой скрипта.

"Move up" - эта кнопка передвигает выделенное задание выше по списку отложенных записей.

"Move down" - эта кнопка передвигает выделенное задание ниже по списку отложенных записей.

"Postpone" - эта кнопка приостанавливает выполнение задания. То есть, если запустить скрипт, то приостановленное задание не будет выполнена.

"Delete" - удаляет задание из списка отложенных записей.

"Start" - запускает на выполнение выделенную отложенную запись. Если после этого не остановить выполнение задания, то будут выполняться все задания по очереди.

"Abort" - останавливает выполнение задания.

Линейка "Current job" показывает процент выполнения задания.

Я не люблю пользоваться запуском заданий из этого списка. Причин тому несколько. При запуске заданий в качестве скрипта (функция "Run script") в окошке "VirtualDub Status" мы видим результаты выполнения задания, а при запуске задания из "Job control" видно только процент выполнения очередного задания. Так же, при запуске скрипта, из окошка "VirtualDub Status" можем управлять приоритетом выполняемого задания, что иногда очень пригодится. Например, вы заняты какой-то работой в Word или Excel и параллельно у вас идёт сжатие видео в программе VirtualDub. Если VirtualDub будет иметь нормальный приоритет, то все действия будут выполняться с жуткой натяжкой - весьма медленно. Но если присвоить в окошке "VirtualDub Status" приоритет "Idle", то Word весело забегает. Кодирование в VirtualDub будет происходить в то время, когда вы не производите никаких действий в других программах.

Ну и в конце выпадающего списка мы увидим список из последних 4 открываемых файлов (для обеспечения возможности их быстрого открытия) и опцию "Quit" - выход их VirtualDub.


Ссылка: http://www.oszone.net/1739/