категории | RSS

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

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

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

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

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

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

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

Меню File

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

[lib]File0000.gif[/lib]
Здесь сгруппированы все команды 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" отвечает за дополнительное меню при открытии файлов. При выставлении этой галочки, после открытия видео появится следующее меню:

[lib]Extend00.gif[/lib]
Поясню, что значат пункты этого меню.

"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 кодека. Вернёмся же к первому разделу в панели меню.
[lib]File_100.gif[/lib]

После "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" - эта функция позволяет при сохранении видео делить его на куски.
[lib]Segmente.gif[/lib]

Допустим, вы пользуетесь файловой системой 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 (если выставить как показано на картинке, то в каждом куске будет по 25 кадров)

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

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

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

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

[pagebreak]

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

[lib]File_200.gif[/lib]
"File Information" - здесь вы можете посмотреть информацию об открытом видео:
[lib]Informat.gif[/lib]

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

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

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

"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 формате). Далее, произвожу действия с видео и в последнюю очередь свожу звук и видео.

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

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

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

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

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

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

[lib]File_400.gif[/lib]
"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" - А этой функцией можно просмотреть список отложенных заданий и запустить их на выполнение.
[lib]Job_cont.gif[/lib]

Если удалить файл 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.

[pagebreak]

Меню Edit

Второй раздел в панели меню - "Edit". В этой панели находятся инструменты для навигации и редактирования.

[lib]edit0000.gif[/lib]
Сверху идёт раздел редактирования видео. Здесь всё абсолютно стандартно. Пожалуй, я бы скорее использовал этот раздел для ознакомления с горячими клавишами. Горячие клавиши лучше запомнить и использовать их в процессе редактирования видео. Это здорово сэкономит время.

"Cut" - вырезает (c копированием в буфер) помеченную область видео. Разметка видео производится клавишами "Home" и "End" или из этой же панели функциями "Set selection start" и "Set selection end". При этом, помеченная область будет выделена синим цветом на панели навигации.
[lib]Marked00.gif[/lib]
Для того, что бы передвигаться по видео, можно передвигать слайдер или пользоваться клавишами навигации по видео. Одновременно выделить можно только один кусок, так что не старайтесь выделить несколько.

"Copy" - копирует помеченную область видео в буфер. После этого, при команде "Paste", эта область будет вставлена туда, где находится слайдер.

"Paste" - вставляет видео из буфера.

"Delete" - удаляет помеченную область видео.

"Clear selection" - удаляет метки выделения.

"Select all" - эта функция производит выделение всего видео, которое загружено в VirtualDub.
Далее, идут функции навигации по видео.
[lib]edit_200.gif[/lib]

"Beginning" - возвращает слайдер движения по видео на начало видео, загруженного в VirtualDub.

"End" - переводит слайдер движения по видео на конец видео, загруженного в VirtualDub.

"Previous frame" - переводит слайдер движения по видео на предыдущий кадр. Какого-то передвижения слайдера вы не увидите потому, что сдвиг на 1 кадр очень мал по отношению к количеству кадров во всём видео. Но проконтролировать этот сдвиг можно.
[lib]number_f.gif[/lib]
На панели навигации показывается, на каком кадре вы сейчас находитесь, какое время прошло от начала видео, и на каком типе кадра вы сейчас находитесь (ключевой, дельта или dropped (пропущенный)).

"Next frame" - переводит слайдер движения по видео на следующий кадр.

"Previous keyframe" - переводит положение слайдера на предыдущий ключевой кадр. Этой функцией удобно пользоваться для быстрого передвижения по видео. Если вы открыли видео сжатое кодеком, в котором есть ключевые и дельта кадры, при поиске кодек будет привязываться к ключевым кадрам.

Теперь, если начать произвольно передвигать слайдер по видео, то картинка будет отображаться не сразу, а с определённой задержкой, которая бывает весьма большой. Если же передвигаться только по ключевым кадрам, то картинка отображается моментально и VirtualDub очень быстро передвигается по открытому видео.

