Фильтры изменяющие размер кадра |
|
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)
|
|
|
|