Vapoursynth первое знакомство

Vapoursynth представляет собой мощнейший инструмент при обработке видео. Все манипуляции с видеофайлом осуществляются через скрипты (набор команд записанных в один файл). Поэтому Vapoursynth можно назвать видеоредактором, основанным на скриптах. Скрипты пишутся на Python. По сути, Vapoursynth скрипты можно назвать фильтрами (фильтры цветокоррекции, шумопонижения, резкости и так далее). На основе простых можно создавать комбинации сложных скриптов. В сети можно найти множество фильтров/скриптов и использовать их в своем проекте.

Есть мнение, что Vapoursynth произошел от Avisynth — программы легенды, которая вот уже долгое время используется видеолюбителями для обработки остнятых материалов. Но Vapoursynth имеет 3 неоспоримых преимущества перед Avisynth:

  1. В отличие от Avisynth, который использует для скриптинга свой язык, Vapoursynth взял за основу Python и это очень удобно;
  2. Поддержка многопоточности. Vapoursynth сразу проектировался для работы в многопроцессорных системах;
  3. Поддержка Linux. Это самая главная фишка. Vapoursynth работает и в Linux и в Windows (Avisynth только в Windows).

Vapoursynth является свободнораспространяемой программой и у него широкое community. На форумах можно найти ответы по всем интересующим вопросам.


Установка

Установка Vapoursynth в Ubuntu происходит по классической схеме:

sudo add-apt-repository ppa:djcj/vapoursynth
sudo apt-get update
sudo apt-get install vapoursynth vapoursynth-editor

Инструкции по установке для других дистрибутивов Linux и для Windows приведены на сайте разработчика.

Быстрый старт

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

Напишем Python скриптик blank_screen.vpy:

import vapoursynth as vs
core = vs.get_core()
input_clip = core.std.BlankClip(format=vs.YUV420P8, length=1000, color=[128, 190, 128])
input_clip.set_output()

Запустим трансляцию:

vspipe --y4m blank_screen.pvy - | ffplay -i pipe:

Если на экране появится картинка:

vapoursynth blank screen

значит установка прошла успешно.

Как это работает

Принцип работы Vapoursynth сильно отличается от других программ обработки видео. Здесь нет графического интерфейса, нет видео и звуковых дорожек. Для работы не нужна мышка 🙂 Даже графический менеджер не нужен (Windows Desktop, KDE, Gnome для Linux и другие). Можно даже обойтись без дорогой видеокарты, что делает привлекательным использование Vapoursynth в контейнерах или на кластерах.

Vapoursynth работает незаметно. В фоновом режиме он обрабатывает ваше видео, в соотвествие с командами записанными в Python скрипте (изменяет яркость и цвет, чистит от шума и добавляет резкости и многое другое). А затем обработанное видео Vapoursynth отдает. Кому отдает? Да той программе, которой это нужно. Это может быть media player или кодировщик видео или видеоредактор.

Все, что вам нужно сделать — это открыть текстовый редактор, создать Python script и записать туда несколько команд. Vapoursynth откроет этот файл и четко выполнит все команды из него, тем самым изменив видеопоток.

Дополнительные фильтры

Являясь наследником Avisyntha Vapoursynth «захватил» с собой багаж фильтров и плагинов, созданный за долгие года разработчиками Avisynth. Часть плагинов была доступна в исходном виде и ее быстренько адаптировали на новую платформу. Для ависинтовских плагинов в виде dll есть возможность их загрузки непосредственно в Vapoursynth.
Большую коллекцию плагинов можно установить из следующего архива:

sudo add-apt-repository ppa:djcj/vapoursynth
sudo apt-get update
sudo apt-get install vapoursynth-extra-plugins

Примеры использования Vapoursynth

На простых примерах рассмотрим работу Vapoursynth’а.

Histogram

Используйте следующий скрипт для того чтобы во время просмотра фильма можно было оценить гистограмму в каждом канале (Y, U, V):

import vapoursynth as vs
core = vs.get_core()
src = core.ffms2.Source(source='scubadiving.mp4')
src = core.hist.Levels(src)
src.set_output()

vapoursynth histogram

Levels

Для манипуляции с уровнем яркости пикселей только в одной плоскости (например, яркостной Y) запустим скрипт:

import vapoursynth as vs
core = vs.get_core()
src = core.ffms2.Source(source='scubadiving.mp4')
levels = core.std.Levels(src, min_in=0, max_in=255, min_out=64, max_out=255, planes=[0])
levels.set_output()

vapoursynth levels

Разложить видео на слои

Для оценки исходного видео во всех 3-х яркостно-цветовых плоскастях:

import vapoursynth as vs
core = vs.get_core()
src = core.ffms2.Source(source='scubadiving.mp4')
resized = core.resize.Bicubic(clip=src,width=640, height=360)
clip_Y = core.std.ShufflePlanes(clips=resized, planes=[0, 0, 0], colorfamily=vs.YUV)
clip_U = core.std.ShufflePlanes(clips=src, planes=[1, 1, 1], colorfamily=vs.YUV)
clip_V = core.std.ShufflePlanes(clips=src, planes=[2, 2, 2], colorfamily=vs.YUV)
decomposed = core.std.StackVertical([clip_Y,clip_U,clip_V])
decomposed.set_output()

vapoursynth video decompose to layers

Заключение

Для тех кто никогда не использовал скрипты при работе с видео Vapoursynth может показаться чем-то экзотическим и непонятным. Ну сами подумайте, зачем для того, чтобы добавить яркости или подкорректировать цвет нужно писать скрипт на Python? Ведь в том же Sony Vegas это делается за пару кликов мышкой.
Но в том и дело, что основным преимуществом vapoursynth перед другими программами обработки видео являются скрипты. Использую скрипты вы получаете доступ ко всему видео, к каждому его кадру и к каждому пикселу этого кадра. Вы сможете манипулировать цветовыми слоями каждого кадра и накладывать разные фильтры на каждый слой.
Мало того, имея набор из нескольких скриптов (фильтров), вы сможете создать один супер-фильтр, который содержит в себе комбинацию исходных фильтров, но с различными весовыми коэффициентами.
В практических целях Vapoursynth часто используют для:

  1. восстановления старых видеозаписей;
  2. в астросъемке;
  3. для перевода в 60fps

В первых двух случаях нужно обработать видео большим набором различных фильтров. А в случае 60fps Vapoursynth подгружает «тяжелую артиллерию» — плагины оценки движения в кадре и создания кадра по двум соседним.

В качестве реального примера работы Vapoursynth можете посмотреть следующее видео:

Cycles noise reduction with VapourSynth from brothermechanic on Vimeo.