1 (edited by Dave_Scream 29-04-2014 09:24:33)

Topic: Скрипт размытия движения (Motion Blur) и SVP

Взял скрипт для перегона SVP 60fps -> Youtube 30fps здесь http://forum.ixbt.com/topic.cgi?id=29:34641

AVIsource("2.avi")
ConvertToYV12()

super = MSuper(rfilter=2)

backward_vectors = MAnalyse(super, isb = true, truemotion=true, search = 3, delta = 1)
forward_vectors = MAnalyse(super, isb = false, truemotion=true, search = 3, delta = 1)

forward_re = MRecalculate(super, forward_vectors, truemotion=true, blksize=16)
backward_re = MRecalculate(super, backward_vectors, truemotion=true, blksize=16)

MFlowBlur(super, backward_re, forward_re, blur=100, thSCD1=800, thSCD2=200)

ConvertFPS(Framerate*2).SelectOdd.SelectOdd
ConvertFPS(Framerate*2).SelectOdd.SelectOdd
ConvertFPS(Framerate*2).SelectOdd.SelectOdd
SelectOdd

Скрипт отрабатывает чудесно! видео выглядит плавно. Но работает очень-очень медленно - VirtualDub через AVS скрипт обрабатывает всего 3-4 кадра в секунду.

Я убрал строки переконвертирования FPS и оставил только одну строку вместо четырёх:

ConvertFPS(Framerate*2).SelectOdd.SelectOdd

Но производительность осталась почти на том же уровне.

Возможно ли как-то ускорить этот скрипт, используя более оптимизированные библиотеки SVP? или каким-то другим способом повысить производительность. Результат работы скрипта мне очень нравится, но скорость просто неприемлема sad

Вот короткий фрагмент результат
https://www.youtube.com/watch?v=6LqB5LU234M

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
Я убрал строки переконвертирования FPS и оставил только одну строку вместо четырёх

ну значит скорость ограничена кодировщиком, а не скриптом

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
VirtualDub через AVS скрипт обрабатывает всего 3-4 кадра в секунду
А если без сохранения выполнить Run video analysis pass?

Результат работы скрипта мне очень нравится, но скорость просто неприемлема
Какую скорость обработки Вы бы назвали приемлемой?

4 (edited by Dave_Scream 29-04-2014 10:46:42)

Re: Скрипт размытия движения (Motion Blur) и SVP

Chainik
ну значит скорость ограничена кодировщиком, а не скриптом

поидее не должна, ведь я использую losseless-кодеки
исходник в Lagarith (900x720 @ 60 - после SVP), а результат пишу новым супер-быстрым losseless кодеком MagYUV (и пишу на другой HDD от исходника). Немного странно, правда, что загружено на 100% только 1 ядро процессора вместо двух, но в любом случае даже если ускорить в 2 раза, 8 фпс это медленно.

MAG79
А если без сохранения выполнить Run video analysis pass?
Run video analysis показывает 2.80 FPS - то есть разницы никакой

Какую скорость обработки Вы бы назвали приемлемой?
Ну хотябы такую же как у SVP-скрипта. Он перегоняет из 30 в 60 на скорости ~27 фпс. и мне кажется, задача, которую выполняет SVP более сложная, чем просто вычислить вектор направления и применить motionblur в этом направлении (насколько я смог понять из текста скрипта).

Анализ движения и вычисление векторов ведь тоже есть в SVP, я подумал, может можно как-то переписать этот скрипт, чтобы он использовал более свежие и оптимизированные функции из svp-шных dll. Или может сам AVS скрипт написан не самым оптимальным образом.

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
По порядку обработки:

1. исходник в Lagarith (900x720 @ 60 - после SVP)
Зачем? Если затем применяется функция MFlowBlur, которая строит много промежуточных кадров и смешивает их между собой. Надо оставить исходные 30 к/сек, сложность обработки сразу снизится в 2 раза. Кроме этого отпадет необходимость в последнем вызове SelectOdd.

2. Я думаю, Вы прочитали описание функции MFlowBlur и понимаете, что blur=100 самый затратный способ получения размытия движения, интервал смаза равен одному межкадромому интервалу, т.е. 1/60 сек для 60 к/сек. Далее вызов ConvertFPS(Framerate*2).SelectOdd.SelectOdd дает смешивание двух соседних кадров, выкидывает исходные и выкидывает половину смешанных кадров. Остается 30 к/сек с интервалом смаза 1/60+1/60 = 1/30 сек. Требуется именно такое размытие движения?

