Здавалка
Главная | Обратная связь

Обработка видео: вырезание ненужных фрагментов



Введение

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

Типичные задачи, успешно решаемые с помощью "Дуба", включают в себя:

· Перекодирование видеофайлов из одного формата в другой;

· Применение фильтров (очистка от шумов, стабилизация дрожания, изменение размеров, ...);

· Резка/склейка файлов без перекодирования, замена или добавление звуковых дорожек;

· Захват видео с аналоговых источников;

· Покадровый просмотр, анализ качества изображения, сохранение отдельных кадров в файл (скриншоты);

· Пакетная обработка множества файлов.

Немаловажным плюсом является и то, что VirtualDub занимает на диске всего 1-2 мегабайта, не требует установки, распространяется свободно (текущую версию можно скачать здесь). Кстати, последнее обстоятельство привело к тому, что помимо самого VirtualDub, существует ещё ряд его модификаций (VirtualDubMod, VirtualDub-MPEG2 и т.д.), отличающихся дополнительными возможностями.

Архитектура работы

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

VirtualDub нацелен на работу прежде всего с AVI файлами. Точнее, так: на выходе мы получаем AVI файл (хотя есть возможность работы в роли т.н. фреймсервера (frameserver), аналогично утилитеAviSynth; модификация VirtualDubMod умеет дополнительно сохранять в контейнеры Matroska (MKV) и OGM), а на вход можно подавать AVI, MPG, AVS и некоторые другие типы файлов. При этом из общих соображений понятно, что AVI на входе и на выходе — это некоторая выделенная ситуация (действительно, в таком случае можно производить обработку без перекодирования — об этом ниже).

AVI файлы, как вы, наверное, знаете, содержат обычно один поток видео и 0, 1 или больше потоков звука. При этом само расширение файла не говорит практически ничего о его содержимом: AVI файл — это всего лишь контейнер, в котором могут храниться данные с различными форматами сжатия. Возможность работы с ними определяется наличием соответствующих кодеков (отдельно для видео и звука). В Windows существует две разные подсистемы работы с видеоданными — более старая Video for Windows (VfW) и более современная DirectShow (DS). И та, и другая предусматривает унифицированный интерфейс работы с любыми форматами сжатия - программа, работающая с видеофайлом, не обязана знать, как именно он закодирован — достаточно, чтобы в системе был зарегистрирован соответствующий модуль декодирования. VirtualDub и многие другие видеоредакторы используют интерфейс VfW, в то время как большинство проигрывателей — технологию DirectShow. Что это означает на практике? Может оказаться так, что какой-либо файл, который прекрасно проигрывается плеером, VirtualDub не сможет открыть, т.к. в системе есть только DS декодер данного формата, но нет VfW кодека (в Video for Windows практически всегда компрессор и декомпрессор идут вместе и называются словом кодек, в то время как в DirectShow часто бывает только декодер). Например, раньше часто можно было встретить ситуацию, когда видео с цифровой камеры miniDV на "чистой" системе проигрывалось с использованием DS декодера от Microsoft, но не открывалось в дубе — требовалось установить VfW кодек, например, от MainConcept или Canopus. (В последних версиях VirtualDub имеется встроенный декодер (но не кодировщик!) для формата DV, также как и для формата MJPG, часто используемого в аппаратных платах аналогового видеозахвата). Отметим ещё, что в противоположном случае, когда для формата сжатия есть только VfW кодек, то он автоматически будет воспроизводиться и в подсистеме DirectShow. Наконец, упомянем, что можно "подружить" дуб и с DirectShow — см.раздел про VirtualDubMod в конце статьи.

Итак, обычно работа в VirtualDub строится следующим образом: открывается видеофайл или несколько файлов, состыковываемые один за другим, с ними производятся какие-либо действия, результат сохраняют в другой AVI файл. Исходные файлы ни при каких условиях не меняются.
Настала пора обратиться к интерфейсу программы.

Интерфейс

