Фильтры изменяющие размер кадра
 
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

 

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

 

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.


BilinearResize
BilinearResize(clip,target-width,target-height)
BilinearResize(clip,source-left,source-top,source-width,source-height,target-width,target-height)

Фильтр BilinearResize масштабирует кадры входного видео к произвольному новому размеру. Передача необязательных параметров даст в результате тот же результат, как если бы к видео-клипу был применён Crop с этими аргументами до BilinearResize (только быстрее).

 

BilinearResize использует стандартную билинейную фильтрации. И практически идентичен фильтру VirtualDub "resize [precise bilinear]". Отличие в том, что фильтр VirtualDub похоже берёт не совсем верный масштабный коэффициент. В результате пиксели на верхней и правой границе обрезаются либо дублируются. Ошибка становиться заметна при увеличении вдвое или больше, но в других случаях несущественна.

 

Примеры

# Загрузить видео-файл и отмасштабировать к 240x180 (с исходного размера)
AVISource("video.avi").BilinearResize(240,180)

# Загрузить 720x480 (CCIR601) видео и отмасштабировать к 252x240 (VCD), сохраняя соотношение сторон
AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

# Извлечь верхний правый квадрант видео-клипа 320x240 и увеличить его до размеров всего кадра
BilinearResize(160,0,160,120,320,240)

BicubicResize
BicubicResize(clip,target-width,target-height[,b,c])
BicubicResize(clip,target-width,target-height,b,c,source-left,source-top,source-width,source-height)

BicubicResize аналогичен BilinearResize, не считая замены линейной фильтрации на Митчелла-Нетравали двухпараметрическую кубическую. Параметры b и c могут быть использованы для настройки свойств кривой. С b=0 и c=0.75 фильтр работает идентично фильтру VirtualDub "resize [precise bicubic]" и результат одинаков, с учётом проблемы масштабного коэффициента описанной в BilinearResize. Значения по умолчанию: b=1/3 и c=1.3 рекомендованы Митчеллом и Нетравали как дающие наиболее визуально приятные результаты для человека в субъективных тестах. Большие значения b и c дают интересные эффекты, например попробуйте b=0 и c=-5.

 

При увеличении размера кадра, BicubicResize даёт результаты выглядящие значительно лучше нежели BilinearResize. Однако при уменьшении результаты сблизятся или у BilinearResize будет даже лучше. Несмотря на то, что бикубический фильтр VirtualDub даёт изображение, которое выглядит лучше чем билинейный, это в основном за счёт подчёркивания границ бикубическим фильтром, а не результат лучшей выборки. Чёткое изображение хорошо, пока вы не попытаетесь его сжать. В этот момент они очень быстро начнут раздражать вас. BicubicResize по умолчанию не подчёркивает границ так сильно, как бикубический в VirtualDub, но все же подчёркивает сильнее чем билинейный. Если вы планируете кодировать видео с низким битрейтом, не удивляйтесь, если BilinearResize даст лучшее качество


Crop / CropBottom
Crop(clip,left,top,width,height)
CropBottom(clip,count)

Crop обрезает лишние пиксели с границ каждого кадра. Если источник имеет размер 720x480, а вы хотите уменьшить его до 352x240 для VideoCD, то следует использовать код

# Преобразовать CCIR601 в VCD, с сохранением верного соотношения сторон
ReduceBy2
Crop(4,0,352,240)
 

Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и width должны быть чётными.

 

Альтернативный фильтр CropBottom полезен для обрезания мусор снизу видео-клипа захваченного с VHS кассеты. Он убирает count линий снизу каждого кадра


AddBorders
AddBorders(clip,left,top,right,bottom)

AddBorders добавляет чёрные границы по краям изображения, которые имеют указанную ширину (в пикселях). Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и right должны быть чётными.

 

Помните, что многие алгоритмы сжатия с потерями плохо работают с одноцветными границами, если их размер не кратен размеру блока (16 пикселов для MPEG)

 

Вы можете использовать этот фильтр в комбинации с Crop для смещения изображения без изменения размера кадра. К примеру:

# Сместить 352x240 изображение на 2 пикселя вправо
Crop(0,0,350,240).AddBorders(2,0,0,0)

загрузка клипа
[загрузка клипа]
команды компактно
[команды компактно]
команды развёрнуто
[команды развёрнуто]
обработка изображения
[обработка изображения]