3. загружено на 100% только 1 ядро процессора вместо двух
Все верно. В скрипте не указано разделение обработки на потоки для использования многоядерности процессора.

Насчет вопросов:

задача, которую выполняет SVP более сложная
та же самая, только MFlowBlur выполняет намного больше вычислений: SVP считает один-два промежуточных кадра, а MFlowBlur считает пачку таких кадров и еще и смешивает их друг с другом, чтобы получить один кадр на выходе.

может можно как-то переписать этот скрипт, чтобы он использовал более свежие и оптимизированные функции из svp-шных dll
Наверняка можно. Видеокарта ведь имеется? Вроде бы GTX260. Тогда можно еще и ее задействовать. Самостоятельно справитесь?

6 (edited by Dave_Scream 29-04-2014 13:45:13)

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79 wrote:

Надо оставить исходные 30 к/сек, сложность обработки сразу снизится в 2 раза. Кроме этого отпадет необходимость в последнем вызове SelectOdd.

Я попробовал прогнать данный скрипт по исходному видео с 30 кадрами, но получилось слишком размазано. Возможно, я не убрал последний SelectOdd, нужно делать тесты.

MAG79 wrote:

blur=100 самый затратный способ получения размытия движения, .... Требуется именно такое размытие движения?

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

MAG79 wrote:

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

Подскажите пожалуйста, как указать чтобы скрипт работал в несколько потоков? этот параметр нужно указывать где-то глобально в теле скрипта или в каждой функции? В справке к MFlowBlur не вижу параметра threads или что-то похожее. Вижу правда там bool isse, подозреваю, что это оптимизация под инструкции SSE.

MAG79 wrote:

Наверняка можно. Видеокарта ведь имеется? Вроде бы GTX260. Тогда можно еще и ее задействовать. Самостоятельно справитесь?

Верно, видеокарта у меня GTX260, хоть и старая, но она уже поддерживала вычисления.
В деле работы с видео я новичёк совсем, и тем более если говорить о скриптах для AVISynth... может быть у вас найдётся время переписать этот скрипт в более оптимизированный вариант? Я думаю, что он очень пригодился бы и не только мне.
----
UPD.
Сравнил этот скрипт со скриптом SVP на предмет замены функций на SVPшные, в скрипте SVP есть функция SVAnalyse, но параметры в ней идут совсем другие чем в MAnalyze:

SVAnalyse(super, analyse_params, src=input)
MAnalyse(super, isb = true, truemotion=true, search = 3, delta = 1)

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream

загружено на 100% только 1 ядро процессора вместо двух
У Вас разве не четырехядерный i5-3570?

в скрипте SVP есть функция SVAnalyse, но параметры в ней идут совсем другие чем в MAnalyze
Да. Параметры записываются с использованием JSON в одну текстовую строку analyse_params. Некоторые параметры изменились, некоторые добавились. Подробное описание параметров там.

как указать чтобы скрипт работал в несколько потоков?
Добавить три строки в соответствующих местах (перед функцией открытия, перед обработкой, в конце скрипта):

SetMTMode(3,[число потоков])
SetMTMode(2)
Distributor()

переписать этот скрипт в более оптимизированный вариант?
Получился скрипт svp_MotionBlur:

global svp_scheduler=true
global threads=7
global multi=4
global blendtimes=2

LoadPlugin("C:\Program Files (x86)\SVP\plugins\svpflow1.dll")
LoadPlugin("C:\Program Files (x86)\SVP\plugins\svpflow2.dll")

function BlendEveryTwoFramesIntoOne(clip src, int HowManyTimes)
{
  blend = src.ConvertFPS(src.Framerate*2).SelectOdd.SelectOdd
  return HowManyTimes<=0 ? src : BlendEveryTwoFramesIntoOne(blend, HowManyTimes-1)
}

SetMTMode(3,threads)
AVIsource("2.avi")
ConvertToYV12()
SetMTMode(2)

super_params="{gpu:1}"
analyse_params="{}"
smoothfps_params="{rate:{num:"+string(multi)+",den:1},scene:{blend:true}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
SVSmoothFps(super, vectors, smoothfps_params, mt=threads, url="www.svp-team.com")

BlendEveryTwoFramesIntoOne(blendtimes)

Distributor()