Основную часть окна программы занимают два окна, отображающие входной и выходной (после применения фильтров) видеопотоки. (Поскольку фильтры могут менять размер изображения, то в общем случае оба окна неодинаковы по размеру; кроме того, можно вручную установить масштаб, отличный от 100%). Под ними находится линейка прокрутки с подписанными номерами кадров. В отличие от настоящих программ монтажа, в VirtualDub нет ни многодорожечного режима, ни timeline в обычном понимании — только одна полоса прокрутки. Причём если вы удалили какой-либо кусок, то он бесследно исчезает из обращения (впрочем, всегда есть кнопка Undo и команда Edit/Revert all edits, которая сбрасывает все операции с полосой прокрутки). Если вы пристыковали несколько клипов друг к другу, то полоса будет отображать их суммарную длительность. Само собой, перемещением маркера по полосе прокрутки мы добиваемся отображения нужного кадра в обоих окошках. Номер кадра и время, которое ему соответствует, показано чуть ниже, вместе с информацией о типе кадра (в квадратных скобках). Для AVI файлов K обозначает ключевой кадр (Keyframe), пусто — дельта-кадр, D — пропущенный кадр (Dropped frame, в нормальной ситуации таких быть не должно). Для Mpeg файлов исторически обозначения другие: I — ключевой кадр, P — дельта-кадр, B — двунаправленный дельта-кадр. В Avi файлах часто ключевые кадры отстоят друг от друга на несколько сотен кадров, поэтому отображение произвольного кадра потребует распаковки всех дельта-кадров от предыдущего ключевого, что может быть достаточно медленным делом. Для перемотки в файле, кроме двигания маркера мышью, служат курсорные клавиши с различными модификаторами (см. в меню Go), из которых самый полезный — нажатие Shift, позволяющее перемещаться только по ключевым кадрам (также и при движении мышью). Такое перемещение не очень точно, но зато быстро — требуется декодировать только один кадр, а не целую цепочку. Ещё отметим, что Home и End не приводят к перемещению в начало и конец клипа (для этого служат Ctrl+влево/вправо), а отмечают начало и конец фрагмента для обработки. Далее можно либо удалить отмеченный фрагмент кнопкой Del (можно сделать и что-нибудь более конструктивное, например, с помощью Ctrl+C—Ctrl+V скопировать и вставить его в другое место на линейке прокрутки Дуба, но не в другое приложение), либо же при сохранении файла будет обработана только выделенная область.

 

 

Захват видео (вариант 1)

VirtualDub запущен, переходим в режим захвата видео.

По умолчанию файл в который будет
производиться захват расположен
на диске C: и называется Capture.avi,
при необходимости это можно изменить.

 

Выбираем источник видео сигнала.

Я выбираю "Видеотюнер", тут же можно настроить яркость/контрастность/насыщенность/... , для этого необходимо выбрать закладку "Параметры устройства". Если у вас эти параметры не доступны для регулировок - в этом виноват WDM драйвер, попробуйте поставить другой (я предпочитаю драйвер от Eduardo Jose Tagle).

Выбираем формат, в который будем производить захват.

При захвате под Windows2000/XP, используя WDM драйвер - максимальное разрешение, с которым можно захватить видео программой написанной под VideoForWindows (а VirtualDub именно такой и является), равно 352x288. Правда есть небольшое исключение, о котором я узнал совсем недавно : если использовать WDM драйвер от Eduardo Jose Tagle, то даже VideoForWindows программами можно захватить видео с разрешением вплоть до 720x576. Как такое возможно - не знаю, но факт остается фактом.
И так выбираем разрешением и глубину цвета. Глубину цвета, как уже говорилось, лучше выбирать YUY2.

Выбираем формат звука и количество кадров в секунду.

Чаще всего следует выбирать следующим образом, см. ниже.

По умолчанию, звук записывается без сжатия. На всякий случай можно зайти и убедиться, что все так и есть.

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

 

Выбираем кодек для видео потока. Рекомендации по выбору и настройке кодека, можно найти в других статьях, здесь я на этом останавливаться не буду.

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

И ставим пометку, против "Блокировать видео поток к звуковому" ("Lock video stream to audio").

При желании можно подрезать неровные края. Для этого необходимо поставить галочку против "Включить" ("Enable") и зайти в "Установить границы ..." ("Set bounds ..."), что бы выставить размеры обрезаемых полей.

Выставляя поля можно сразу видеть результат - это очень удобно.

Если позволяет производительность компьютера и есть желание можно наложить фильтры.

Теперь все готово и можно переходить непосредственно к захвату видео :
Кнопка F6 - начать захват.
Esc - прервать захват.
В ходе захвата можно видеть всю необходимую статистику.

 

Захват видео (вариант 2)

