konstanitinqq
получились довольно разные показатели производительности видеокарты, но как их правильно интерпретировать?
Описание результатов тестов

konstanitinqq

60 fps - [SVP] good:            0.81x (48.8 fps)

Увы, в реальном времени 720p с оптимальными настройками good не потянет.

галочка аппаратного ускорения неактивна
Это по причине отсутствия поддержки OpenCL в установленных драйверах. Нужны драйвера с поддержкой OpenCL.

konstanitinqq
Еще если у Вас дефрагментация включится во время просмотра фильма или торрент работает, то тормоза обеспечены, SVP-индекс обязан просто упасть ниже единицы wink

konstanitinqq
1. Вам критично использовать дрова 305 и 306? Просто для двух-трехлетних видеокарт nVidia быстрее работают драйвера 275 или даже 258 (сравнение)
2. Ваша система в состоянии качественно повышать плавность только для 720p (для разрешения HD подтест good=77.4). FHD уже не тянет.

%username%
Нужны два соседних оригинальных кадра, между которыми получается представленный выше результат.
Тогда можно будет посоветовать что-то конкретное, ну или как минимум, это нам пригодится для развития SVP и улучшения качества в будущем wink

Хотя вручную это конечно все исправляется.

http://www.svp-team.com/forum/misc.php?item=1826

Я убрал четные кадры и заменил их интерполированными. Т.е. я удалил половину фаз движений фона, пожертвовал ими, чтобы интерполировать движения персонажа.
Проблема в том, что человек может выделить глазами персонаж из кадра и решить есть движение персонажа в кадре или нет. Компьютер не может это сделать так же легко как человек. Поэтому повышение плавности для аниме в динамике пока даже не планируется добавлять в SVP.

vivan
Спасибо за 60 фпсную амв'шку de:light от аггрессора.
Поизучаю, может почерпну оттуда идею как улучшить автоматическое повышение плавности для аниме.

konstanitinqq
В подтверждение слов vivan'а вот один из сложных примеров для повышения плавности: панорамирование в аниме.
Движения фона есть в каждом кадре, а движение персонажа прорисовано только через кадр.

http://www.svp-team.com/forum/misc.php?item=1825

В предлагаемом мульте From Up On Poppy Hill встречается прорисовка персонажей через кадр и через два кадра. Это соответствует частоте кадров 12 к/сек и 8 к/сек (как правильно заметил vivan).
На статике движения восстановить возможно, на динамике (как на анимации выше) - это непростая и пока нерешаемая задача.

konstanitinqq
Что если сохранять этот результат как я уже писал, во время просмотра, чтобы проигрыватель не взаимодействовал напрямую с SVP, а читал создающийся файл (кэш) уже готовый к воспроизведению на подобии youtubeской системы ?
Повторюсь: кэш уже используется. И не один, а несколько.
http://www.svp-team.com/forum/misc.php?item=1823 http://www.svp-team.com/forum/misc.php?item=1824 http://www.svp-team.com/forum/misc.php?item=1822
+ внутренние кэши Avisynth

Предлагаемый "youtubeский" кэш принципиально ничем не лучше. Вы CrystalPlayer пробовали? Там кэширование реализовано именно так, как в YouTube при нехватке скорости канала.

konstanitinqq
1. Конфигурация Вашего железа? Прошу заполнить профиль.
2. Описать характер Ваших подергиваний.
3. Показать результат утилиты dcp_lat (без SVP и с SVP).
4. Привести допинфо, взятое во время проигрывания фильма с подергиваниями. По меню SVP в трее: Показать - Дополнительную информацию

konstanitinqq
Дело в том, что мы стремимся создать продукт, который не зависает и не тормозит. Это наше направление.
А такие опасные настройки тянут продукт в обратную сторону - к нестабильности и тормозам. Поэтому тут нужен баланс. Этот баланс надо найти.

не трудно сделать так, чтобы при запуске воспроизведения создавался кэш на диске (и\или в ОЗУ)
Он уже создается. В оперативной памяти. Как минимум в трех местах: на входе в ffdShow, на выходе из Avisynth, на очереди к отрисовке в отрисовщике.
Чем эти кэши не устраивают?