Настраивать три параметра в начале скрипта:
threads=7 - количество потоков, подробнее о выборе значения: Количество потоков
multi=4 - коэффициент повышения частоты кадров вставкой интерполированных кадров
blendtimes=2 - количество смешиваний каждых двух кадров в один
и один параметр в середине:
gpu:1 - использование GPU для построения кадров, 1 - использовать, 0 - не использовать
Для сохранения частоты кадров следить за тем, чтобы multi равнялось двойке в степени blendtimes, возможные пары это (multi:blendtimes): 4:2, 8:3, 16:4 и т.д.

На текущих настройках скрипт между двумя соседними исходными кадрами вставляет три интерполированных и смешивает эти три кадра с исходным кадром. На выходе каждый кадр видео содержит четыре положения движущихся объектов.

8 (edited by Dave_Scream 30-04-2014 06:24:56)

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79
Проверил на Virtual Dub 1.10.4 - cкрипт почему-то крэшит на 76 кадре (даже без перекодирования, чисто с виртуал даба покадрово нажимаю вперед и на 76 кадре крэш). Попытался перемотать чуть вперед (вдруг дропы в видео так влияют) - крэшит на 188 кадре. Попробовал MeGUI - его тоже крэшит, но там нельзя собрать CrashInfo. Собрал CrashInfo с Virtual Dub: http://pastebin.ru/FuNby76e

Crash context:
An out-of-bounds memory access (access violation) occurred in module 'svpflow_cpu'...

По сообщениям видно, что ошибка происходит в модуле svpflow_cpu. Скорее всего вы проверяли работу скрипта на GPU, а на CPU возможно что-то начинает идти не так. На другом видео (с видеорегистратора, а не игры) скрипт тоже крэшит.

У Вас разве не четырехядерный i5-3570?
Да, дома i5-3570+GTX260, а на работе Core2Duo E2160 и видеокарта 8600GT.

Скрипт пока проверил на работе. Т.к. ядра два - threads поставил 2 вместо 7, и выключил GPU, т.к. 8600GT не поддерживает вычислений.
Но крэшит и на разных значениях threads, и я пробовал SetMemoryMax устанавливать...  На работе установлена 32 разрядная версия Windows XP - возможно еще поэтому что-то идёт не так.

Вечером буду проверять дома.

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
threads поставил 2 вместо 7
Согласно табличке количества потоков для двухъядерного процессора без GPU-ускорения надо указывать 3.

8600GT не поддерживает вычислений
Поддерживает: Совместимость видеокарт. Установите NVIDIA-драйвер с поддержкой OpenCL. Например, 335.28

ошибка происходит в модуле svpflow_cpu
Спасибо за сообщение об ошибке.
Это хорошо, что повторяется. Ошибка однозначно в библиотеке SVP. Будем исправлять. Для этого нам надо три кадра в формате PNG или BMP: 76-ой и оба соседа слева и справа от него.

10 (edited by Dave_Scream 30-04-2014 08:58:19)

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79
Согласно табличке количества потоков для двухъядерного процессора без GPU-ускорения надо указывать 3.

Действительно, стоило мне поставить количество потоков 4 (CPU Core2Duo + видеокарта 8600GT) и крэши прекратились, всё замечательно перекодировалось (и игровое видео и видео с регистратора), на заметно более высокой скорости и я видел, что оба ядра загружены на 100% - это приятно наблюдать - значит, дома на более скоростном процессоре и 5 потоках скорость будет еще выше.

Я сразу стал сравнивать результат со старым скриптом, который работал по схеме 30 to 60 (SVP) to 30 (old MotionBlur script). Новый скрипт на 8:3 заметно уступает в качестве старому (см. два скриншота для сравнения).
На 16:4, если смотреть покадрово, я уже не вижу разницы, но в целом смотрится не так хорошо, как предыдущее сочетание SVP + MMotionBlur. Я не могу точно объяснить почему, возможно просто эффект пласебо.

Судя по всему, крэш с svpflow_cpu был связан именно с неправильной настройкой потоков - имеет ли смысл выкладывать тестовые кадры на которых происходил крэш?

В целом новый скрипт на 16:4 вполне юзабелен как по качеству, так и по скорости, старый скрипт хоть и хорош, но обрабатывать на скорости 3 фпс это слишком.  Благодарен Вам за проделанную работу!

Post's attachments

30to30svp_Blur.jpg, 57.72 kb, 900 x 720
30to30svp_Blur.jpg 57.72 kb, 636 downloads since 2014-04-30 