Осуществляя захват аналогового видео из источников с невысоким качеством на не профессиональном оборудовании (или даже полупрофессиональном), сложно получить хорошо сжимаемый (для того, что бы занимал меньше места) и достаточно чистый сигнал (для того, что бы не рябило в глазах). Однако применяя для захвата программы позволяющие регулировать параметры входного сигнала, например, программу VirualDub написанную Avery Lee о которой будет рассказано в дальнейшем, и позволяющие применять фильтры для очистки захваченного видео от шумов можно получить достаточно (для домашнего просмотра и не только) качественный метериал.
Для сохранения видео со сжатием и без потери качества для последующей обработки рекомендую использовать кодек Microsoft Video 1 (или аналогичный) который позволяет сжимать видео с частотой в 25 кадров/сек с размером фрейма 640х480 с коэффициентом сжатия около 4-5 без выпадения кадров. Что позволяет сохранять 1 час на 15 Гбайтах. Можно воспользоваться и любым другим кодаком (например, поставляемым с драйверами устройства захвата видое), который позволяет сжимать видео без потерь и который будет успевать захватывать без пропуска (потери) кадров.
1. Запускаем программу VirtualDub, выбираем в меню "Файл - Захват AVI" ("File - Capture") и попадаем в режим захвата видео.

2. В меню Файл (File) выбираем "Файл захвата...." (Set capture file...) где и указываем имя файла и его размещение. Необходимо учитывать что для захвата 1 часа необходимо около 16 Гбайт.

3. Если у вас не NTFS, а FAT32, то это позволяет создавать файлы размером только до 4 Гбайт необходимо задать местоположение и размер нарезаемых фрагментов. Для этого открываем меню Capture и устанавливаем Enable multisegment capture. После чего выбираем Capture drives...

В окне Spill System Setup указываем диски (или папки) на которых будут размещаться фрагменты захваченного видео и устанавливаем их минимальный (меньше которого не создавать, а присоединить к предыдущему фрагменту) и максимальный (больше которого не создавать, а начинать новый фрагмент) размеры.

4. В меню Capture включаем информационную панель (Show information panel) по которой можно следить за процессом оцифровки, где: Frames captured - количество захваченных кадров; Total time - время захвата; Time left - сколько времени ещё можно цифровать, пока не закончиться место на диске; Total file size - количество записанных байт; Disk space free - оставшееся место на диске; CPU usage - загрузка процессора (на PIII-800 МГц при выше приведённых параметрах - 85%, а на Athlon 1200 МГц - 50%); далее идут параметры видеопотока - размер, средняя скорость захвата (кадров в секунду), скорость передаваемых данных, сжатие, средний размер одного кадра и самое главное - количество пропущенных кадров; а на последок параметры звукового потока.

 

5. Открываем окно настройки параметров захвата (Capture Settings... {F9}) и устанавливаем следующие параметры:

Capture audio - захватывать звук или нет; в разделе Advanced (в нижней части окна) необходимо не забыть установить Lock video stream to audio для синхронизации видео и звука.
Wait for OK to capture - позволяет более точно начать захват.
Frame rate - задать желаемую скорость захвата, в нашем случае 25 кадров в секунду; если в процессе захвата начнут выпадать кадры, то рекомендуется уменьшить это значение - тогда в дальнейшем захваченный видеопоток будет воспроизводиться более плавно.
Abort options - здесь можно изменить клавиши по которым будет происходить остановка захвата.
Раздел Advanced - в этом разделе ни чего кроме флага Lock video stream to audio можно не изменять.
6. Если необходимо, то в Stop conditions можно задать условия при выполнении которых будет прекращён захват.

7. Установим параметры захвата звука:

7.1. В меню Audio-Compression выбираем формат: PCM с атрибутами: 44,1 кГц; 16 бит; Моно (или Стерео, если Вы уверены, что исходный материал был записан со стерео звуком).

7.2. Через меню Audio-Volume meter можно установить громкость захватываемого звука.

8. Переходим к разделу меню посвящённому видео.

8.1. Во первых устанавливаем режим Просмотр с гистограммой - Preview w/ histogram {Shift-P}.
8.2. Затем выбираем источник видео - Source... {S}

 

8.2.1. Переходим к одному из ответственных этапов подготовки захвата видео - настройки параметров устройства (закладка Параметры устройства - Device Settings в только что открытом окне Источник видео - Video Source).

В общем случае доступна коррекция яркости, контраста и насыщенности цвета. Регулировка этих параметров до начала захват позволит в дальнейшем работать с более качественным материалом. Некоторые параметры, в зависимости от драйверов устройства, могут оказаться недоступными. Для удобства подстройки параметров и был включен режим предпросмотра с гистограммой (Preview w/ histogram). Рассмотрим работу этих регуляторов по очереди:
8.2.2. Яркость (Brightness).
8.2.2.1. Когда картинка слишком тёмная гистограмма смещена в левую часть.

