travolter
global smoothfps_params="{rate:{num:"+string(abc)+",den:"+string(def)+"},algo:11,block:true,scene:{blend:true,mode:0}}"
It is avisynth syntax.
You are not logged in. Please login or register.
SmoothVideo Project → Posts by MAG79
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 МГц.
DemonSapde
What you mean under "anime settings"?
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.
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?
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?
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
А вот это неприятно!
У меня под рукой монитор, который держит 71 Гц, а при установке уже 71.1 показывает "слипшиеся" пиксели. Это один из артефактов переразгона монитора. Выглядит так:
При этом в режиме 71 Гц сохраняется аппаратное ускорение декодирования: DXVA2 (copy-back) и NVIDIA CUVID работают нормально.
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).
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.
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.
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.
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.
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?
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 в трее - показать - дополнительную информацию.
Там ответ на Ваш вопрос.
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?
totalz
I don't understand you. What you want to ask?
totalz
Can you add screenshot here to tell about one thing?
dlr5668
Да, точно подмечено. Скрипт я еще не выкладывал. Здесь основную ценность представляет не видео, а скрипт, которым можно обработать тысячи подобных видео
Подчистил лишние строки, убрал отладочные конструкции. В таком виде уже можно использовать. Оформление скрипта все еще рабочее, для выставки не годится.
Скрипт 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 выпавших кадров на ровном месте
- добавлена замена парных выпавших кадров;
- добавлена замена тройных выпавших кадров;
- изменены настройки интерполяции для уменьшения волновых артефактов на интерполированных кадрах, применено смешивание кадров на сменах сцен.
Вот карта расположения выпавших кадров во всех четырех роликах с цифрами.
Самые заметные выпавшие кадры - это одиночно-расположенные, особенно, если находятся в местах с динамичным движением.
Самые безобидные - чередующиеся через один. Наблюдаются на вставках с низкой частотой кадров (30 к/сек) из других роликов.
Двойные и тройные дропы заметнее одинарных, особенно если они отдельно-расположенные, как в этом ролике.
Итого за три итерации количество отдельно стоящих выпавших кадров уменьшено с 1160 до 170. По остальным типам выпавших кадров тоже получен значительный прогресс.
Разработанный скрипт избавляет видео в первую очередь от приостановок в глобальных движениях: панорамирование, зум. Локальные движения остаются без изменений.
Теперь, при просмотре ролика на фоне плавных движений камеры уже явно бросаются в глаза недоработки игрового движка:
- низкая частота кадров, примененная в анимации персонажей (особенно неприятно смотрится перемещение персонажей и смена поз попеременно через кадр);
- низкая точность анимации персонажей, что делает их движения кукольными особенно вблизи;
- низкая точность анимации объектов, скачкообразные движения вертолета;
- двойные крылья у птиц
Вот такие у меня замечания. Но несмотря на вышесказанное, приятного просмотра!
madVR is the best renderer.
SmoothVideo Project → Posts by MAG79
Powered by PunBB, supported by Informer Technologies, Inc.