Есть ещё один резон, зачем нужна эта функция. Допустим, у вас есть видео сжатое кодеком с ключевыми и дельта кадрами. Вам нужно без пережатия (чтобы не попортить картинку), удалить определённые куски. Для этого вы включите "Direct stream copy" (подробнее об этом позже) и вырежете не нужные вам куски. Но после сохранения может оказаться, что сохранилось то, что вы вырезали или не сохранилось то, что вы оставляли.

Это не полтергейст, это работа по ключевым кадрам. Кодеки с ключевыми кадрами не могут начать показывать изображение с дельта кадров, они отталкиваются от ключевых кадров и если перед дельта кадром не будет ключевого, то картинка развалится.

Теперь, что происходит, когда вы пытаетесь что-то вырезать в VirtualDub не по ключевым кадрам. Вы указываете на дельта кадр, до которого (или от которого) нужно вырезать, VirtualDub послушно его вырезает. Но когда вы сохраняете видео, программа видит, что обрезка была сделана не по ключевому кадру и компенсирует этот недостаток - обрезка происходит до ближайшего ключевого кадра (ну не может он начать работу без ключевого кадра).

Таким образом, происходит перескок с того кадра, который вам нужно вырезать, на ближайший ключевой кадр. Так вот, что бы знать заранее, на какой кадр произойдёт перескок при сохранении, можно пользоваться переходом по ключевым кадрам. А ещё лучше сразу вырезать по ключевым кадрам (пользуясь переходами по ключевым кадрам). В этом случае вы будете видеть результат ещё до сохранения.

"Next keyframe" - переход на следующий ключевой кадр. Если вы находитесь между двумя ключевыми кадрами, то переход будет осуществлён на правый (по линейке VirtualDub).

"Back 50 frames" - возвращает слайдер на 50 кадров назад по видео.

"Forward 50 frames" - переводит слайдер на 50 кадров вперёд по видео.

"Previous drop frame" - переводит слайдер на предыдущий пропущенный кадр (drop). Пропущенные кадры появляются при захвате видео. Можно посмотреть, как много их на вашем материале, для этого применяется эта функция.

Её можно так же использовать для удаления пропущенных кадров из видео, но при этом может возникнуть проблема рассинхронизации видео со звуком (допустим при раздельной обработке звука и видео).

"Next drop frame" - переводит слайдер на следующий пропущенный кадр (drop).

"Previous range" - эта функция производит перевод слайдера на предыдущий фрагмент. Фрагментами считаются те места, где производилась вырезка, вставка или специальная пометка фрагментов. При этом, если производилась вырезка, слайдер становится на месте вырезки и снизу, в информационной строке, указывается, какой диапазон кадров будет входить в следующий фрагмент и какие кадры источника будут в него входить.

[lib]info0000.gif[/lib]
Если же производилась вставка, то при переходе по фрагментам, слайдер будет останавливаться дважды - в начале и в конце вставленного фрагмента, при этом в информационной строке будет указываться диапазон кадров следующего диапазона и какие кадры источника в него вошли.

"Next range" - переход на начало следующего фрагмента.

"Move to selection start" - ставит слайдер в начало выделенной области.

"Move to selection end" - ставит слайдер в конец выделенной области.

"Go to…" - а по этой функции происходит перемещение слайдера на заданный кадр.
[lib]jump0000.gif[/lib]
Кадр можно задать, как его номером ("Jump to frame number"), так и нахождением его во времени ("Jump to frame at time"). Ну и в конце списка меню, находятся функции расставления меток.
[lib]edit_300.gif[/lib]

"Set selection start" - устанавливает метку начала выделенной области. При расстановке меток учтите, что можно поставить только одну метку начала и одну метку конца фрагмента. И как следствие этого, если вы повторно нажмёте установку метки начала, то она будет поставлена вновь, а область будет начинаться уже с этого момента.

