Видео маппинг, видео перформансы

50 кадров в секунду - миф или реальность

Содержание материала

2. Как это сделать.

Как всегда, я буду рассматривать работу с видео на базе популярной программы монтажа - VirtualDub. Рекомендую скачать последнюю версию (если у вас компьютер на базе Intel PIV, скачайте версию, оптимизированную под него)



1. Самый простой способ.
Если Вы желаете работать только со вторым методом, и у Вас видео захвачено с использованием MJPEG-кодека, все что Вам необходимо, это при открытии видеофайла в Dub'е,



выбрать дополнительно галочку "Popup extended dialog options", после этого Вы попадете в окно опций открытия файла.


Нас интересует раздел "Motion-JPEG (MJPEG) options". Вам следует выбрать один из двух вариантов "Split interlaced frames into two fields and double framerate". Какой из вариантов следует выбрать, Вы можете предположить, если знаете структуру Вашего видеопотока, или экспериментально: выберите вначале первый, стрелками вправо-влево прокрутите открывшийся фильм по кадрам: если убедитесь, что персонажи в кадре дергаются вперед-назад по ходу фильма, значит, следует выбрать другой вариант.
После открытия таким образом видеофильма, Вам остается увеличить его разрешение по вертикали в два раза, одновременно избавившись от тремора. Этим занимается фильтр SmartBob.


Вкратце о его настройках:
Threshold - основная опция фильтра, чем больше значение, тем видео считается менее интенсивным по движению в кадре. Буквально: чем больше показатель, тем больше информации будет взято из предыдущего кадра. Особый случай, когда значение составит 0 - это означает, что при создании кадра не будет взята никакая информация их предыдущего, т.е. будет сделано простое масштабирование. Автор фильтра рекомендует использовать значения 10-25, я бы порекомендовал 12 - 20 для чистого видео, 15-25 для зашумленного.
Motion Map Denoising - включается фильтр, который позволяет отличить реальное движение объекта в кадре от случайного, вызванного шумом. Рекомендую всегда включать эту опцию, однако, следует учесть, что она замедляет работу фильтра.
Show Motion Areas only - при заданных установках покажет, какие участки видео фильтр считает движущимися
Even-numbered frames (0-based) contain top fields - сообщает фильтру порядок полей. Необходимо для убирания вертикального тремора. Если после наложения фильтра картинка "прыгает вверх-вниз", измените эту опцию

Итак, после наложения SmartBob, мы получаем видео 720х576х50p, дальше работаем с ним, как с обычным прогрессивным видео, кто как привык.

2. С применением AVISynth.
Я прекрасно помню, как вначале долго не мог уговорить себя поставить "какой-то там AVISynth да еще и бета 0.3" на компьютер. Но поставил, очень быстро разобрался. Он прост в использовании, очень эффективен при фреймсервинге, устранении десинхронизации, и во многих других вещах. Итак, нужно его скачать и поставить.
После того, как мы поставили AVISynth, мы можем начать работу с видео.
Для того, чтобы как и в предыдущем случае произвести конвертацию по второго методу, создадим файл любое_имя.avs, в котором будут следующие строки:

clip=AVISource("Имя_Вашего_видеофайла.avi")
clip.SeparateFields


Теперь откроем этот файл в VirtualFub'е, добавим все тот же фильтр SmartBob и все готово.

Чтобы провести конвертацию по первому методу, нам придется потрудиться чуть больше. Создадим файл любое_имя.avs, в котором напишем:

clip=AVISource("Имя_Вашего_видеофайла.avi")
Crop(Interleave(clip.SeparateFields.SelectOdd.AddBorders(0,1,0,0),clip.SeparateFields.SelectEven.AddBorders(0,0,0,1)),0,1,-0,-0)


Чуть подробнее разберем, что же я тут написал (вообще-то к AVIsynth'у идет замечательный HELP!)
Мы открываем видеофайл (AVISource),разделяем поля (SeparateFields), затем последовательно выбираем четные (SelectEven) и нечетные поля (SelectOdd), сдвигаем одно из них вниз на пиксель (AddBorders(0,1,0,0)), к другому добавляем снизу пиксель (AddBorders(0,0,0,1)), чтобы сохранить разрешение, объединяем все это в один файл, но уже представляя поля как кадры (Interleave), и слегка обрезаем виде сверху (на один пиксель) (Crop) (Если ничего не понятно, просто скопируйте к себе в файл, замените имя файла на свое, потом разберетесь )
Теперь открываем файл в VirtualDub'е, проверяем при помощи стрелок вправо-влево, правильно ли мы учли последовательность полей. Если видео дергается, значит, необходимо переписать наш AVS-файл и открыть его заново. Всего в нашем случае может быть четыре варианта чередования полей. Один вариант я уже представил, вот еще три:

Crop(Interleave(clip.SeparateFields.SelectOdd.AddBorders(0,0,0,1),clip.SeparateFields.SelectEven.AddBorders(0,1,0,0)),0,1,-0,-0)
Crop(Interleave(clip.SeparateFields.SelectEven.AddBorders(0,1,0,0),clip.SeparateFields.SelectOdd.AddBorders(0,0,0,1)),0,1,-0,-0)
Crop(Interleave(clip.SeparateFields.SelectEven.AddBorders(0,0,0,1),clip.SeparateFields.SelectOdd.AddBorders(0,1,0,0)),0,1,-0,-0)


Мы должны найти вариант, при котором исключены как горизонтальный, так и вертикальный тремор (дрожание). Однако, бывают случаи (как правило, при оцифровке с VHS), когда вертикальный тремор убрать невозможно, либо существует лого, присутствующее на протяжении всего фильма. Тогда можно воспользоваться скриптом, написанным KPOBOCOC'ом :

function make50fps( clip c )
{
# разделим видео на поля и увеличим размер по вертикали в 2 раза
c2 = c.separatefields.bicubicresize( c.width, c.height )
# разделим видео на 2 клипа: отдельнор четные и нечетные поля
ctop = c2.SelectOdd
cbot = c2.SelectEven
# сдвинем на 1 пиксель поля (т.е. на пол-пикселя для исходного размера полей)
dtop = ctop.crop( 0, 0, ctop.width, ctop.height-1 ).bicubicresize( ctop.width, ctop.height / 2 )
dbot = cbot.crop( 0, 1, cbot.width, cbot.height-1 ).bicubicresize( cbot.width, cbot.height / 2 )
#
Interleave( dtop, dbot )

# для контроля
# bicubicresize( c.width, c.height )
}
ccc = AVISource("Имя_Вашего_видеофайла.avi")
make50fps(ccc)


Однако, следует учесть, что в этой функции производится масштабирование, как следствие слегка падает детализация.
Естественно, при пользовании данной функции необходимо также не забывать о порядке полей, при необходимости поправить функцию.
Открытое в Dub'е видео представляет собой поток с разрешение 720х288х50p. С ним можно работать также, как с любым прогрессивным потоком.

EventCatalog.ru — всё для организации мероприятий!