30to60to30 MMotionBlur.jpg, 51.94 kb, 900 x 720
30to60to30 MMotionBlur.jpg 51.94 kb, 680 downloads since 2014-04-30 

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
новое видео выглядит не так хорошо

дык да, здесь получился другой алгоритм
что бы получилось похоже, надо делать очень много шагов, не 8

MAG79
функция MFlowBlur, которая строит много промежуточных кадров и смешивает их между собой

это очень схематичное описание работы  big_smile
она это делает по векторам, грубо говоря для  вектора длиной 10 пикселей будет "построено" 10 "промежуточных кадров", для 100 - 100

12 (edited by Dave_Scream 30-04-2014 09:29:24)

Re: Скрипт размытия движения (Motion Blur) и SVP

Chainik
дык да, здесь получился другой алгоритм
что бы получилось похоже, надо делать очень много шагов, не 8

Хм. я вот изучаю новый скрипт, там используется функция SVSmoothFps, таже самая, которая используется в проекте SVP. Я не очень могу понять действия которые новы скрипт проделывает.

По идее, новый скрипт в функции SVSmoothFps увеличивает с просчетом векторов и прочим количество кадров в multi (16) раз? то есть если исходное фпс 30, то после SVSmoothFps становится уже 480 (при значении multi = 16), То есть, в новом скрипте этап перегона 30 в 60 выполняется (даже с избытком - не в 60, а в 480 фпс)?

Но тогда я не пойму зачем нужна конструкция еще раз увеличивающая 480 фпс в 2 раза в этом месте:  ConvertFPS(src.Framerate*2) - рекурсивный скрипт, выполняющийся blendtimes раз.

Стоит ли вместо конструкции ConvertFPS(Framerate*2) использовать увеличитель фпс через функцию SVSmoothFPS?

Имеет ли смысл смысл в SVSmoothFPS передать параметры для полноценного просчета промежуточных кадров, заполнив analyze_params и smoothfps_params как в скриптах SVP:

analyse_params="{block:{overlap:0},main:{search:{coarse:{type:2,distance:-6},distance:0}}}"
global smoothfps_params="{rate:{num:2,den:1},algo:13,scene:{}}"

Можете, пожалуйста, обяснить принцип работы скрипта, что он делает пошагово? По идее, логика осталась таже самая - SmoothFPS увеличивает фпс, а затем уменьшает. Правда я здесь не вижу функции MMotionBlur... Чет совсем запутался.

Re: Скрипт размытия движения (Motion Blur) и SVP

ConvertFPS изменяет частоту кадров смешиванием. Т.к. уменьшение частоты кадров неподдерживается функцией ConvertFPS, то используется трюк повысить частоту кадров вдвое, добавив между исходными резкими кадрами их смешанные копии. Затем функцией SelectOdd избавляемся от исходных кадров, затем второй инструкцией SelectOdd избавляемся от половины смешанных кадров. В итоге, если были 4 кадра A B C D, то на выходе конструкции два смешанных кадра AB CD.
В принципе строчку

src.ConvertFPS(src.Framerate*2).SelectOdd.SelectOdd

можно записать так:

src.ConvertFPS(src.Framerate*2).SelectEvery(4,1)

Может даже скорость работы повысится

14 (edited by Dave_Scream 30-04-2014 09:35:50)

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79
А имеет ли смысл вместо увеличения FPS через ConvertFPS(Framerate*2), увеличивать фпс через функцию SVSmoothFPS?
И имеет ли смысл делать это с передачей полностью заполненых analyze_params и smoothfps_params как в скриптах SVP.

Чтобы кадры не просто блендились друг с другом, а через SVSmoothFPS рассчитывались новые более полноценно рассчитанные промежуточные кадры, с использованием рассчета по векторам и разных шейдеров, как в проекте SVP.

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
короче, поставь 64 шага, будет больше похоже, если не вылетит  big_smile

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
в новом скрипте этап перегона 30 в 60 выполняется (даже с избытком - не в 60, а в 480 фпс)?
Да. Все верно.

Имеет ли смысл смысл в SVSmoothFPS передать параметры для полноценного просчета промежуточных кадров, заполнив analyze_params и smoothfps_params
Можно, конечно, поэкспериментировать, но что значит "полноценного"? Сейчас выполняется расчет со значениям параметров по-умолчанию, они сбалансированы в отношении качество/скорость. Сдвинуть это равновесие можно в сторону усложнения расчетов, что уменьшит скорость, и возможно улучшит качество. Можно улучшить качество, но для этого нужен исходник, а далее сидеть и подбирать параметры, проверяя результат покадрово. Дело в том, что для разного типа видео для получения максимального эффекта нужен свой набор параметров.
Можно повысить скорость, упростив расчеты. На качестве это может сказаться не сильно, а может и сильно. Надо менять и смотреть на результат.