"Set selection end" - устанавливает метку окончания выделенной области.

"Mask selected frames" - превращает выделенную область во фрагмент. То есть, метки выделения исчезнут, но на них можно будет попасть переходом по фрагментам.

"Unmask selected frames" - снимает все выделения фрагментов.

"Revert all edits" - удаляет редактирование, которое было произведено с видео. Попросту, загружает видео вновь.

[pagebreak]
Меню Video

Вот мы и добрались до главного раздела в панели меню - "Video".

[lib]Video000.gif[/lib]
Первая опция, пожалуй, одна из самых нужных в VirtualDub - "Filters".
[lib]filters0.gif[/lib]

При помощи фильтров в VirtualDub можно производить очистку видео от шумов и искажений, накладывать (убирать) Лого, изменять яркость-контрастность-насыщенность, производить операции с полями, изменять размеры изображения и много всего другого. Короче говоря, здесь находятся инструменты для обработки видео. Теперь о том, как работать с фильтрами. В окошке выбора фильтров "Filters" показываются фильтры, которые вы выбрали для работы. Кнопка "Add" выводит нас на окно выбора фильтров:
[lib]add_filt.gif[/lib]

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

Допустим, вы выбрали какой-нибудь фильтр и нажали "Ok". Сперва нас выкинет в окошко настройки фильтра (если он нуждается в настройке), а потом мы вновь окажемся в окошке "Filters" и выбранный нами фильтр будет в конце списка.

Кнопка "Delete" удаляет фильтр, на котором остановлен выбор.

Кнопки "Move Up" и "Move Down" передвигают фильтры по списку вверх и вниз. Зачем это надо, как-нибудь потом.

Кнопка "Cropping" производит обрезку картинки со всех сторон. Это нужно для того, что бы убрать не нужные чёрные полосы и загибы изображения по краям (они обычно бывают после захвата) или просто вырезать нужную нам часть изображения. Обрезку можно производить перед любым фильтром. Для этого, нужно навести на фильтр, перед которым вы собираетесь произвести обрезку, нажать на кнопку "Cropping" и произвести обрезку.
[lib]filter_o.gif[/lib]

На картинке видно, что перед 3 фильтром сверху была произведена обрезка. При обрезке, нужно учитывать, что есть фильтры, которые работают только с чётным разрешением, а есть те, которые работают с разрешениями, делящимися на 4, а есть и особо привередливые - требуют, что бы видео на их входе было кратно 16.

На выходе с последнего фильтра нужно стараться, что бы разрешение было кратно 4 (для данного случая на выходе разрешение 320*240). Это связанно с тем, что, большинство кодеков используют YUY2 формат цветности. Если же исходить из общих рекомендаций разрешения видео, лучше делать, что бы ширина была кратна 32, а высота 16. Эти рекомендации не связаны с работой кодеков, а предназначены для облегчения работы плееров, показывающих видео.
[lib]Cropping.gif[/lib]

В полях, помеченных красным выставляются значения на сколько производить обрезку с каждой из сторон. Делать можно это 3 способами.

Поставить цифровое значение вручную.

Нажимать на кнопочки верх-низ (рядом с цифровым значением) и подгонять обрезку до нужного значения.

Взять мышью за линию обрезки и потянуть в нужную сторону. Это наиболее удобный способ, но тонкую подгонку удобнее делать 2 способом.
И последняя кнопка "Configure". Она производит включение настройки фильтра, на котором остановлен фокус.

Что ж, о фильтрах конкретнее в другой статье, а сейчас пойдём ниже по списку функций в меню "Video".
[lib]Video_10.gif[/lib]

