smart
Жаль что информации о них на самом деле так мало
Ветка на iXBT в трех частях - это "мало"? hmm

что, если кадры не в png а скажем bmp. Это меняет способ обработки?
Нет, скрипт остается прежний, меняется только расширение.

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

left=ImageSource("left.bmp",end=0)
right=ImageSource("right.bmp",end=0)
left+right
...

Надо ли что-то менять в скрипте в случае изменений в разрешении исходных кадров?
Да. Если разрешение в пределах FullHD - убрать строку BicubicResize, если больше - то проверять, хватит ли памяти и менять цифры в BicubicResize для уменьшения разрешения картинки с целью экономии используемой памяти.

totalz
Yes, single display works, or primary display in dual.  Or MadVR exclusive mode for second display in dual.
Good cool

Do you mean the "windowed overly" in MadVR for 'overlay mixer'?
No. Overlay Mixer Filter.
I do not recommend to enable "windowed overly" in MadVR. hmm

Would like to try EVR custom presenter but don't want to use MPC-HC, anyway to use it with KMP?
Select EVR in KMP. What the problem? wink

But for times, there are blurry artifacts around moving objects, how do I correct those?
It is lack of technology. You can reduce it but you can not remove it completely. We can discuss it separately. It is off-topic here.

Kanade
I'm getting error message as shown...

SVP performance is too low.
Try to lower the profile settings. (SVP Index=0.81x)

Thank you. It was error of SVP-Index calculation. It is fixed.
Just exit SVP Manager, unpack fix to "Program Files\SVP 3.1" folder and run SVP Manager again.

Inok
Ищите проблему в своей системе. Ни у кого кроме Вас видеодрайвер не слетает.
Если приведете конфигурацию Вашего компьютера полностью и перечислите специальное ПО, установленное на нем, то это повысит шансы решить проблему совместными усилиями wink

smart
на сайте с описанием MSU_FRC есть сравнение с другими алгоритмами, но вашего там нет.
Плагин MVTools уже в 2007-м году был серьезным противником MSU_FRC. У меня два варианта, почему MVTools нет в том сравнении: либо авторы про него не знали, либо специально не стали включать, т.к. на его фоне MSU_FRC смотрелся бы не так выигрышно.
Вот мой комментарий 2007 года насчет сравнения качества MVTools и MSU_FRC:

Качество при тестировании стояло на втором месте (все-таки проверялась именно производительность), но сейчас, попробовав еще и MVFlowFps из пакета MVTools, я заметил разницу не только в производительности, но и в получаемом качестве. Например, регулярные структуры (решетки на окнах) лучше выглядят у FRC (перемещаются плавнее), а вот «эффект гало» на границах движущихся объектов менее заметен у MVFlowFps.

MVTools в сравнении с MSU_FRC, CrystalPlayer'ом и TrimensionDNM показывал в 2008 году такие результаты:
http://www.svp-team.com/forum/misc.php?item=2480

У меня, к сожалению, мало опыта по использованию скриптов.
Рекомендую начать со статьи Основы использования утилиты AviSynth при обработке видео

Не могли бы вы чуть более пошагово обьяснить порядок действий для такого результата как вы привели.
1. Установить пакет SVP (оттуда потребуется avisynth и плагины SVPFlow)
2. Скопировать файлы из SVP\Plugins\ в AviSynth 2.5\plugins\
3. Установить редактор AvsP или AvsPmod (русское описание)
4. Набрать скрипт в редакторе, сохранить, положить в эту же папку файл 01.png, выполнить скрипт, посмотреть результат
5. Сохранить кадры из редактора как отдельные файлы

---
Для наглядности результата из набора картинок я создал анимированный GIF. Это делается, например, в PhotoShop'е.

Как бы выглядел скрипт для исходных двух отдельных кадров, произвольного размера?
Сильно зависит от того, какой смысл вкладывается во фразу "двух отдельных кадров".
Дайте технические данные этих двух отдельных кадров.
формат исходного файла: картинка (BMP, JPG, PNG) или видео (AVI, MKV, MP4).
стерео-формат: оба ракурса на одной картинке (стереопара) или отдельный файл для каждого ракурса.

