travolter
global smoothfps_params="{rate:{num:"+string(abc)+",den:"+string(def)+"},algo:11,block:true,scene:{blend:true,mode:0}}"

It is avisynth syntax.

Есть еще одно совпадение. 165 МГц - это максимальная разрешенная частота для DVI Single Link. Так что возможно, что артефакт "слипшихся" пикселей не от электроники монитора появился, а от того, что половина информации в канал передачи не влезла, каждый второй пиксел отфильтровался. Вот пиксели и объединили свой цвет попарно.
Надо будет попробовать подключить монитор кабелем Dual Link и проверить осталась ли проблема на границе 165 МГц.

3,403

(16 replies, posted in Using SVP)

DemonSapde
What you mean under "anime settings"?

3,404

(16 replies, posted in Using SVP)

First solution is to use area masking but not standard values. For this you need to point in override.js:

smooth.mask.area            = 300;
smooth.mask.area_sharp      = 2.0;

This change will reduce smoothness at problem areas with flickering artifacts, but text will become much stable. Some ghosts of letters are still present but on full real speed they are not so noticeable.

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

Sample at 10 fps (6х slower than real-time)

useto99
No need to apologize. It is OK.

But I am worry is it normal to use "Parallel Viewing" or "Cross-Eye Viewing" on 21" monitor at full screen?
What effect it has on health?
What duration of such viewing is allowed?

I remember first question, I will look answer this evening with my 3D glasses. Just I want to know more about your method of viewing 3D.

useto99
1920 px width display must show two pictures for both eyes.
So, one picture have only 960 px width.
Am I right?

How many inches diagonal of your monitor?
How you "hack" your eyes to watch so BIG pictures by "Cross-Eye Viewing" method?

useto99
I just used "Parallel Viewing" or "Cross-Eye Viewing" to watch 3D
If I understand you correctly you don't use any 3D hardware. You just watching 3D at usual display like here:
http://www.jrsdesign.net/cross_parallel_viewing.html

How you can watch 3D in fullHD resolution by these ways? hmm
Can you explain?

useto99
Thank you for information.
I will take a look at your link.

I have NVIDIA 3D Vision glasses. What glasses do you have and what player are you using?

dlr5668
закрепить тему ? а то многие и не узнают
Пожалуй, лучше отразить это в Wiki, и поместить сюда ссылку.

перестало работать аппаратное ускорение во флеше и в лав фильтре dxva copy-back пришлось поменять на native
А вот это неприятно! sad
У меня под рукой монитор, который держит 71 Гц, а при установке уже 71.1 показывает "слипшиеся" пиксели. Это один из артефактов переразгона монитора. Выглядит так:

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

Похоже, что электроника не тянет пиксельную частоту больше 165 МГц.

При этом в режиме 71 Гц сохраняется аппаратное ускорение декодирования: DXVA2 (copy-back) и NVIDIA CUVID работают нормально.

Замечу, что DXVA2 (native) при совместном импользовании с SVP переключается на программное декодирование и работает аналогично выбору в декодере LAV ускорения None. Так и должно быть.

dlr5668
3:1 должно же выглядеть чуть плавнее чем 2.5:1 ?
Да. Плавнее. А главное, качественнее и ничуть не затратнее. При 2,5x выкидывается половина исходных кадров. На выходе остаются 12 исходных и 48 интерполированных кадров. А при 3x сохраняются все исходные кадры. Имеем на выходе уже 24 исходных и 48 интерполированных. Количество расчетных кадров одинаковое, нагрузка на процессор тоже одинаковая.
Все исходные кадры - значит сохраняются все детали. В два раза больше исходных кадров - считай картинка в два раза качественней. Качество интерполированных кадров тоже разное, не смотря на то, что их равное количество в обоих случаях: по 48 шт. В случае утроения все промежуточные кадры равноотстоят от исходных на 33%. В случае 2,5x имеем 24 кадра на расстоянии 20% и 24 кадра на расстоянии 40%. Чем дальше расстояние от исходного кадра, тем больше вероятность внесения искажений при интерполяции и тем заметнее получающиеся артефакты. Из опыта могу сказать, что 48 интерполированных кадров на расстоянии 33% имеют меньше артефактов, чем 24 на расстоянии 20% и 24 кадра на расстоянии 40%.

Итого, утроение качественней, чем повышение плавности в некратное число раз 2,5x.