Функция "Frame rate" позволяет изменить частоту кадров видео. Есть 3 вида изменения частоты кадров: изменение индекса частоты кадров (приводит к замедлению или ускорению видео, соответственно изменяется продолжительность видео), реальное изменение количества кадров в секунду (достигается выкидыванием или дублированием кадров, не приводит к изменению продолжительности) и снижение частоты кадров выкидыванием полей (этот способ достаточно подробно рассмотрен мною в этой статье). Для каких целей вы собираетесь это использовать - ваше дело, но пару советов осмелюсь дать.

Первый способ может пригодиться, пожалуй, только для баловства. Качественное ускорение или замедление видео этим способом вы не получите. Для этого есть специальные монтажные программы. А если учесть нестандартные частоты кадров, которые вы получите, то функция становится практически не нужной.

Второй способ поможет проредить видео (понизить частоту кадров) для публикации в Интернете, следящих систем и других источников, где не важно содержание каждого кадра и не требуется передача динамики. Этим способом изменения частоты кадров можно понизить видео поток или подогнать видео под какие-то конкретные значения (например, вам нужно переделать из 25 кадрового видео в 30 кадровое). Видео поток сжижается со снижением частоты кадров.

Третий способ необходимо использовать при получении фильмов в формате NTSC, снятых на киноплёнку. Есть ещё несколько поводов его использовать, но в VirtualDub есть реализация только выкидывания 12 полей из 30 кадров (InverseTelecine).

Давайте же посмотрим на окошко VirtualDub функции "Frame rate".
[lib]Frame_ra.gif[/lib]

"Source rate adjustment" - поле настройки заголовка частоты кадров. Это первый способ изменения частоты кадров (с соответствующими последствиями).

No change - оставляет частоту кадров без изменений

Change to … frames per second - изменяет индекс частоты кадров до выставленной вами частоты

Change so video and audio durations match - производит подгонку частоты кадров до выравнивания продолжительности звука и видео
"Frame rate conversion" - Это производится вторым способом.

Process all frames - обрабатывает из исходного видео все кадры

Process every other frame (decimate by 2) - из исходного видео берётся только каждый второй кадр (деление частоты кадров на 2)

Process every other frame (decimate by 3) - из исходного видео берётся только каждый третий кадр (деление частоты кадров на 3)

Decimate by … - деление частоты кадров на произвольный множитель.

Convert to fps … - преобразует частоту кадров к заданному значению. Но, в продолжение темы скажу, что практическую пользу может принести только уменьшение частоты кадров (поводы перечислены выше)
"Inverse telecine (3:2 pulldown removal)" - функция, выкидывающая 12 полей из 30 кадров. Это нужно для возвращения нормального 24 кадрового фильма из 30 кадрового формата NTSC. Этот процесс принесёт пользу, только если изначально фильм был снят на киноплёнку (24 кадра), а потом переведён в формат NTSC (30 кадров).

None (progressive) - не производит никаких действий с полями

Reconstruct from fields - adaptive - автоматическое выкидывание одинаковых полей в соседних кадрах. Качество работы этой функции я не проверял, поэтому эффективность её работы мне не известна. Для работы с полями я предпочитаю Avisynth.

Reconstruct from fields - manual - ручное выставление порядка полей для работы функции InverseTelecine. На самом деле, выставляется не порядок полей, а первый кадр, с которого начинала работу функция "3:2 pulldown" (или "Telecine"). Выставив первый кадр, остальное высчитывается автоматически. Для задачи первого кадра используется опция "Offset …". Ручной метод - весьма не удачная мысль работы с функцией InverseTelecine. Дело в том, если выпадет хоть один кадр из видеоряда, то произойдёт ошибка высчета (смещение) выкидываемых полей и видео будет только испорчено.