я уверен что это повысит производительность и качество работы SVP
Тут тоже есть баланс. Недостаточный размер кэша - подтормаживания при ожиданиях, Избыточный - потеря на выделении и очистке кэша. В данном случае баланс уже найден и отлажен. В этом месте производительность уже не повысишь.

%username%
а если перекодировать?
Тогда не отключать. Именно эти моменты и надо учесть. Проверить и отладить их работу.

konstanitinqq
внести эти изменения в будущую версию
В планах имеется добавить (а точней вернуть) алгоритм "Замена выпавших кадров". Скорее всего сделаем переключатель что восстанавливать: одиночные кадры или еще и пары выпавших кадров. Второе ощутимо трудозатратней. Больше вычислительная сложность и потребление памяти.

Настройка эта очень рискованная, т.к. может на FullHD заклинить любой современный разогнанный до небес процессор. Поэтому и была исключена из стабильных версий SVP. Для ее возвращения нужно сделать дополнительные оптимизации алгоритма, отладить их и самое главное добавить защиту "от дурака", чтобы алгоритм отключался на разршениях, которые процессору не по зубам.

konstanitinqq
Скачайте... From Up On Poppy Hill (2011)
С каким разрешением? Какой релиз? Где ссылка?
Этот подойдет?

Буфер кадров в оперативной памяти имеется, см. скрытую настройку ExBuffAheadAdd.
Есть вариант использовать CrystalPlayer и включить там буферизацию. Он умеет буферизировать до 300 кадров. Это 5 секунд на частоте 60 к/сек. Но смотреть все-равно не приятно: частые остановки для буферизации.

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