Noweol
Предлагаю начать с того, что перечислить уже известные решения по управлению ПК (и плеером в частности) с планшета (iOS, android).

3,412

(16 replies, posted in Using SVP)

DemonSapde
Good. Thank you for screenshots. Right that I need. 1280x720 - source resolution. Perfect!
Give me one day.

gaunt said:

Perhaps input resolution of video is too low. Or large blocks used.

He is right too. I will ask him what he thinking about good settings for that video.

3,413

(16 replies, posted in Using SVP)

DemonSapde

The text is in a weird color, I think that's why it gets confused with other objects. Here, the problem arises when the camera pans over the clouds or the sea with fast movements. The image is restored correctly very quickly, but it's still noticeable.

You are right.

I see low contrast at text and same colors at text and at background object under text. It can be possible cause of text flickering.

Ok. Can you give me two screenshots of consecutive frames. Then I will found good settings for that frames.
Turn off SVP. Pause while playing. Take screenshot. Ctrl-right arrow (moves to next frame). Take srceenshot again.

3,414

(16 replies, posted in Using SVP)

DemonSapde
is there anything I can do about the flickering text?

I think You can try. Please give me a short peace of video with such text.
And show your script: SVP tray menu - Information - Last used AVS script.

3,415

(16 replies, posted in Using SVP)

DemonSapde

Error: Error preparing smooth playback! Script error:
SVAnalyse: non-valid number of levels (6)
(C:\ProgramData\SVP 3.1\AVS\ffdshow.avs, line 37)
(C:\ProgramData\SVP 3.1\AVS\ffdshow.avs, line 53)
(ffdshow_filter_avisynth_script, line 4)