Reconstruct from blurred fields - manual - если исходить из названия функции, то производится удаление полей из материала с размытыми полями. То есть, на вход подаётся достаточно поношенное видео (где кадры подвергались размытию в результате хранения на магнитных лентах или после каких-либо обработок) при удалении дублированной пары полей, кадр может получиться с подобием интерлейсной расчёски. Для удаления этого эффекта можно будет воспользоваться деинтерлейсом (что повлечёт за собой ещё большее размытие картинки) или включить этот метод обработки полей. Так же, как и предыдущий метод, его работа определяется параметрами, выставляемыми вручную ("Offset …" и "Invert polarity").

Offset … - выставление первого кадра для ручного режима работы функции InverseTelecine.

Invert polarity - инвертирует работу функции InverseTelecine. Это не приводит к преобразованию полей и относится только к математическому аппарату функции InverseTelecine. Всё дело в том, что задавая смещение функцией "Offset …", мы не знаем, в какую сторону потом пойдёт работа функции InverseTelecine (с верхнего поля или нижнего). Для того, что бы была возможность выставить все варианты работы и предназначена эта опция.
Немного ниже по списку функций находится опция "Color Depth":
[lib]Color_de.gif[/lib]

Здесь можно произвести выбор цветового формата, в котором будет работать VirtualDub. По большому счёту, VirtualDub работает только в форматах RGB, а все входящие форматы преобразует в них. Исключение составляют режимы работы "Direct stream copy" и "Fast recompress", которые не производят преобразования к RGB, но в этих режимах не будут работать фильтры и другие интересности VirtualDub. Но об этом чуть ниже.

"Decompression format" - позволяет выбрать, в каком формате будет происходить получение видео от декодера.

16-bit (HiColor/32K) - получает от декодера 16 битное видео. Первый кодер из серии Divx (DivX3) работал именно в этом цветовом формате. Если нет какого-то особого резона (например, использование DivX3 для декодирования), не стоит включать этот режим.

24-bit(TrueColor/16M) - большинство современных кодеков работает в этом цветовом формате. Он стоит по умолчанию. Конечно, можно заставить выдавать кодеки и 16-bit режиме, но это вызовет определённые искажения.
"Output format to compressor/display" - цветовой формат, в котором видео выдаётся на кодер и для просмотра.

16-bit (HiColor/32K) - в этом формате потребуется выдавать разве что для DivX3 но его использование с VirtualDub не оправданно (для него сделан NanDub).

24-bit(TrueColor/16M) - стоит по умолчанию и работает практически со всеми кодеками.

32-bit(TrueColor/16M+alpha) - почему-то автор отнёс к 32 битному изображению и канал альфа (канал прозрачности), но внутри самого VirtualDub используется RGB32 (для фильтров) и я так понимаю выдаваться будет в этом же RGB32. Из кодеков, известных мне, VP6 работает с этим форматом цветности.
Далее, в выпадающем меню "Video" идёт пункт "Compression". Это меню выбора кодека, при помощи которого будет происходить сжатие вашего видео.
[lib]Select_c.gif[/lib]

Какой кодек выбирать - ваше дело. Есть кодеки, которые широко употребляются и стали практически де-факто (DivX). Есть и другие кодеки, которые дают не худшее качество, но не получившие широкого распространения. Собственно, каждый кодек будет хорош для какой-то своей задачи. На картинке я обвёл цифры, показывающие, с какой глубиной цветности может работать кодек (для данного случая это RGB16 и RGB24). При нажатии на кнопку "Configure" появляется окошко настройки кодека. У каждого кодека оно сугубо индивидуально, поэтому дальше рассматривать я не буду. Для некоторых кодеков требуется внешнее управление битрейтом и расстановка ключевых кадров. При выборе такого кодека становятся доступны два поля:

"Use target data rate of … kilobytes/second" - Для того, что бы задействовать эту функцию нужно поставить галочку в заголовке и выставить битрейт, с которым вы собираетесь сжимать.

"Force keyframes every … frames" - здесь выставляется количество кадров, после которого будет поставлен ключевой. Функция включается в работу так же, выставлением галочки в заголовке.
Больше ничего интересного на вкладке выбора кодека нет. Перейдём на следующую функцию меню "Video".