totalz
Disable LCD from Desktop - Resolution menu. Stay one Plasma.
Try smoothness again.
For test purposes. If it works then you can do some experiments with primary/secondary displays.
Or use standard windows 7 shortcut Win-P to select plasma alone while view video.

I know only three true stutters free video modes:
- madVR exclusive fullscreen mode
- EVR custom presenter D3D fullscreen mode
- Overlay mixer wink

totalz
Your spec is good enough to smooth video play. Just you need to tune it.

How many displays connected to your PC?

3,433

(5 replies, posted in Using SVP)

totalz
Any you want.
SVP does motion interpolation.
madVR's smooth motion does frame blending.

I don't use madVR's smooth motion because I not need in frame blending. I use SVP + ReClock. This combination gives me framerate synchronized to refreshrate of my monitor. With perfect sharpness.

smart
MSU Stereo to Multiview... MSU_FRC... в чем разница?
Первый продукт публично недоступен, второй - доступен. По описанию MSU Stereo to Multiview карты глубины не используются, другие технические детали не раскрыты. Можно предположить, что это близкие по существу продукты. В любом случае нам доступен только MSU_FRC 2007-го года.

Утверждают что их алгоритм наиболее качествененн
Где они это утверждают? не нашел.

SVP можно сравнивать с их результатами?
Если разговор про MSU_FRC - то можно, уже сравнивалось ранее. Библиотека MSU_FRC перестала развиваться и безнадежно отстала от библиотеки MVTools, которая переросла в набор библиотек SVPFlow и развивается до сих пор в рамках проекта SVP.

Как с помощью SVP создать из двух кадров стереопары, некоторое количество промежуточных кадров, по возможности наилучшего качества?
Написать avs-скрипт с использованием SVPFlow и сохранить результат отдельными картинками, например, при помощи AvsP.

Пример скрипта:

ImageSource("01.png",end=0)
left=Crop(0, 0, -0, -540)
right=Crop(0, 540, -0, -0)
left+right
BicubicResize(960,540).Crop(1,1,-1,-1)ConvertToYV12
super=SVSuper("{gpu:1}")
vectors=SVAnalyse(super, "{}")
SVSmoothFps(super, vectors, "{rate:{num:10}}", url="www.svp-team.com")

Пример результата:

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

Использовался 6-й скриншот из этой раздачи Аватара (Вертикальная анаморфная стереопара)

gilbertroyalva

Error: File can't be deleted
C:\Users\GilbertRoyAlva\AppData\Roaming\SVP 3.1\Logs\WSFError.txt

This error can be if you have "aggressive" antivirus software installed on your system. It blocks this file. Try to add folder C:\Users\GilbertRoyAlva\AppData\Roaming\SVP 3.1\Logs\ to exception list of your AV software.

Kanade
1. via SVP only:

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

2. Intepolating via SVP & blending via madVR:
- in SVP select frame doubling: Double click on icon ehan playing - Target frame rate: Double source frame rate - OK;
- in madVR enable smooth motion: rendering - smooth motion - enable - OK

is there anything else I can try to remove the dragonfly artifacts completely?
You can try to change any settings. All main settings I told you before. You can reduce visibility of artifacts but it is impossible to remove this kind of artifatcs completely.

DAAO
Что за сторонняя прога?

himspb
Поздравляю. Было обычное несовпадение частот, которое давало накапливающуюся регулярную ошибку, приводившую к повтору кадра каждые 15 сек.

Размер экрана и частота обновления: 1920x1080 pixels, 60.005 Hz
Результирующая частота видеокадров: 59.94 fps
Повтор 1 кадра каждые 15 сек (без ReClock)

ReClock дотягивает частоту кадров до точного совпадения с частотой обновления экрана, тем самым исключая эту регулярную ошибку.

himspb
Такое вполне может быть, если не используется ReClock.
Что пишет madVR в статистике по Crl-J?
Интересует точная частота экрана и строчка про регулярный пропуск или повторение кадра. Можно скриншотом.
Эта же информация есть в SVP - показать - дополнительную информацию.

Добавлю объективности к выше сказанному.
Написал небольшой скрипт определения количества дублей в файле. Посчитал для имеющихся трех файлов.