Насчет движений в аниме (именно этот файл я еще не смотрел), вероятно они прорисованы не в каждом кадре, а через кадр или через два.
Тогда такие кадры можно предварительно обрабатывать как дропы, восстанавливая (додумывая) движения на кадрах, где оно не было прорисовано.
Подробнее см. Замена выпавших кадров (drop'ов) и SVP

vxu
Try this method:

In SVP tray menu choose: Information - Last used AVS script.
Notepad will be opened with text like this:

svp_scheduler=true
SetMemoryMax(1024)

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

threads=5
SetMTMode(3,threads)
ffdShow_source()
assert(width==640 && height==480,"Frame size "+string(width)+"x"+string(height)+" instead of 640x480")
SetMTMode(2)

super_params="{scale:{up:2},gpu:0,rc:true}"
analyse_params="{block:{w:8,h:8},main:{search:{coarse:{distance:-10},bad:{sad:2000}}}}"
smoothfps_params="{rate:{num:2,den:1},algo:13,scene:{}}"

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

Add command SelectEvery(2,0) and double num like this:

svp_scheduler=true
SetMemoryMax(1024)

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

threads=5
SetMTMode(3,threads)
ffdShow_source()
assert(width==640 && height==480,"Frame size "+string(width)+"x"+string(height)+" instead of 640x480")
SetMTMode(2)
SelectEvery(2,0)
super_params="{scale:{up:2},gpu:0,rc:true}"
analyse_params="{block:{w:8,h:8},main:{search:{coarse:{distance:-10},bad:{sad:2000}}}}"
smoothfps_params="{rate:{num:4,den:1},algo:13,scene:{}}"

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

Close and save, rewind in player.

This method needs you to change script every time you open video.

Noweol
yartat
Точно. Спасибо. А я уж думал, что это мои локальные проблемы.
Ждите исправленную версию SVPtube. wink

Еще немного поработал над задачей замены выпавших кадров.

Меня не устраивала необходимость настройки скрипта под материал (варьирование значением MaxDifInDoubleFrames = 0.2). При низких значениях алгоритм пропускал дропы, а при высоком ошибочно назначал дропами кадры с медленным движением. Причем параметр приходилось настраивать не только для клипа, а даже для отдельных его сцен. Это жутко неудобно.
Поэтому я доработал скрипт. Добавил адаптивности и убрал переменную MaxDifInDoubleFrames. Теперь скрипт сам автоматически подбирает порог в зависимости от динамичности сцены. Кроме этого провел оптимизацию скорости расчетов. Вот вторая версия DoubleDropFix_v2.avs:

DSS2("l2 2011-04-30 23-03-23-38.mp4").ConvertToYV12()
crop(600,300,640,480)
sc=MSuper(pel=1)
vf=MAnalyse(sc,isb=false)
vb=MAnalyse(sc,isb=true)
global frame_50 = MFlowInter(sc,vb,vf,time=50).SubTitle("Fix-50", size=12, align=3)
global frame_33 = MFlowInter(sc,vb,vf,time=33).SubTitle("Fix-33", size=12, align=3).trim(1,0)
global frame_66 = MFlowInter(sc,vb,vf,time=66).SubTitle("Fix-66", size=12, align=3)
global frame_src = last
global mini=sc.crop(8,height+8*3,width/2,height/2).TemporalSoften(1, 1, 0, scenechange=1, mode=2)
last.scriptclip("dif=mini.ydifferencefromprevious()
\ dif_next1=mini.trim(1,0).ydifferencefromprevious()
\ dif_next2=mini.trim(2,0).ydifferencefromprevious()
\ dif_prev1=(mini.trim(1,1)+mini).ydifferencefromprevious()
\ dif_prev2=(mini.trim(1,2)+mini).ydifferencefromprevious()
\ dif_nextMax=max(max(dif,dif_next1,dif_next2)/8,0.01)
\ dif_prevMax=max(max(dif,dif_prev1,dif_prev2)/8,0.01)
\ dif>min(dif_prevMax,dif_nextMax)
\ ? frame_src
\ : dif_next1>dif_nextMax
\   ? dif_prev1>dif_prevMax
\     ? frame_50
\     : dif_prev2>dif_prevMax
\       ? frame_66
\       : frame_src
\   : dif_next2>dif_nextMax
\     ? dif_prev1>dif_prevMax
\       ? frame_33
\       : frame_src
\     : frame_src")

Результат вышел близкий по размеру к предыдущему клипу. Превью 640x480: http://yadi.sk/d/zeHOQlQYtvA2 (43,7 МБ)
Надежность определения дропов значительно возросла и составляет по субъективным ощущениям выше 99%.
Предлагаю сравнить оба ролика на предмет восстановленной плавности движений.

Для удобства сравнения выложил таким же образом кадрированный до 640x480 исходный клип, чтобы можно было сравнить покадрово и не качать весь исходник.
Брать тут: http://yadi.sk/d/YQ_e5-Retyak (38,9 МБ)

%username%
Можно такую феньку в SVP 3.1.3?
Почему бы и нет wink Все будет зависеть от того, как на многоядерных процессорах FullHD в реалтайме будет вытягивать и за ограничение памяти вылезать.

антиалиасинг побочный эффект?
Сила эффекта настраивается. Но в общем случае почти всегда интерполированные кадры чуть размыты по сравнению с исходными. Разумеется не везде, а только в областях, где есть движение.

4,418

(2 replies, posted in Using SVP)

berryracer
1. Can you show screenshot of your SVP Performance graphs window while message appear?
2. And write message text?

4,419

(6 replies, posted in Using SVP)

THX-UltraII
Usually sports and TV shows are broadcasted at 25i (PAL) and 30i (NTSC). Maybe your projector can deinterlace and interpolate 25i to 60p?

4,420

(6 replies, posted in Using SVP)

THX-UltraII
why does JVC (and Sony and others) say that FI mode works best for sports/tv then?
I don't know why they do that roll

This IS 59 material isn t it?
Usually it is right.

4,421

(6 replies, posted in Using SVP)

I think no.

But what is the strange framerate 59.02? hmm

tipsydead
Интересная задачка с заменой выпавших кадров.
Специально для предоставленного клипа расширил скрипт, который теперь заменяет не только одинарные выпавшие кадры, но и группы по два выпавших кадра подряд.
Получился скрипт DoubleDropFix.avs:

DSS2("l2 2011-04-30 23-03-23-38.mp4").ConvertToYV12()
crop(600,300,640,480)
sc=MSuper(pel=1)
vf=MAnalyse(sc,isb=false)
vb=MAnalyse(sc,isb=true)
vf2=MAnalyse(sc,isb=false,delta=2)
vb2=MAnalyse(sc,isb=true,delta=2)
global frame_50 = MFlowInter(sc,vb,vf,time=50).SubTitle("Fix-50", size=12, align=3)
global frame_33 = MFlowInter(sc,vb2,vf2,time=33).SubTitle("Fix-33", size=12, align=3)
global frame_66 = MFlowInter(sc,vb2,vf2,time=66).SubTitle("Fix-66", size=12, align=3)
frame_66=frame_66.trim(1,1) + frame_66 
global frame_src = last
global MaxDifInDoubleFrames = 0.2
last.scriptclip("
\ ydifferencefromprevious()>MaxDifInDoubleFrames
\ ? frame_src
\ : trim(1,0).ydifferencefromprevious()>MaxDifInDoubleFrames
\   ? (trim(1,1)+last).ydifferencefromprevious()>MaxDifInDoubleFrames
\     ? frame_50
\     : (trim(1,2)+last).ydifferencefromprevious()>MaxDifInDoubleFrames
\       ? frame_66
\       : frame_src
\   : trim(2,0).ydifferencefromprevious()>MaxDifInDoubleFrames
\     ? (trim(1,1)+last).ydifferencefromprevious()>MaxDifInDoubleFrames
\       ? frame_33
\       : frame_src
\     : frame_src")

Скрипт все еще использует библиотеку MVTools2, переделать на библиотеки SVP не сложно, но нужно время на эксперименты.

Предпросмотр результата (взят фрагмент 640x480 из середины клипа): http://yadi.sk/d/ITKMF7RJsl4a (43,5 МБ)

А вот так выглядит замена парных выпавших кадров (дропов):

http://www.svp-team.com/forum/misc.php?item=1809

Восстановленные кадры в парах подписываются "Fix-33" и "Fix-66" (одиночные - "Fix-50") согласно относительному межкадровому расстоянию в процентах.

tipsydead
что-нибудь посоветовать почитать, чтобы лучше понимать во всей этой теме с видео на ПК
Конечно. Наглядно и понятно про видео излагает Видеогруппа MSU: Презентации видеогруппы
---
Начать можно с лекций по методам обработки и сжатия видео (выложены тоже в виде презентаций).

tipsydead
почему интересно madVR лучше работает в полноэкранном режиме, когда не "windowed", а "exclusive mode"?
Ну так он и предназначен для лучшей синхронизации, этот режим "exclusive mode". Коротко на пальцах: отрисовка экрана отдается монопольно одному процессу (плееру), все остальные процессы включая проводник и рабочий стол лишаются возможности выводить что-то на экран. Это дает плееру возможность точней сонхронизироваться с синхро-сигналами экрана.

когда файл проигрывается на MPC в оконном режиме Fraps показывает 30 fps, которые проседают до 12-14 fps
если проигрывать на Windows media player'е в том же оконном режиме Fraps  уже показывает неизменные 60fps
Именно потому что отрисовка всех кадров идет на виртуальную поверхность рабочего стола, а уже оттуда собираясь и накладываясь от всех приложений попадает на экран. Каждое приложение рисует на рабочем столе со своей частотой, а рабочий стол старается отрисовываться на экране с частотой обновления экрана. Отсюда 60 fps.

друго видео нет. С этим как я понял манипуляции по "улучшению" бесполезны?
Почему же? Тот же DropFix использовать. Или, что лучше, обновить DropFix и переписать на библиотеках SVP.

travolter
write a setmtmode(x,x) line
Only one parameter will be accepted. You may write a setmtmode([mode]) line wink