8.2.2.2. На засвеченной картинке гистограмма смещена в право.

8.2.3. Контрастность (Contrast).
8.2.3.1. Изображение с низким контрастом - гистограмма сжата.

8.2.3.2. Высококонтрастное изображение - гистограмма как-бы пытается раздвинуть границы.

8.2.4. Оттенок (Hue) - позволяет придать изображению красный (параметр ~0) или зелёный (~10000) оттенок.
8.2.5. Насыщение (Saturation).
8.2.5.1. Низкое насыщения цвета - картинка превратилась в чёрно-белую, происходит разряжение гистограммы.

8.2.5.2. Насыщенное изображение - позволяет усилить блеклые цвета, гистограмма как-бы съёживается.

8.2.6. Чёткость (Sharpness) - достаточно сложно охарактеризовать данный регулятор, при его увеличении края гистограммы расплываются, при уменьшении - края гистограммы поджимаются.
8.2.7. Баланс белого (White balance) - позволяет убрать желтизну из белого цвета (или добавить).
8.2.8. Гамма (Gamma) - изменение гаммы позволяет придать изображению особый колорит, на практике позволит скорректировать гамму изображения передаваемого с камер с азиатцими настройками (с уходом в тёплые цвета).
8.2.9. Съёмка против света (Backlight Comp) - данный регулятор позволит частично компенсировать засветку из-за съёмки против источника света.
Варьируя данные параметры можно уменьшить шумы и улучшить качество ещё на этапе захвата видео.

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


8.3. Далее переходим к выбору своего формата захватываемого видео - Set custom format... {Shift-F}.

В этом окне необходимо выбрать размер и формат захватываемого видео. При выборе значений необходимо учитывать ограничения накладываемые на пропорции изображения кодаком, которым будет осуществлятся кодирование захваченного видео, и поддерживаемые форматы данных. Поскольку предполагается захват для дальнейшей обработки, то есть необходимо использовать кодак сжимающий без потери качества, то выбираем формат данных YUY2 (YUV 4:2:2 interleaved). Использование данного формата при кодировании позволит снизить загрузку процессора, что позволит избежать пропуска кадров. Однако мощности компьютеров растут и вы можете попробовать сделать захват с более высокими параметрами.
Выбирать размер захватываемого изображения необходимо исходя из возможностей источника и желаемого качества. Так видеоисточники бытового качества (видеоплееры/магнитофоны/камеры) выдают кадр имеющий только до 300 линий и только 4-х дорожечные видеомагнитофоны имеют - 400 линий. Поэтому установка размера по вертикали больше чем 288 линий приведёт к появлению дефекта лесенки, который будет особенно заметным в подвижных частях изображения. Учитывая, что стандарные пропорции кадра 4х3 (широкий формат 16х4 оставим для захвата видео высокого качества), то размер по горизонтали должен быть 384. Однако при таких размерах трудно удалить шум из некачественного видеоматериала. Кроме того, комфортным размером видео при просмотре на экране монитора является 512х384. Таким образом установим удвоенную ширину (768) захватываемого видео. Затем, после удаления шумов, размеры видео изменим до 512х384. Для примера на рисунке (см. выше) показано разрешение 640х480 - это наиболее удачное сочитание для просмотра на телевизоре. Возможно при хороших параметрах компьютера у вас получится сделать захват с таким разрешением и получить более качественную картинку.
8.4. Выбираем кодак - Compression... {Shift-C}

В данном окне будут перечислены только кодаки которые поддерживают выбранный на предыдущем шаге формат данных (YUY2). Выбор первого (Без сжатия) позволит сохранить захваченное видео как есть, без внесения в него каких-либо искажений. Однако под него потребуется около 16 Мбайт для хранения 1 секунды видео размером 768х288 х24бита х25кадров. Использование DivX позволит значительно с экономить место на диске (1 час хорошего качества можно уместить в 500 Мбайтах), однако использовать этот кодак для захвата имеет смысл только на очень быстрых ЭВМ (> 2ГГц) и при захвате видео хорошего качества, которое не предпологается затем обрабатывать. Для сжатия (от 3-х - 4,5 раз) без потери качества выберем кодак Microsoft Video 1 и проверим его настройки (кнопка Изменить - Configure).