Итак, Цифры, характеризующие качество работы вышеприведенных скриптов:
В исходном файле BF4_720p60.mp4 1142 одиночных выпавших кадра и 56 двойных.
В файле BF4_720p60_DropsFixed.mkv 318 одиночных выпавших кадра и 84 двойных.
В файле BF4_720p60_DropsFixed_v2.mkv 189 одиночных выпавших кадра и 96 двойных.

Видно, что число одиночных выпавших кадров во второй версии сокращено еще почти вдвое. Причину, по которой растет число двойных выпавших кадров я пока не знаю, но найду. А вот что самое главное, раз я теперь умею считать эти кадры, то смогу и заменить их, не пропустив ни одного. wink

Исправил несколько ошибок в предыдущем скрипте, переназвал вставляемые кадры по-правильному: как они соотносятся во времени к заменяемому:
fix50 - взять кадр между текущим и следующим по середине (+50%);
-fix50 - взять кадр между текущим и предыдущим по середине (-50%);
-fix33 & fix33 - всегда идут парой друг за другом с той же логикой: (-33% и 33%);

Картинки-диаграммы движения с выпавшим кадром, которые умеет восстанавливать скрипт:

http://www.svp-team.com/forum/misc.php?item=2470
http://www.svp-team.com/forum/misc.php?item=2471
http://www.svp-team.com/forum/misc.php?item=2472

Скрипт GameDropFix_v2

SetMemoryMax(1024)
global svp_scheduler=true
global threads=3
global svp_cache_fwd=threads+2

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

SetMTMode(3,threads)
DSS2("G:\Downloads\Game_60fps_trailer\BF4_720p60.mp4").ConvertToYV12()
SetMTMode(2)

global super_params_mini="{scale:{up:0},gpu:1}"
global analyse_params_mini="{block:{w:16,h:16}}"

mini=BicubicResize(width/2,height/2)
super_mini=mini.SVSuper(super_params_mini)
vectors_mini=SVAnalyse(super_mini, analyse_params_mini)
vectors_Forward=SVConvert(vectors_mini, false)
HorizontalSpeed_luma=mini.MMask(vectors_Forward, kind=3).convertToRGB32().PointResize(width/32, height/32).PointResize(width/8, height/8).ConvertToYV12().mt_lut(y=2, u=128, v=128)

global super_params="{scale:{up:0},gpu:1}"
global analyse_params="{main:{search:{coarse:{distance:4,bad:{sad:2000}},type:2,distance:4},penalty:{lambda:1,pglobal:10000}},refine:[{thsad:65000}]}"
global smoothfps_params_2_1="{gpuid:21,rate:{num:2,den:1},algo:13,scene:{limits:{blocks:50}}}"
global smoothfps_params_3_1="{gpuid:21,rate:{num:3,den:1},algo:13,scene:{limits:{blocks:50}}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
global fix50 = SVSmoothFps(super, vectors, smoothfps_params_2_1, mt=threads, url="www.svp-team.com").SelectOdd()
fix_3_1 = SVSmoothFps(super, vectors, smoothfps_params_3_1, mt=threads, url="www.svp-team.com")
global fix33 = fix_3_1.SelectEvery(3,1).Subtitle("fix33", align=3, size=12)
global fix66 = fix_3_1.SelectEvery(3,2).Subtitle("-fix33", align=3, size=12)