Number of levels is too big for this resolution: 1280x720 and used block size.
Just reduce number of levels in override.js, parameter analyse.main.levels or write double slash (//) before this line.

3,416

(3 replies, posted in Using SVP)

dupusia25

Error: Warning: there's a memory leak in the video player: 1179 MB
To prevent the closing of the player due to lack of memory a script restarted improve smoothness.

1. What player are you using?
2. How many memory are installed in the system?
3. What operation system do you have? Win XP?

3,417

(4 replies, posted in Using SVP)

mark007
They are not hangs. Menu is still working if you click it to hot areas. It just don't painting.

totalz
If you using MPC-HC then you can stay video on pause before right place and then use Ctrl-right arrow to go frame-by-frame. If you get frame needed then take a screenshot.

noskill
Меню SVP в трее - показать - дополнительную информацию.
Там ответ на Ваш вопрос.

3,420

(7 replies, posted in Using SVP)

redlid
How did you enable Yadif? As filter in ffdShow?
Did you try to tune it in ffdShow but enable it from SVP menu - settings - deinterlacing?

3,421

(10 replies, posted in Using SVP)

totalz
I don't understand you. What you want to ask?

totalz
Can you add screenshot here to tell about one thing?

dlr5668
Да, точно подмечено. Скрипт я еще не выкладывал. Здесь основную ценность представляет не видео, а скрипт, которым можно обработать тысячи подобных видео smile
Подчистил лишние строки, убрал отладочные конструкции. В таком виде уже можно использовать. Оформление скрипта все еще рабочее, для выставки не годится.

Скрипт GameDropFix_v3

SetMemoryMax(1024)
global svp_scheduler=true
global threads=5
global svp_cache_fwd=threads+10

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("BF4_720p60.mp4",fps=59.94).ConvertToYV12()
SetMTMode(2)

super_params_mini="{scale:{up:0},gpu:1}"
analyse_params_mini="{block:{w:8,h:8}}"
mini=BicubicResize(width/2,height/2).TemporalSoften(1, 1, 0, scenechange=1, mode=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)
VerticalSpeed_luma=mini.MMask(vectors_Forward, kind=4).convertToRGB32().PointResize(width/32, height/32).PointResize(width/8, height/8).ConvertToYV12().mt_lut(y=2, u=128, v=128)

size=16
luma_lft=HorizontalSpeed_luma.crop(0,0,int(width/64)*2,0).BicubicResize(size,size)
luma_rgh=HorizontalSpeed_luma.crop(int(width/64)*2+int(width/32)*2,0,0,0).BicubicResize(size,size)
luma_top=VerticalSpeed_luma.crop(0,0,0,int(height/64)*2).BicubicResize(size,size)
luma_btm=VerticalSpeed_luma.crop(0,int(height/64)*2+int(height/32)*2,0,0).BicubicResize(size,size)
luma_drop=luma_lft.mt_lut(y=-1, u=128, v=128)

move_idx=5
y_idx=3
min_move=0.2
max_stop=0.5
drop_clip=luma_drop.ScriptClip("
    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_top=128-luma_top.AverageLuma
    AvgLuma_btm=128-luma_btm.AverageLuma
    AvgLuma_top_prev=128-(luma_top.trim(1,1)+luma_top).AverageLuma
    AvgLuma_btm_prev=128-(luma_btm.trim(1,1)+luma_btm).AverageLuma
    AvgLuma_top_next=128-luma_top.trim(1,0).AverageLuma
    AvgLuma_btm_next=128-luma_btm.trim(1,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))
    Max_top=max(abs(AvgLuma_top_prev),abs(AvgLuma_top),abs(AvgLuma_top_next))
    Max_btm=max(abs(AvgLuma_btm_prev),abs(AvgLuma_btm),abs(AvgLuma_btm_next))
    Max_all=max(Max_lft,Max_rgh,Max_top,Max_btm)
    
    MaxLuma=max(abs(AvgLuma_lft),abs(AvgLuma_rgh),abs(AvgLuma_top),abs(AvgLuma_btm))
    MaxLuma_prev=max(abs(AvgLuma_lft_prev),abs(AvgLuma_rgh_prev),abs(AvgLuma_top_prev),abs(AvgLuma_btm_prev))
    MaxLuma_next=max(abs(AvgLuma_lft_next),abs(AvgLuma_rgh_next),abs(AvgLuma_top_next),abs(AvgLuma_btm_next))
    dif=mini.YDifferenceFromPrevious
    dif_next=mini.trim(1,0).YDifferenceFromPrevious
    dif_prev=(mini.trim(1,1)+mini).YDifferenceFromPrevious
    
    GoodContrast = (max(mini.YPlaneMinMaxDifference,mini.trim(1,0).YPlaneMinMaxDifference)>20) ? 1 : 0

    drop = (MaxLuma<0.1 && MaxLuma*2<Max(MaxLuma_prev,MaxLuma_next) && dif*y_idx<max(dif_prev,dif_next)) ? 1 : 0

    drop_lft = (AvgLuma_lft_prev*AvgLuma_lft_next>0 && abs(AvgLuma_lft*move_idx)<Max_lft && abs(AvgLuma_lft)<=min_move && dif*y_idx<max(dif_prev,dif_next)) ? 2 : 0
    drop_rgh = (AvgLuma_rgh_prev*AvgLuma_rgh_next>0 && abs(AvgLuma_rgh*move_idx)<Max_rgh && abs(AvgLuma_rgh)<=min_move && dif*y_idx<max(dif_prev,dif_next)) ? 3 : 0
    drop_top = (AvgLuma_top_prev*AvgLuma_top_next>0 && abs(AvgLuma_top*move_idx)<Max_top && abs(AvgLuma_top)<=min_move && dif*y_idx<max(dif_prev,dif_next)) ? 4 : 0
    drop_btm = (AvgLuma_btm_prev*AvgLuma_btm_next>0 && abs(AvgLuma_btm*move_idx)<Max_btm && abs(AvgLuma_btm)<=min_move && dif*y_idx<max(dif_prev,dif_next)) ? 5 : 0
   
    drop = (drop==0 && MaxLuma<Max_stop && Max_lft==Max_all) ? drop_lft : drop
    drop = (drop==0 && MaxLuma<Max_stop && Max_rgh==Max_all) ? drop_rgh : drop
    drop = (drop==0 && MaxLuma<Max_stop && Max_top==Max_all) ? drop_top : drop
    drop = (drop==0 && MaxLuma<Max_stop && Max_btm==Max_all) ? drop_btm : drop
    drop_dif = (dif<0.4 && MaxLuma<min_move) ? 6 : 0
    drop = (drop==0 && drop_dif>0) ? drop_dif : drop
    drop = (drop>0 && Max_all<0.2) ? 0 : drop
    drop = (drop>0 && GoodContrast==0) ? 0 : drop

    luma=mini.AverageLuma
    luma_next=mini.trim(1,0).AverageLuma
    max_luma=max(luma,luma_next)

    drop = (drop>0 && max_luma<16.5) ? 0 : drop

    (drop>0) ? luma_drop : \
     (Max_lft==Max_all) ? luma_lft : \
      (Max_rgh==Max_all) ? luma_rgh : \
       (Max_top==Max_all) ? luma_top : luma_btm
")

fix_r50=luma_lft.mt_lut(y=-1, u=128, v=128)
fix_lr33=luma_lft.mt_lut(y=-2, u=128, v=128)
fix_l50=luma_lft.mt_lut(y=-3, u=128, v=128)
fix_r133=luma_lft.mt_lut(y=-4, u=128, v=128)
fix_r66=luma_lft.mt_lut(y=-5, u=128, v=128)

AvgDrop=127
MaxMulty=10
dblMulti=1.3
fix_clip=luma_drop.ScriptClip("
    drop=drop_clip.AverageLuma
    AvgLuma=abs(128-drop_clip.AverageLuma)
    AvgLuma_prev=abs(128-(drop_clip.trim(1,1)+drop_clip).AverageLuma)
    AvgLuma_prev_= (AvgLuma_prev==AvgDrop) ? 0 : AvgLuma_prev
    AvgLuma_prev2=abs(128-(drop_clip.trim(1,2)+drop_clip).AverageLuma)
    AvgLuma_next=abs(128-drop_clip.trim(1,0).AverageLuma)
    AvgLuma_next_= (AvgLuma_next==AvgDrop) ? 0 : AvgLuma_next
    AvgLuma_next2=abs(128-drop_clip.trim(2,0).AverageLuma)
    #AvgLuma_next3=abs(128-drop_clip.trim(3,0).AverageLuma)

    RightZero = (AvgLuma_prev_*MaxMulty<AvgLuma_next_) ? (AvgLuma_prev_>max_stop || AvgLuma_next_>max_stop) ? 1 : 0 : 0
    LeftZero = (AvgLuma_next_*MaxMulty<AvgLuma_prev_) ? (AvgLuma_prev_>max_stop || AvgLuma_next_>max_stop) ? 1 : 0 : 0

    drop = (AvgLuma==AvgDrop && AvgLuma_next==AvgDrop) ? -50 : 0
    drop = (AvgLuma==AvgDrop && AvgLuma_prev==AvgDrop) ? 50 : drop

    drop = (drop==0 && AvgLuma==AvgDrop && LeftZero==0 && RightZero==0) ? \
     AvgLuma_prev_>AvgLuma_next_*dblMulti ? -50 : \
      AvgLuma_prev_*dblMulti>=AvgLuma_next_ ? AvgLuma_next2==AvgDrop ? 50 : 33 : 50 : drop

    drop = (drop==0 && AvgLuma==AvgDrop && RightZero==0 && AvgLuma_next2==AvgDrop) ? -50 : drop
    drop = (drop==0 && AvgLuma==AvgDrop && LeftZero==0 && AvgLuma_prev2==AvgDrop) ? 66 : drop

    (drop==50) ? fix_r50 : \
     (drop==33) ? fix_lr33 : \
      (drop==-50) ? fix_l50 : \
       (drop==133) ? fix_r133 : \
        (drop==66) ? fix_r66 : drop_clip
")

r50=1
lr33=2
l50=3
r133=4
r66=5

super_params="{scale:{up:0},gpu:1}"
analyse_params="{main:{search:{coarse:{distance:4,bad:{sad:2000}},type:2,distance:4},penalty:{lambda:1,pglobal:10000}},refine:[{thsad:65000}]}"
smoothfps_params="{rate:{num:12,den:1},algo:13,scene:{blend:true}}"

super=SVSuper(super_params)
vectors=SVAnalyse(super, analyse_params)
fix_all = SVSmoothFps(super, vectors, smoothfps_params, mt=threads, url="www.svp-team.com")
fix50 = fix_all.SelectEvery(12,6).Subtitle("fix50", align=3, size=12)
fix33 = fix_all.SelectEvery(12,4).Subtitle("fix33", align=3, size=12)
fix66 = fix_all.SelectEvery(12,8).Subtitle("-fix33", align=3, size=12)
fix66p = fix_all.SelectEvery(12,8).Subtitle("fix66", align=3, size=12)
fix75 = fix_all.SelectEvery(12,9).Subtitle("-fix25", align=3, size=12)
fix50n = fix_all.SelectEvery(12,6).Subtitle("-fix50", align=3, size=12)
fix133 = fix_all.SelectEvery(12,4).Subtitle("fix133", align=3, size=12)
fix125 = fix_all.SelectEvery(12,3).Subtitle("fix125", align=3, size=12)

ScriptClip("
    AvgFix=fix_clip.AverageLuma
    AvgFix_next=fix_clip.trim(1,0).AverageLuma
    AvgFix_next2=fix_clip.trim(2,0).AverageLuma
    AvgFix_next3=fix_clip.trim(3,0).AverageLuma
    AvgFix_prev=(fix_clip.trim(1,1)+fix_clip).AverageLuma

    (AvgFix==r50) \
      ? (AvgFix_next2==lr33 || AvgFix_next2==l50) ? fix33 : fix50 : \
    (AvgFix==lr33) ? fix33 : \
    (AvgFix_next==lr33) \
     ? (AvgFix_prev==r66) ? fix75.trim(1,1)+fix75 : fix66.trim(1,1)+fix66 : \
    (AvgFix_next==l50) \
      ? (AvgFix_prev==lr33 || AvgFix_prev==r50) ? fix66.trim(1,1)+fix66 \
      : (AvgFix_prev==r66) ? fix75.trim(1,1)+fix75 : fix50n.trim(1,1)+fix50n : \
    (AvgFix==r66) \
      ? (AvgFix_next2==lr33 || AvgFix_next2==l50) ? fix50 : fix66p : \
    (AvgFix_next==r66) \
      ? (AvgFix_next3==lr33 || AvgFix_next3==l50) ? fix125.trim(1,0) : fix133.trim(1,0) : \
    last
")

trim(0,framecount-10)

Distributor()

Немного об алгоритме:
- в кадре выделяются четыре зоны, в которых оценивается движение: слева/справа, сверху/снизу;
- все кадры, на которых наблюдается резкая приостановка движений (max_stop, пкс) признаются кандидатами к замене и помещаются в клип drop_clip;
- далее идет выделение из этих кандидатов одиночных, двойных и тройных выпавших кадров, на выходе получается клип кадров к замене fix_clip с пятью вариантами замены кадров;
- далее производится обработка конфликтных ситуаций, чтобы не происходило образование новых кадров дублей после замены и выполняется непосредственно замена кадра выбором одного из 8-ми вариантов;

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

Окончательный вариант ролика с замененными выпавшими кадрами: BF4_720p60_DropsFixed_v3.mkv (1,25 ГБ)

Отличается от двух предыдущих:
- возвращена ошибочно выставленная частота кадров с 60 fps до 59.94 fps. Это исключило появление 62 выпавших кадров на ровном месте wink
- добавлена замена парных выпавших кадров;
- добавлена замена тройных выпавших кадров;
- изменены настройки интерполяции для уменьшения волновых артефактов на интерполированных кадрах, применено смешивание кадров на сменах сцен.

Вот карта расположения выпавших кадров во всех четырех роликах с цифрами.

https://www.svp-team.com/forum/misc.php?action=pun_attachment&amp;item=2483
https://www.svp-team.com/forum/misc.php?action=pun_attachment&amp;item=2484
https://www.svp-team.com/forum/misc.php?action=pun_attachment&amp;item=2485
https://www.svp-team.com/forum/misc.php?action=pun_attachment&amp;item=2486

Самые заметные выпавшие кадры - это одиночно-расположенные, особенно, если находятся в местах с динамичным движением.
Самые безобидные - чередующиеся через один. Наблюдаются на вставках с низкой частотой кадров (30 к/сек) из других роликов.
Двойные и тройные дропы заметнее одинарных, особенно если они отдельно-расположенные, как в этом ролике.

Итого за три итерации количество отдельно стоящих выпавших кадров уменьшено с 1160 до 170. По остальным типам выпавших кадров тоже получен значительный прогресс.

Разработанный скрипт избавляет видео в первую очередь от приостановок в глобальных движениях: панорамирование, зум. Локальные движения остаются без изменений.
Теперь, при просмотре ролика на фоне плавных движений камеры уже явно бросаются в глаза недоработки игрового движка:
- низкая частота кадров, примененная в анимации персонажей (особенно неприятно смотрится перемещение персонажей и смена поз попеременно через кадр);
- низкая точность анимации персонажей, что делает их движения кукольными особенно вблизи;
- низкая точность анимации объектов, скачкообразные движения вертолета;
- двойные крылья у птиц smile

Вот такие у меня замечания. Но несмотря на вышесказанное, приятного просмотра! wink

madVR is the best renderer.