"Select range" - позволяет выделить то видео, которые будут обрабатываться в VirtualDub. Для каждой опции есть два поля, в первом выставляется время в миллисекундах (1 секунда = 1000 миллисекунд), во втором выставляется номер кадра, а который приходится это время. Выставлять можно или время, или номер кадра, значения не имеет.
[lib]select_r.gif[/lib]

"Start offset" - начальный отступ видео. То есть, если выставить сюда какое-то значение, то обработка начнётся с этого кадра (или с этого времени).

"Length" - здесь выставляется продолжительность обрабатываемого видео.

"End offset" - отступ видео от конца. То есть, на выставленное здесь значение, видео будет укорочено с конца.

"Offset audio to maintain a/v sync" - делает отступы звука для поддержания синхронизации с видео. Действует только в том случае, если вы воспользовались каким-нибудь пунктом выделения видео.

"Cut off audio when video stream ends" - если продолжительность звука больше продолжительности видео, то оно будет обрезано с конца.

Вот мы и дошли до основных режимов работы с видео.
[lib]Video_20.gif[/lib]

В меню "Video" можно сделать выбор между 4 режимами работы, которые определяют, в каком режиме VirtualDub будет производить обработку видео.

"Direct stream copy" - при включении этого режима, VirtualDub не будет производить никаких действий с видео. То есть, мы не можем произвести никаких действий с картинкой (подрезка, наложение фильтров). Более того, даже нельзя изменить кодек, при помощи которого было сжато видео. Сразу оговорюсь, что в VirtualDub можно открыть Mpeg1 формат видео, но сохранить в этом режиме будет невозможно, это связано с тем, что VirtualDub не работает с Mpeg форматами сохранения файлов. Скажем так, VirtualDub сможет сохранить видео в этом режиме, если был открыт AVI файл. Теперь о пользе этой функции. Её смысл в том, что видео из оригинального файла переносится без каких бы то ни было изменений, но его можно переносить не полностью, а кусками. То есть, открываем видео в VirtualDub, производим все вырезки, вставки (в смысле перенос кусков видео из одного места в другое, взять из другого файла не получится), включаем режим "Direct stream copy" и сохраняем. При вырезках и вставках видео не забываем про работу с ключевыми кадрами, по которым производится вся работа (подробнее я описывал выше). Сохранение видео произойдёт очень быстро. При этом в видео не вносится никаких искажений (не производится повторного сжатия). Естественно, для просмотра видео, сохранённого таким образом, будет применяться тот же самый кодек, что и в исходном видео. Для чего же мы ещё можем применить этот режим. Например, нам нужно соединить видео со звуком (или заменить одну звуковую дорожку на другую). Для этого, в меню "Audio" открываем нужный файл со звуком, а в меню видео включаем режим "Direct stream copy". После сохранения у нас будет новый файл, в котором видео уже будет с новым звуком. Так же, в этом режиме мы можем изменить частоту кадров для видео. В работе этого режима есть одна главная особенность: при включённом режиме "Direct stream copy" в меню "Video", видео сохраняется без изменений.

"Fast recompress" - при включении этого режима, видео передаётся на кодер в том же цветовом формате, что и выдал декодер видео. Я уже говорил, что VirtualDub работает в цветовом формате RGB, но это не является панацеей. Такой формат цветности нужен только если производится обработка видеоматериала фильтрами. Если же производится только приём видео и сжатие кодеками, то нет никакого смысла переводить видео в RGB формат (так например происходит обработка материала после Avisynth). Если же переводить в RGB (а кодек потом переведёт видео ещё в какой-то свой формат), то происходит хоть и минимальная, но потеря времени, а в некоторых случаях ещё и искажения картинки. Про искажения - это частные случаи, но они иногда происходят. Рассказывать о них довольно долго, смысл их сводится к тому, что видео несколько тускнеет, если его выдавать в RGB форматах (так, например, работают DV декодеры). Итак, какие можно сделать выводы по этому режиму работы? Его нужно использовать, если вы не производите никакой обработки видео в VirtualDub, но собираетесь сжать видео каким-либо кодеком. Противопоказание этому режиму только одно - кодек, который вы применяете для сжатия видео, должен понимать тот формат цветности, в котором выдаёт декодер видео.