имеет ли смысл вместо увеличения FPS через ConvertFPS(Framerate*2), увеличивать фпс через функцию SVSmoothFPS?
ConvertFPS это не просто увеличение частоты кадров, это СМЕШИВАНИЕ кадров. SVSmoothFPS кадры не смешивает, а честно считает промежуточные положения объектов. Поэтому ответ, нет, не имеет.

17 (edited by Dave_Scream 30-04-2014 10:03:57)

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79
Сейчас выполняется расчет со значениям параметров по-умолчанию, они сбалансированы в отношении качество/скорость.

Вон оно что, я просто посмотрел, что analyse_params вообще не заполнен, а smoothfps_params имели меньше настроек и поэтому подумал, что SVSmoothFps увеличивает число кадров не применяя свои алгоритмы поиска векторов, если всё же применяет и в наиболее сбалансированном виде, то это наоборот хорошо, т.к. важна скорость тоже.

В общем алгоритм нового скрипта такой (параметры multi=16 blendtimes=4)
FPS=30
- увеличиваем FPS видео в multi раз, используя умные алгоритмы SVP, получаем умные промежуточные кадры
FPS = 30*16 = 480

- затем blendtimes раз делается следующее:
- увеличиваем FPS но уже в 2 раза, при этом новые кадры создаются не по умному алгоритму, а просто смешиванием предыдущего и следующего кадра.
FPS = 480 * 2 = 960.
- Затем выбираются только четные кадры SelectOdd, тоесть FPS уменьшается в 2 раза
FPS = 960 / 2 = 480
- и еще раз
FPS = 480 / 2 = 240

Таким образом, прогон функции BlendEveryTwoFramesIntoOne уменьшает FPS входного потока в 2 раза (на входе 480, на выходе 240).

Пролучается, после SVSmoothFPS 16 мы имеем 30*16 = 480 фпс
1й проход BlendFrames = 240
2й проход 120
3й проход 60
4й проход 30 FPS

кажется я всё понял))))

upd.
А MFlowBlur действовала по другому алгоритму? upd. а я прочитал, да, там какой-то навороченный алгоритм вообще, используются векторы движения.. У нас тоже используются но иначе - на этапе увеличения фпс в фукнции SVSmoothFps

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
А MMotionBlur действовала по другому алгоритму?

здесь склеиваем фиксированное (маленькое) кол-во фаз движения

а там для каждой точки кадра усредняется много фаз движения - тем больше, чем дальше эта точка кадра удет в след. кадре

Re: Скрипт размытия движения (Motion Blur) и SVP

Dave_Scream
В общем алгоритм нового скрипта такой (параметры multi=16 blendtimes=4)
...
кажется я всё понял))))
Да. Все описано правильно.

Dave_Scream
крэш с svpflow_cpu был связан именно с неправильной настройкой потоков - имеет ли смысл выкладывать тестовые кадры на которых происходил крэш?
Все же я был бы благодарен за три исходных кадра и скрипт, на котором происходит ошибка в библиотеке SVP. Библиотека должна работать с любым количеством потоков, поэтому Вы нам очень поможете в улучшении стабильности SVP, если вырежете и отправите нам те три кадра и текст скрипта.

20 (edited by Dave_Scream 30-04-2014 21:46:46)

Re: Скрипт размытия движения (Motion Blur) и SVP

Кому-то может пригодится скрипт, который использует MFlowBlur для размытия движения. Его недостаток - слишком медленная работа. Для работы нужно указать threads и mblurquality

Скрипт спомощью SVP сначала увеличивает FPS исходного видео в 2 раза, чтобы сделать MFlowBlur более точным.
Затем применяет фильтр MFlowBlur
Затем возвращает FPS в исходное состояние

global svp_scheduler=true
global threads=4  # http://www.svp-team.com/wiki/Справка:Главное_меню:Количество_потоков
global multi=2
global blendtimes=1
global mblurquality=100 # 0-100 ; 100 is slowest

LoadPlugin("C:\Program Files\SVP\plugins\svpflow1.dll")
LoadPlugin("C:\Program Files\SVP\plugins\svpflow2.dll")