global min_move=0.02
global move_idx=10
global debug=0
global spc=" "
global fmt="% 1.2f"
global star="*"
global fix50t="fix50"
global fix50nt="-fix50"
last.ScriptClip("
    luma_lft=HorizontalSpeed_luma.crop(0,0,width/32,0)
    luma_rgh=HorizontalSpeed_luma.crop(width/32+width/16,0,0,0)
    AvgLuma_lft=128-luma_lft.AverageLuma
    AvgLuma_rgh=128-luma_rgh.AverageLuma
    AvgLuma_lft_prev=128-(luma_lft.trim(1,1)+luma_lft).AverageLuma
    AvgLuma_rgh_prev=128-(luma_rgh.trim(1,1)+luma_rgh).AverageLuma
    AvgLuma_lft_next=128-luma_lft.trim(1,0).AverageLuma
    AvgLuma_rgh_next=128-luma_rgh.trim(1,0).AverageLuma
    AvgLuma_lft_next2=128-luma_lft.trim(2,0).AverageLuma
    AvgLuma_rgh_next2=128-luma_rgh.trim(2,0).AverageLuma

    Max_lft=max(abs(AvgLuma_lft_prev),abs(AvgLuma_lft),abs(AvgLuma_lft_next))
    Max_rgh=max(abs(AvgLuma_rgh_prev),abs(AvgLuma_rgh),abs(AvgLuma_rgh_next))
    A_prev= (Max_rgh>Max_lft) ? AvgLuma_rgh_prev : AvgLuma_lft_prev
    A_cur= (Max_rgh>Max_lft) ? AvgLuma_rgh : AvgLuma_lft
    A_next= (Max_rgh>Max_lft) ? AvgLuma_rgh_next : AvgLuma_lft_next
    drop_lft= (AvgLuma_lft_prev*AvgLuma_lft_next>0 && abs(AvgLuma_lft*move_idx)<Max_lft && abs(AvgLuma_lft_prev)>min_move && abs(AvgLuma_lft_next)>min_move && abs(AvgLuma_lft)<=min_move) ? 1 : 0
    drop_rgh= (AvgLuma_rgh_prev*AvgLuma_rgh_next>0 && abs(AvgLuma_rgh*move_idx)<Max_rgh && abs(AvgLuma_rgh_prev)>min_move && abs(AvgLuma_rgh_next)>min_move && abs(AvgLuma_rgh)<=min_move) ? 1 : 0
    drop = drop_lft*drop_rgh
    drop = (drop==0 && A_cur==0 && abs(A_prev)>min_move && abs(A_next)>min_move) ? 1 : drop
    
    Max_lft2=max(abs(AvgLuma_lft),abs(AvgLuma_lft_next),abs(AvgLuma_lft_next2))
    Max_rgh2=max(abs(AvgLuma_rgh),abs(AvgLuma_rgh_next),abs(AvgLuma_rgh_next2))
    A_prev2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh : AvgLuma_lft
    A_cur2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh_next : AvgLuma_lft_next
    A_next2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh_next2 : AvgLuma_lft_next2
    drop_lft2= (AvgLuma_lft*AvgLuma_lft_next2>0 && abs(AvgLuma_lft_next*move_idx)<Max_lft2 && abs(AvgLuma_lft)>min_move && abs(AvgLuma_lft_next2)>min_move && abs(AvgLuma_lft_next)<=min_move) ? 1 : 0
    drop_rgh2= (AvgLuma_rgh*AvgLuma_rgh_next2>0 && abs(AvgLuma_rgh_next*move_idx)<Max_rgh2 && abs(AvgLuma_rgh)>min_move && abs(AvgLuma_rgh_next2)>min_move && abs(AvgLuma_rgh_next)<=min_move) ? 1 : 0
    drop2 = drop_lft2*drop_rgh2
    drop2 = (drop2==0 && A_cur2==0 && abs(A_prev2)>min_move && abs(A_next2)>min_move) ? 1 : drop2

    drop2==1 \
    ? abs(A_prev2)/1.3>abs(A_next2) \
      ?  (fix50.trim(1,1)+fix50).Subtitle(fix50nt, align=3, size=12) \
      : (abs(A_prev2)/1.3<=abs(A_next2) && abs(A_prev2)>=abs(A_next2)/1.3) \
        ? fix66.trim(1,1)+fix66 \
        : last \
    : last
    
    drop==1 \
    ? abs(A_prev)<abs(A_next)/1.3 \
      ?  fix50.Subtitle(fix50t, align=3, size=12) \
      : abs(A_prev)/1.3<=abs(A_next) \
        ? fix33 \
        : last \
    : last

    debug==1 ? Subtitle(x=10,y=10,string(AvgLuma_lft_prev,fmt)+spc+string(AvgLuma_rgh_prev,fmt)) : last
    debug==1 ? Subtitle(x=10,y=30,string(AvgLuma_lft,fmt)+spc+string(AvgLuma_rgh,fmt),text_color=$FF8888) : last
    debug==1 ? Subtitle(x=10,y=50,string(AvgLuma_lft_next,fmt)+spc+string(AvgLuma_rgh_next,fmt)) : last
    debug==1 ? Subtitle(x=10,y=70,string(AvgLuma_lft_next2,fmt)+spc+string(AvgLuma_rgh_next2,fmt)) : last
    debug==1 ? Max_rgh>Max_lft ? Subtitle(x=70,y=90,star) : Subtitle(x=20,y=90,star) : last
    debug==1 ? Subtitle(x=10,y=110,string(drop_lft)+spc+string(drop_rgh)+spc+string(drop)) : last
    (debug==1 && drop==1 && abs(A_prev)/1.3>abs(A_next)) ? Subtitle(x=10,y=130, star+star+star+star+star+star) : last
")

trim(0,framecount-10)
Distributor()

Результат работы скрипта стал лучше:
BF4_720p60_DropsFixed_v2.mkv (1,22 ГБ)

3,442

(153 replies, posted in Эксплуатация SVP)

danila_112
есть неиспользуемые резервы CPU в размере 30%
Их не надо использовать. Иначе в погоне за качеством получите подергивания и тормоза. 30% - это минимально необходимый резерв.

3,443

(153 replies, posted in Эксплуатация SVP)

danila_112
могу сказать определенно сейчас плавность супер и загрузка процессора не более 70%
Я рад, что получилось. Мои поздравления! smile

Kanade
If you have any antivirus software then you need to disable virus check in this folder. You need add to exception list your folder: C:\Users\Eric\AppData\Roaming\SVP 3.1\Logs
Error appears because avisynth can not write to file just created by him. AV soft is taking this file for some time. It is unexpected to avisynth.

Подкинул тут Булат95 ссылку на плавный трейлер игрушки BattleField 4.
Трейлеры 720p и 1080p и правда имеют 60 к/сек, но вот только во многих сценах присутствуют выпавшие кадры. Мне это дело не очень понравилось, поэтому решил попытать свои силы в задаче повышения плавности игровым трейлерам. smile
Заодно развить алгоритм замены выпавших кадров.

Вышел довольно сложный, но мощный скрипт: GameDropFix

SetMemoryMax(1024)
global svp_scheduler=true
global threads=7
global svp_cache_fwd=threads+2

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

SetMTMode(3,threads)
DSS2("G:\Downloads\Game_60fps_trailer\BF4_720p60.mp4").ConvertToYV12()
SetMTMode(2)

global super_params_mini="{scale:{up:0},gpu:1}"
global analyse_params_mini="{block:{w:16,h:16}}"

mini=BicubicResize(width/2,height/2)
super_mini=mini.SVSuper(super_params_mini)
vectors_mini=SVAnalyse(super_mini, analyse_params_mini)
vectors_Forward=SVConvert(vectors_mini, false)
HorizontalSpeed_luma=mini.MMask(vectors_Forward, kind=3).convertToRGB32().PointResize(width/32, height/32).PointResize(width/8, height/8).ConvertToYV12().mt_lut(y=2, u=128, v=128)

global super_params="{scale:{up:0},gpu:1}"
global analyse_params="{main:{search:{coarse:{distance:4,bad:{sad:2000}},type:2,distance:4},penalty:{lambda:1,pglobal:10000}},refine:[{thsad:65000}]}"
global smoothfps_params="{gpuid:21,rate:{num:2,den:1},algo:13,scene:{limits:{blocks:50}}}"
global smoothfps_params3366="{gpuid:21,rate:{num:3,den:1},algo:13,scene:{limits:{blocks:50}}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
global fix50 = SVSmoothFps(super, vectors, smoothfps_params, mt=threads, url="www.svp-team.com").SelectOdd().Subtitle("fix50", align=3, size=12)
fix3366 = SVSmoothFps(super, vectors, smoothfps_params3366, mt=threads, url="www.svp-team.com")
global fix33 = fix3366.SelectEvery(3,1).Subtitle("fix33", align=3, size=12)
global fix66 = fix3366.SelectEvery(3,2).Subtitle("fix66", align=3, size=12)

global min_move=0.02
global move_idx=10
global debug=0
global spc=" "
global fmt="% 1.2f"
global star="*"
last.ScriptClip("
    luma_lft=HorizontalSpeed_luma.crop(0,0,width/32,0)
    luma_rgh=HorizontalSpeed_luma.crop(width/32+width/16,0,0,0)
    AvgLuma_lft=128-luma_lft.AverageLuma
    AvgLuma_rgh=128-luma_rgh.AverageLuma
    AvgLuma_lft_prev=128-(luma_lft.trim(1,1)+luma_lft).AverageLuma
    AvgLuma_rgh_prev=128-(luma_rgh.trim(1,1)+luma_rgh).AverageLuma
    AvgLuma_lft_next=128-luma_lft.trim(1,0).AverageLuma
    AvgLuma_rgh_next=128-luma_rgh.trim(1,0).AverageLuma
    AvgLuma_lft_next2=128-luma_lft.trim(2,0).AverageLuma
    AvgLuma_rgh_next2=128-luma_rgh.trim(2,0).AverageLuma

    Max_lft=max(abs(AvgLuma_lft_prev),abs(AvgLuma_lft),abs(AvgLuma_lft_next))
    Max_rgh=max(abs(AvgLuma_rgh_prev),abs(AvgLuma_rgh),abs(AvgLuma_rgh_next))
    A_prev= (Max_rgh>Max_lft) ? AvgLuma_rgh_prev : AvgLuma_lft_prev
    A_cur= (Max_rgh>Max_lft) ? AvgLuma_rgh : AvgLuma_lft
    A_next= (Max_rgh>Max_lft) ? AvgLuma_rgh_next : AvgLuma_lft_next
    drop_lft= (AvgLuma_lft_prev*AvgLuma_lft_next>0 && abs(AvgLuma_lft*move_idx)<Max_lft && abs(AvgLuma_lft_prev)>min_move && abs(AvgLuma_lft_next)>min_move) ? 1 : 0
    drop_rgh= (AvgLuma_rgh_prev*AvgLuma_rgh_next>0 && abs(AvgLuma_rgh*move_idx)<Max_rgh && abs(AvgLuma_rgh_prev)>min_move && abs(AvgLuma_rgh_next)>min_move) ? 1 : 0
    drop = drop_lft*drop_rgh
    
    Max_lft2=max(abs(AvgLuma_lft),abs(AvgLuma_lft_next),abs(AvgLuma_lft_next2))
    Max_rgh2=max(abs(AvgLuma_rgh),abs(AvgLuma_rgh_next),abs(AvgLuma_rgh_next2))
    A_prev2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh : AvgLuma_lft
    A_cur2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh_next : AvgLuma_lft_next
    A_next2= (Max_rgh2>Max_lft2) ? AvgLuma_rgh_next2 : AvgLuma_lft_next2
    drop_lft2= (AvgLuma_lft*AvgLuma_lft_next2>0 && abs(AvgLuma_lft_next*move_idx)<Max_lft2 && abs(AvgLuma_lft)>min_move && abs(AvgLuma_lft_next2)>min_move) ? 1 : 0
    drop_rgh2= (AvgLuma_rgh*AvgLuma_rgh_next2>0 && abs(AvgLuma_rgh_next*move_idx)<Max_rgh2 && abs(AvgLuma_rgh)>min_move && abs(AvgLuma_rgh_next2)>min_move) ? 1 : 0
    drop2 = drop_lft2*drop_rgh2

    drop2==1 \
    ? abs(A_prev2)/1.3>abs(A_next2) \
      ?  fix50.trim(1,1)+fix50 \
      : (abs(A_prev2)/1.3<=abs(A_next2) && abs(A_prev2)>=abs(A_next2)/1.3) \
        ? fix66.trim(1,1)+fix66 \
        : last \
    : last
    
    drop==1 \
    ? abs(A_prev)/1.3<=abs(A_next) \
      ?  fix50 \
      : abs(A_prev)<=abs(A_next)/1.3 \
        ? fix33 \
        : last \
    : last

    debug==1 ? Subtitle(x=10,y=10,string(AvgLuma_lft_prev,fmt)+spc+string(AvgLuma_rgh_prev,fmt)) : last
    debug==1 ? Subtitle(x=10,y=30,string(AvgLuma_lft,fmt)+spc+string(AvgLuma_rgh,fmt),text_color=$FF8888) : last
    debug==1 ? Subtitle(x=10,y=50,string(AvgLuma_lft_next,fmt)+spc+string(AvgLuma_rgh_next,fmt)) : last
    debug==1 ? Subtitle(x=10,y=70,string(AvgLuma_lft_next2,fmt)+spc+string(AvgLuma_rgh_next2,fmt)) : last
    debug==1 ? Max_rgh>Max_lft ? Subtitle(x=70,y=90,star) : Subtitle(x=20,y=90,star) : last
    debug==1 ? Subtitle(x=10,y=110,string(drop_lft)+spc+string(drop_rgh)+spc+string(drop)) : last
    (debug==1 && drop==1 && abs(A_prev)/1.3>abs(A_next)) ? Subtitle(x=10,y=130, star+star+star+star+star+star) : last
")

Distributor()

Это пока предварительный вариант в стадии работающего прототипа. Настройки максимальной подвижности при интерполировании взяты такие же, как для повышения плавности видео с видеорегистратора. Т.к. характер движений в таком видео очень схож.

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

Случай 1. Классический. Дроп, затем скачок.

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

Перед выпавшим кадром движение обычной амплитуды, на самом выпавшем кадре движений нет, на следующем за ним кадре - движение в два раза больше из-за пропуска фазы движения. Такой дроп лечится классической заменой кадра-дропа интерполированным кадром, взятого посередине длинного движения. На картинке обозначен: fix50.

Случай 2. Обратный. Скачок, затем дроп.
Перед выпавшим кадром по какой-то причине игровой движок показывает кадр из будущего. Выглядит как скачок. А за ним следует дроп. Видимо движок игры неровно тратит время на отрисовку кадров и если предыдущий кадр ему дался легко, то со следующим он провозился так долго, что не успел подготовить кадр до следующего синхроимпульса монитора, пришлось повторить имеющийся, т.е. вывести дроп. Такой дроп лечится хитро. Вторая копия кадра оставляется нетронутой, а первая заменяется на fix50.

Случай 3. Пропуск кадра из-за низкой частоты рендера кадров игровым движком.
И перед выпавшим кадром и после него нет скачков. Кадра просто не считалось игрой изначально. Если заменить такой дроп на один интерполированный по середине с соседом кадр, то получим два кадра с уполовиненным по скорости движением. Я пока решил интерполировать оба кадра, которые ограничивают кадровый интервал. Первый кадр интерполирую с левым, получая положение 66%: fix66, второй кадр - с правым до положения 33%: fix33.
Таким образом получаю вместо дропа серию из трех замедленных на 33% но равномерно двигающихся кадров. Выглядит уже лучше, чем дерганный исходник.

Все желающие могут скачать и посмотреть результат:
BF4_720p60_DropsFixed.mkv (1,21 ГБ)

jkauff
If simple then go to reset profiles dialog and select lighter profile from the list than current.

3,447

(4 replies, posted in Using SVP)

jkauff
Yes. Thank you for reminding. smile
One-frame DVD menu is hard thing for me. I tried several times, but I could not fixed it a once.
I will be try again. I had a good rest for that wink

3,448

(466 replies, posted in Эксплуатация SVP)

Почемучкин
Правой кнопкой по окну плеера во время воспроизведения файла.

MPC-HC:
http://www.svp-team.com/forum/misc.php?item=2466

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

Kanade
Do you mean as in seek slowly and not fast?
No. I mean programmers trincks. Just released in SVP. You can see them in "SVP menu - Turn off on seek" option.

One more thing, to update any components (for example: SVP lite, fddshow and avisynch) do I download the latest installers and just run them?
Or do I have to delete everything first and than install?

If you advanced user and use a lot of software that uses avisynth/ffdShow then install them separately manually. Otherwise just douwnload and install SVP_full. Last version of SVP usually contains all last versions of used compinents.

3,450

(153 replies, posted in Эксплуатация SVP)

danila_112
Нет.

Включенный GPU - это галка в меню SVP, которая включает использование GPU-ускорения.
Профили с буквами g/c - это только наборы настроек подобранные с учетом того, что GPU-ускорение забирает (или нет) на себя часть нагрузки с процессора. Буква g/c - это только название, которое никак не влияет на GPU-ускорение. Поэтому после включения/отключения GPU-ускорения рекомендуется сбрасывать профили, чтобы выбрался соответствующий набор профилей под текущую конфигурацию.