Здесь можно установить качество кодируемого сигнала. При смещении движка вправо вы получите лучшее качество и соответственно больший объем файла.
Надо помнить, что чем сильнее вы сожмете сигнал, тем хуже будет изображение. Старайтесь по возможности не сжимать видео, затратьте на захват большую часть жесткого диска. После обработки видео его можно сжать и качество при этом будет намного выше, чем то которое вы бы получили от сжатого при захвате.
8.5. Обрезка краёв - Cropping

Поскольку часто оцифровываемый материал имеет краевые дефекты - несколько нижних чередующихся линий сдвинуты относительно друг друга или не содержат информации о цвете (т.е. чёрно-белые), а изображение по краям как-бы завёрнуто само на себя, то имеет смысл сразу обрезать эти края. Для этого необходимо задать обрезаемые границы: Cropping - Set bounds...

При указании отступов от краёв необходимо учитывать, что сжимающих кодак должен получать картинку со сторонами кратными некоторой величине (обычно 8, 16, 24 или 32). В противном случае возможно появление артефактов или значительное замедление работы. Поэтому рекомендуется отсекать части кратные указанным величинам. После задания границ необходимо включить отсекание: Cropping - Enable.
8.6. Замечание: в режиме захвата видео - наложение фильтров через меню Filters... {F} не работает.
9. Захват - Capture - Capture video {F6}

Когда начнётся видеофрагмент, который необходимо оцифровать, нажимаем Начать - Begin. Для завершения оцифровки просто нажмите {ESC} или другую клавишу, указанную в Capture Settings... {F9}или как на рисунке - Прервать..

 

Обработка видео: вырезание ненужных фрагментов

Допустим вы захватили с эфира какой-нибудь фильм, и пока этот фильм шел раз десять вставляли различную рекламу, теперь требуется вырезать эту рекламу. Делается это очень просто.
Открываем файл в VirtualDub.

Находим кадр с которго начинается реклама. Искать саму рекламу быстрее и удобнее всего, претаскиванием бегунка, мышиным курсором.

Реклама найдена, теперь необходимо остановиться на кадре, с которого она начинается. Для этого удобно пользоваться клавишами со стрелками на клавиатуре - преход на предыдущий/следующий кадр. Тоже самое можно делать, нажимая кнопки на экране. Для перемещения на большое количество кадров можно воспользоваться кнопками - переход по ключевым кадрам.

И так кадр с которого начинается реклама найден, нажимаем на клавиатуре кнопку "Home", таким образом мы пометили начало удаляемого фрагмента. Тем же образом ищем конец рекламы, находим последний кадр рекламы - нажимаем "End". Фрагмент выделен , что бы его удалить нажимаем "Delete". Все, фрагмент удален!
Тоже самое можно делать нажимая кнопки на экране.
Что бы изменения вступили в силу необходимо сохранить AVI файл. Различные способы сохранения мы рассмотрим дальше.

 

Обработка видео: варианты сохранения AVI

При сохранении AVI файла необходимо определиться, что вы хотите получить в итоге, и в соответствии с этим сделать некоторые настройки. Возможно сохранение следующим образом :
Переработка, сжатие, аудио и видео потоков.
Переработка, сжатие, только видео потока - звук остается неизменным.
Переработка, сжатие, только аудио потока - видео остается неизменным.
Выставляем настройки для видео потока.
Если требуется сжать заново видео поток, возможно более компактным кодеком. Или обработать поток фильтрами, а затем так же его сжать - необходимо выбирать Режим полной обработки - "Full processing mode".

Для звука все аналогично.
Выбрав Режим полной обработки - "Full processing mode", убедитесь что, верно, выставлен и настроен аудио кодек.

Когда все настроено - сохраняем AVI.

Еще несколько моментов.
Можно сохранить видео совсем без звука. Для этого, соответственно, необходимо выбрать:

Можно и на оборот, сохранить только звук (в WAV файл). Это может понадобиться, например, для обработки его в более продвинутом аудио редакторе. Мне приходилось вытаскивать, таким образом, звук, что бы обработает его фильтрами в CoolEdit.
Для этого, не требуется делать каких то специфических настроек. Просто открываем AVI файл в VirtualDub и сразу:

Что бы присоединить звук обратно к видео, делаем так: AVI файл должен быть уже открыт в VirtualDub, выбираем файл со звуком:

Теперь, если неободимо, просто сохранить все как есть, без всякой обработки - выбираем для видео и аудио потоков - Прямое копирование потока - "Direct stream copy" и сохраняем AVI.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.