"Normal recompress" - в этом режиме VirtualDub будет принимать от декодера видео в RGB формате. От предыдущего режима работы его будет отличать большая всеядность кодеров. То есть, если вам попался какой-то кодек, который отказывается принимать тот входной формат видео, который выдаёт декодер, то можно переключится в этот режим работы и произвести сжатие (форматы RGB понимают практически все кодеки). От предыдущёго режима его буде отличать более медленная работа (пренебрежимо мало), и возможное наличие той проблемы с картинкой, про которую я писал.

Так же, этот режим работы можно использовать для конвертации RGB16 (если декодер выдаёт в этом формате) в RGB24 или RGB32 для последующего сжатия в кодеках не понимающих RGB16. Это будет происходить быстрее, чем использовать режим "Full processing mode". Делается это при помощи функции "Color Depth".

"Full processing mode" - этот режим работы стоит по умолчанию и позволяет включать любые настройки VirtualDub. Как я уже говорил, для работы фильтров VirtualDub нужен формат RGB32. VirtualDub производит конвертирование входного формата в RGB32 и после этого выдаёт на фильтры. Включение этого режима необходимо, когда вы собираетесь производить полную обработку видео в VirtualDub.

Перейдём теперь к последнему набору функций меню "Video".

[lib]Video_30.gif[/lib]
"Copy source frame to clipboard" - производит копирование текущего кадра в буфер. Копируется оригинальный кадр из открытого видео. После этой операции, можно вставить куда-либо этот кадр (например, в программе Photoshop вставить в изображение).

"Copy output frame to clipboard" - производит копирование текущего кадра в буфер. Но в отличии от предыдущей функции, копироваться будет не кадр источника, а кадр после обработки в VirtualDub. То есть то, что будет выдаваться кодеку на сжатие, учитывая все фильтры обработки видео, которые были вами настроены.

"Scan video stream for errors" - производит проверку источника видео на ошибки. Ошибки могут возникать при передаче AVI файла по каким-либо сетям, копировании AVI файла с плохо читаемого диска при помощи программ, предназначенных для копирования сбойных участков и других вариантов, когда возможна неверная передача информации. После выполнения проверки видео в информационной строке будет выдано количество испорченных кадров, а сами испорченные кадры будут выделены, как фрагмент.
[lib]info_bad.gif[/lib]

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

"Error mode" - производит переключение режимов сканирования на ошибки.

[lib]Error_mo.gif[/lib]
"Report all errors" - производит отслеживание всех ошибок, возможных при декодировании видео.

"Conceal errors and resume decoding at next keyframe" - при поиске ошибок в этом режиме, после нахождения ошибки, VirtualDub не будет сканировать поток дальше, а перейдёт на следующий ключевой кадр и продолжает сканирование. Смысл этой функции в том, что при нахождении ошибки в дельта кадре, следующий кадр будет выстроен из него, то есть, ошибка будет кочевать из кадра в кадр, до тех пор, пока не придёт ключевой кадр. В ключевом кадре есть вся информация для построения полного кадра. В связи с этим, кадры, попавшие между ключевым и испорченным, будут также испорчены и нет смысла их сканировать.

"Decode even if the result may be garbled" - отслеживает ошибки даже в том случае, когда результат может быть искажён. То есть, когда результат обнаружения ошибки не может быть 100%, VirtualDub будет продолжать поиск ошибок.

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

DimonVideo
2005-07-14T10:16:48Z

Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 12

Яндекс.Метрика