function BlendEveryTwoFramesIntoOne(clip src, int HowManyTimes)
{
  #blend = src.ConvertFPS(src.Framerate*2).SelectOdd.SelectOdd
  blend = src.ConvertFPS(src.Framerate*2).SelectEvery(4,1)
  return HowManyTimes<=0 ? src : BlendEveryTwoFramesIntoOne(blend, HowManyTimes-1)
}

SetMTMode(3,threads)
AVIsource("PlanetSide2_x64 2014-04-28 21-45-49-851.avi")
ConvertToYV12()
SetMTMode(2)

super_params="{gpu:1}"
analyse_params="{}"
smoothfps_params="{rate:{num:"+string(multi)+",den:1},scene:{blend:true}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
SVSmoothFps(super, vectors, smoothfps_params, mt=threads, url="www.svp-team.com")

# MFlowBlur routines
#forward_mv = SVConvert(vectors, false)
#backward_mv = SVConvert(vectors, true)
#super_mv = MSuper(pel=1, hpad=0, vpad=0) #padding should be zero here!
#MFlowBlur(super_mv, backward_mv, forward_mv, blur=100, thSCD1=800, thSCD2=200)

super = MSuper(rfilter=2)
backward_vectors = MAnalyse(super, isb = true, truemotion=true, search = 3, delta = 1)
forward_vectors = MAnalyse(super, isb = false, truemotion=true, search = 3, delta = 1)
forward_re = MRecalculate(super, forward_vectors, truemotion=true, blksize=16)
backward_re = MRecalculate(super, backward_vectors, truemotion=true, blksize=16)
MFlowBlur(super, backward_re, forward_re, blur=int(mblurquality), thSCD1=800, thSCD2=200)

BlendEveryTwoFramesIntoOne(blendtimes)

#Distributor()

Re: Скрипт размытия движения (Motion Blur) и SVP

MAG79
Это хорошо, что повторяется. Ошибка однозначно в библиотеке SVP. Будем исправлять. Для этого нам надо три кадра в формате PNG или BMP: 76-ой и оба соседа слева и справа от него.

Видео глючит на разных кадрах, как выяснилось. поэтому кидаю целиком.
http://yadi.sk/d/F3c9eRNYNkAZD
и сам скрипт (2 потока gpu 0)

global svp_scheduler=true
global threads=2
global multi=4
global blendtimes=2

LoadPlugin("C:\Program Files (x86)\SVP\Plugins\svpflow1.dll")
LoadPlugin("C:\Program Files (x86)\SVP\Plugins\svpflow2.dll")

function BlendEveryTwoFramesIntoOne(clip src, int HowManyTimes)
{
  #blend = src.ConvertFPS(src.Framerate*2).SelectOdd.SelectOdd
  blend = src.ConvertFPS(src.Framerate*2).SelectEvery(4,1)
  return HowManyTimes<=0 ? src : BlendEveryTwoFramesIntoOne(blend, HowManyTimes-1)
}

SetMTMode(3,threads)
AVIsource("PlanetSide2_x64 2014-04-28 21-45-49-851.avi")
ConvertToYV12()
SetMTMode(2)

super_params="{gpu:0}"
analyse_params="{}"
smoothfps_params="{rate:{num:"+string(multi)+",den:1},scene:{blend:true}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
SVSmoothFps(super, vectors, smoothfps_params, mt=threads, url="www.svp-team.com")

BlendEveryTwoFramesIntoOne(blendtimes)

Distributor()

22 (edited by Dave_Scream 30-04-2014 19:41:48)

Re: Скрипт размытия движения (Motion Blur) и SVP

Предыдущий скрипт, использующий более продвинутую MFlowBlur на моём i3570k + GTX260 отрабатывает на 13-14 fps, в сложных местах проседая до 2х фпс. То есть включение мультитрединга значительно повысило производительность, думаю, 3-14 фпс это не 3фпс, думаю, буду пользоваться всё-таки им.

И небольшое дополнение. Скрипт крэшился хаотично в библиотеках SVP и MVTools, в гугле нашел решение, и оно мне помогло, - убрать функцию Distributor() в конце скрипта, которая вроде собирает кадры в один при многозадачной обработке. Пишут, что VirtualDub делает это сам, и эта функция не нужна. Убрал её и больше не крэшит.

Вообще, конечно, приятно наблюдать, как мой недавно купленный "монстрик" i3570k на 4.7ггц работает на всю катушку!
http://cs617416.vk.me/v617416838/6645/SaHmTB9Z9rw.jpg