126

Re: Замена выпавших кадров (drop'ов) и SVP

James D
framecount-10 - это борьба с зависанием многопоточного скрипта. Avisynth несовершенен. Конкретно этот скрипт вываливается с ошибкой в самом конце кодирования, когда пытается заполнить буфер кадрами из будущего, которые не существуют (находятся за последним кадром). Эта строчка уменьшает число кадров, подрезая видео с конца на 10 кадров. Вычисляется как число потоков*2. В твоем случае надо 8*2 = 16 кадров. Выведено эмпирически.

Кстати. 5 потоков в оригинальном скрипте - это уже много. 8 - перебор. Рекомендую 2-3. Оставшиеся свободными ядра процессора x264 успешно займет. wink

127 (edited by James D 23-01-2015 15:45:22)

Re: Замена выпавших кадров (drop'ов) и SVP

Кстати. 5 потоков в оригинальном скрипте - это уже много. 8 - перебор. Рекомендую 2-3. Оставшиеся свободными ядра процессора x264 успешно займет. wink
Число кадров - это 2*Кол-во логических ЯдерЦПУ или 2*Кол-во MT Threads? Подозреваю - первое.
x264 будет использовать все ядра независимо от значения SetMT? Подозреваю, что да.

Я нашел причину на моем компе. Avisynth 2.6MT дает баг в этом случае...
Если не включать в скрипт SetMTMode - все будет без надписи! Если же включить MTMode - надпись появляется даже если threads=1.
P.S. Если писать SetMTMode росле #####FILTERING##### Xvid4PSP 5 MT все равно не включает - потому-то у меня вчера все работало.

У Вас есть мысли как исправить ситуацию? Хотите, включу debug mode и дам вам инфо (хоть и не знаю как smile )?

Я поставил Avisynth 2.5MT из SVP. Из минусов - декодирование видео DirectShowSource при добавлении файла в Xvid4PSP отказалось работать! На этапе Кэширования "don't know function DirectShowSource" или что-то такое.
После выбора FFMS2 я вручную выставил для видео DDS и пришлось добавлять плагин DDS.dll в скрипт.

Из еще минусов:
- Процессор работает на 60% вместо 100%
- x264 крашится почти сразу после достижения 3ГБ ОЗУ на процесс. avs4x264 - чуть позже при 4ГБ ОЗУ.
- мой хард теперь жутко скрипит от работы даже если кодирование на паузе. Раньше такое было.

ИТОГ: ИСПРАВИТЬ ВИДЕО НА МОЕМ КОМПЬЮТЕРЕ НЕВОЗМОЖНО, кроме как без MT с 6 к/с и 30% загруженностью.


Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\AudioFunctions.avs")
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\VideoFunctions.avs")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\FFMS2.dll")
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\FFMS2.avsi")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\DirectShowSource.dll")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\bass\bassAudio.dll")

global svp_scheduler=true
global threads=3
global svp_cache_fwd=threads+10
SetMTMode(3,threads)

video = DirectShowSource("E:\Documents\Desktop\Left 4 Dead 2 01.21.2015 - 17.10.17.03.DVR.mp4", FPS=60, convertfps=true)
audio = bassAudioSource("T:\Temp\0004_0.aac")
AudioDub(video, audio)

SetMTMode(2)
ConvertToYV12()

###[FILTERING]###
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\svpflow1.dll")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\svpflow2.dll")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\MVtools2mod.dll")
LoadPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\masktools2-25.dll")

КОД-КОД-КОД-КОД-НЕ-МЕНЯЛ-ЕГО-КОД-КОД-КОД

trim(0,framecount-10)
###[FILTERING]###
Distributor()

128 (edited by James D 15-02-2015 13:51:18)

Re: Замена выпавших кадров (drop'ов) и SVP

Вот маленький вопрос появился чисто из интереса. Если я хочу видео 30к/с отдропфиксить, а после этого еще и уплавнить до 60. Выше я увидел, что предлагается просто в источнике скрипта dropfix вписать ConvertFPS=True, FPS=60. Что, реально так работать будет? Просто 30>60 уже добавляет один дроп на кадр. А значит в сложных случаях с 3-мя дропами в исходнике их будет уже 6?

Я думал раньше может скрипт должен быть таким:
DSS(source,convertfps=true,fps=30)
{Dropfix script}
{input
src=last
Interframe doublefps script}
Ну или что-то в этом роде (без {} скобок и input).

И второй вопросик. Какой лучше декодер использовать для dropfix: DSS или ffdshow? Просто только с первым рассинхрона со звуком у vfr вроде не бывает.

И последний big_smile На MT Avisynth в скрипте убирается кол-во кадров threads*2, так? А нельзя в конце скрипта добавить это количество кадров? Типа src=last++Trim(framecount-10,framecount)

Re: Замена выпавших кадров (drop'ов) и SVP

James D
6 к/с и 30% загруженностью.

у меня вроде 12 кадров и 70-90 % загрузки, иногда бывает 100% вроде,  hmm разве так не должно быть?

Уважаемые, где можно достать видео, для подопытов, где бы очень отчетливо было бы видно как работает скрипт, я использую gamedropfixv4 чисто в профилактических целях(попытки использовать все для максимум качества видео-контента), но вот незадача, я на глаз не могу определить дропы, а из-за того что запуск скрипта у меня через костыли, я засомневался в его работоспособности. Хотя, это наверное тупая просьба  big_smile  в любом случаи, было бы не плохо мне разобраться, дабы я зря не переганял видео. Как можно провести тест?

я для избавления от ошибки (I don't know what "fix_clip") добавил

SetMTMode(2)
function DropFix(clip Input, int "Threads")
{
Input

src=last
..........
........
......
....
...
      ? (AvgFix_next3==lr33 || AvgFix_next3==l50) ? fix125.trim(1,0) : fix133.trim(1,0) : \
    last
")

trim(0,framecount-10)
}
Distributor()

кстати, во время кодирования, нагрузки на видеокарту нет, я где-то не внимательно прочел, или нельзя никак помочь процессору при кодировании?


прошу еще помощи, как мне соединить сразу два\три скрипта?
хочу чтобы все проходило за один раз.
к примеру как к gamedropfixv4 добавить такой вот скрипт :

source = "Source.mp4"
SetMTMode(2, 2)
DirectShowSource("Source.avi")
#AudioDub(FFVideoSource(source), FFAudioSource(source))
ConvertToYV12()
super = MSuper(pel=4)
backward_vectors = MAnalyse(super, isb=true, truemotion=true, lambda=1750, pnew=200, dct=6)
forward_vectors = MAnalyse(super, isb=false, truemotion=true, lambda=1575, pnew=200, dct=6)
MFlowBlur(super, backward_vectors, forward_vectors, blur=75)

заранее спасибо за помощь

130

Re: Замена выпавших кадров (drop'ов) и SVP

fastneed
Как можно провести тест?
Взять с ютуба любое видео игрового процесса. Там практически ВСЕГДА есть выпавшие кадры. Результат смотреть листая результат покадрово либо в плеере, либо открыв скрипт в редакторе avsPmod.

для избавления от ошибки (I don't know what "fix_clip") добавил
Возможно, это хорошее решение. А где вызов из основного скрипта этой функции DropFix?

нагрузки на видеокарту нет
Какая видеокарта? Вероятно мощная, тогда нагрузка от скрипта для нее - семечки.

как к gamedropfixv4 добавить такой вот скрипт
последние 4 строчки скрипта

super = MSuper(pel=4)
backward_vectors = MAnalyse(super, isb=true, truemotion=true, lambda=1750, pnew=200, dct=6)
forward_vectors = MAnalyse(super, isb=false, truemotion=true, lambda=1575, pnew=200, dct=6)
MFlowBlur(super, backward_vectors, forward_vectors, blur=75)

вставить в самый конец перед Distributor().

131 (edited by James D 08-03-2015 07:44:15)

Re: Замена выпавших кадров (drop'ов) и SVP

fastneed
Избавить от ошибки и сделать скрипт рабочим - разные вещи. Он просто ничего не делает lol
берете скрипт и в функциях subtle ставите 120 вместо 12. Убираете все setMT и смотрите. Если есть хоть один желтый текск FIX## - фикс на этом видео хоть раз сработал/работает.

И вообще, не злоупотребляйте этим скриптом, разве что для vfr>cfr. Он был сделан под 720p и 60fps (и BF4). Лично мне на 30к/с 1080p в зависимости от ситуации он мог принимать натуральные кадры за дроп, давая расплывчатые артефакты, + не говоря про пропуски иногда. Ненужные артефакты ухудшают качество кодирования, особенно на высоких crf (22.7) - блюра много больше.
Такой пример я уже удалил, но есть наоборот, с пропусками. Поменял min_move на ноль и max_stop от балды на 2 (не понял что значит) и так убрало все дропы из 4 кроме всего одного. На хорошей картинке, думаю, min_move всегда 0 нужен.
без фикса - http://www.ex.ua/load/365703559182/154864239?fs_id=135
с измененным фиксом - http://www.ex.ua/load/365703559182/154864418?fs_id=135
дефолтный фикс - http://www.ex.ua/load/365703559182/154864611?fs_id=135

132 (edited by fastneed 08-03-2015 19:25:25)

Re: Замена выпавших кадров (drop'ов) и SVP

James D
берете скрипт и в функциях subtle ставите 120 вместо 12. Убираете все setMT и смотрите
повисает все(в часности megui) а без удаления "setMT" в превью не видел текста, может видео без дропов, попробую другие.
значит ли это, что на замененных выпавших кадрах, если просматривать по одному, можно найти кадр желтым текстом маленьким шрифтом?(в оригинальном скрипте)
MAG79
Возможно, это хорошее решение. А где вызов из основного скрипта этой функции DropFix?
мне такое решение где-то попалось на глазах, вроде в этой ветке, наверное еще на стадии обсуждения, и там не было написано конкретно что и куда вставить, поэтому я вас не понимаю. изначально в скрипте такой функции нет значит? а как ее добавить?

MAG79
последние 4 строчки скрипта вставить в самый конец перед Distributor().
отлично, я пока еще не безнадежен, если не учитывать то, что я прогонял видео и возможно скрипт не работал  lol , но я пытался делать точно как вы указываете, и софт megui 2507 которым я пользуюсь, как только появлялось окошко с превьюшкой, сразу закрывался с ошибкой "прекращена работа программы"  а XviD4PSP v5.10.330.0 закрывается с ошибкой runtime C++, если удалить 4 эти строки, скрипт открывается без ошибок.

скрипт как он есть, с 4 вставленными строками. В самом начале я наверное нахимичил, я и пытался слушать ваши советы(уже ж обращался к вам) но оно все засыпало ошибками, и методом тыка все тыкал и тыкал надеясь на свет в конце тунеля. В итоге он наверное ничего не делает да? ..

SetMemoryMax(2048)
global svp_scheduler=true
global threads=4
global svp_cache_fwd=threads+8
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\mvtools2.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\svpflow1.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\svpflow2.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\nnedi3ocl.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\avss.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\mt_masktools25.dll")
LoadPlugin("c:\Program Files (x86)\AviSynth 2.5\plugins\mt_masktools26.dll")
LoadPlugin("M:\soft\Video Edit\MeGUI\tools\ffms\ffms2.dll")
SetMTMode(3,threads)
source = "m:\l2\Source.mp4"
AudioDub(FFVideoSource(source), FFAudioSource(source))
ConvertToYV12()
SetMTMode(2)
function DropFix(clip Input, int "Threads")
{
Input
src=last
super_params_mini="{scale:{up:0},gpu:1}"
analyse_params_mini="{block:{w:8,h:8}}"
miniW = int(width/64)*32
miniW = (miniW<320) ? 320 : miniW
miniH = int(height/64)*32
miniH = (miniH<160) ? 160 : miniH
mini=BicubicResize(miniW,miniH).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(miniW/8, miniH/8).PointResize(miniW/4, miniH/4).ConvertToYV12().mt_lut(y=2, u=128, v=128)
VerticalSpeed_luma=mini.MMask(vectors_Forward, kind=4).convertToRGB32().PointResize(miniW/8, miniH/8).PointResize(miniW/4, miniH/4).ConvertToYV12().mt_lut(y=2, u=128, v=128)

size=16
luma_lft=HorizontalSpeed_luma.crop(0,0,miniW/16,0).BicubicResize(size,size)
luma_rgh=HorizontalSpeed_luma.crop(miniW/16+miniW/8,0,0,0).BicubicResize(size,size)
luma_top=VerticalSpeed_luma.crop(0,0,0,miniH/16).BicubicResize(size,size)
luma_btm=VerticalSpeed_luma.crop(0,miniH/16+miniH/8,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)

    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)
}
super = MSuper(pel=4)
backward_vectors = MAnalyse(super, isb=true, truemotion=true, lambda=1750, pnew=200, dct=6)
forward_vectors = MAnalyse(super, isb=false, truemotion=true, lambda=1575, pnew=200, dct=6)
MFlowBlur(super, backward_vectors, forward_vectors, blur=75)
Distributor()

133 (edited by James D 08-03-2015 20:39:52)

Re: Замена выпавших кадров (drop'ов) и SVP

fastneed wrote:

повисает все(в часности megui)

Ну блин, distributor() тоже. Открываете xvid, avisynth, Мультипоточность и видите черным по белому все, что нужно для МТ.

Если бы скрипт работал - вы бы портили видео big_smile Чтобы текста желтого не было - убираете все ".Subtitle("fix50", align=3, size=12)".
У меня второй скрипт с size 120 для проверки все ли правильно работает.
Для помощи в скриптописании идите лучше сюда, здесь редко помогают. http://rutracker.org/forum/viewtopic.ph … start=1890

Re: Замена выпавших кадров (drop'ов) и SVP

James D
distributor() тоже
да, измененный скрипт с size запустился, и даже со  вторым скриптом(кстати, почему так - ни понять),  но на видео не увидел ничего замененного. что скорей всего означает что скрипт не работает. Так что надеюсь на помощь от MAG79.

James D
Для помощи в скриптописании идите лучше сюда
я там был, в целом я уже везде был. И мне там врятле помогут, никому не хочется колупаться в чужих скриптах, тем более направленных на игровую тематику.
James D
здесь редко помогают
пока что вполне удивляют. Вот вы к примеру, частично помогли в течении часа   tongue
в целом, мне и не надо много, я пытался разобраться, но это сложновато, голова работает в другом направлении   smile  так что без помощи, на одних мануалах, не разберусь.

135 (edited by James D 09-03-2015 01:56:30)

Re: Замена выпавших кадров (drop'ов) и SVP

Я помог не частично - я уже по второму кругу помогаю. Любой другой бы уже давным давно воспользовался моим файлом, на котором можно с уверенностью проверять работу скрипта ибо я выложил 2 файла к нему в дополнение для наглядного примера, что на нем дропы есть и они детектятся даже на дефолте, и проверил бы на нем свои скрипты. Я так же показал какие параметры для лучшего детектирования дропов нужно менять, объяснил почему старый скрипт не работал и как исправить...
В общем ладно, я тоже заканчиваю.

Re: Замена выпавших кадров (drop'ов) и SVP

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

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

137 (edited by James D 31-03-2015 11:43:00)

Re: Замена выпавших кадров (drop'ов) и SVP

MAG,
заснял видео с экрана онлайн плеера 15 фпс в 30 фпс. кадры и дропы не всегда через раз, а 2 по 2 бывают идут. Есть возможность в скрипте значение поменять так, чтоб любой дубль считался за дроп?
Сделал лосслесс апскейл до ФуллХД и ни одного дропа скрипт не выявил.
Апдейт: поднял min_move до 700 - вроде работает.

138

Re: Замена выпавших кадров (drop'ов) и SVP

James D
кадры и дропы не всегда через раз, а 2 по 2 бывают идут.
Скрипт GameDropFix_v4 такие последовательности вполне корректно обрабатывает.

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

---
поднял min_move до 700
Чего-то как-то сильно поднял. По-умолчанию min_move=0.2 hmm

139 (edited by James D 31-03-2015 12:54:20)

Re: Замена выпавших кадров (drop'ов) и SVP

Уважаемый MAG, скажу как есть - ваш скрипт в комплекте с SVP библиотеками - просто чудо программной мысли!
Как уже добавил выше, после того, как поднял min_move до 700, а так же move_idx=1, y_idx=1, max_stop=0 - скрипт не только начал понимать где дропы, но и правильно оставил оригинальные кадры, хотя кое где они повторялись даже трижды подряд!

Осталось только понять почему цвета не совпадают даже при lossless, но это уже проблемы настройки кодирования. Наверное color matrix поменять надо.

140 (edited by Vivian 04-04-2015 21:36:01)

Re: Замена выпавших кадров (drop'ов) и SVP

А в играх может быть лаг без выпадения кадров? На моем примере на 10 кадре равномерность движения пропадает, и игра как бы запинается, а потом на 11 кадре делает резкий компенсирующий скачок вперед . https://yadi.sk/i/7mNNAumMfmHTD

С лагами видео с ютуба уплавнишь, и плакать хочется, так как они становятся заметнее, и в играх теперь отвлекаешься на лаги, бросаются в глаза просто... избалованность big_smile

Re: Замена выпавших кадров (drop'ов) и SVP

Вообще - да, но на подобном - нет. Слишком много разных векторов, движение по всему экрану.

Re: Замена выпавших кадров (drop'ов) и SVP

Я обнаружил, что в VirtualDub, в фильтре resize, при использовании метода Nearest neighbor яркость и цветность видеокадра смещаются друг относительно друга по диагонали юго-запад - северо-восток. И кажется такой эффект у меня не только от самого ресайза, но и от скрипта GameDropFix_v4. Я открыл его и увидел, что там используется функция PointResize. Сделал скрипт, эффект тот же.

143

Re: Замена выпавших кадров (drop'ов) и SVP

crystallize
яркость и цветность видеокадра смещаются друг относительно друга по диагонали юго-запад - северо-восток
Это вполне может быть. Цель была взять самый быстрый ресайзер. Можно попробовать заменить на SimpleResize от Tom Barry.
Хотя, надо конечно мне уделить этому свое время и разобраться с этим смещением. Вроде бы я этот PointResize использовал только для масок. hmm

Re: Замена выпавших кадров (drop'ов) и SVP

MAG79 wrote:

crystallize
яркость и цветность видеокадра смещаются друг относительно друга по диагонали юго-запад - северо-восток
Это вполне может быть. Цель была взять самый быстрый ресайзер. Можно попробовать заменить на SimpleResize от Tom Barry.
Хотя, надо конечно мне уделить этому свое время и разобраться с этим смещением. Вроде бы я этот PointResize использовал только для масок. hmm

А нет, там всё ещё интереснее, цветность также съезжает если читать файл не в RGB.

145 (edited by Ghostlamer 16-05-2015 00:47:54)

Re: Замена выпавших кадров (drop'ов) и SVP

MAG79, не подскажите, как повысить чувствительность скрипта gamedropfix, чтобы он фиксил больше чем тройные дропы, я делаю одно видео по старой игре, всё это дело в эмуляторе, но судя по всему в игре самой изначально есть места где она чего-то подгружает(под dos ещё написана) и там наблюдаются дропы аж по 23 кадра подряд, т.е это время статичная картинка, а потом происходит резкий скачёт...
4 версия такие дропы не ловит вообще, даже если вначале в 22 кадре и в конце 24, есть движение, всё что перед ними она более менее фиксит, а когда начинается большой дроп, то просто тупо всё без изменений оставляет.
Можно как-то скрипт настроить так, что в этих местах принудительно интерполяция была...
Сэмпл https://cloud.mail.ru/public/FE8Fctf1LwBy/6015-6038.avi
Кодек MagicYUV http://magicyuv.com/index.php/download/magicyuv

C 50 по 70 кадры - один большой дроп.
Мне не важен корректный детект в этих местах, они у меня вырезаны в куски, мне просто там тупо вместо это статичной картинки, интерполяция нужна, чтобы она не была статичной.
Пока нашёл решение следущее, скрипт InterpolateFrames2, который сделан чтобы интерполировать бракованные кадры, но и с моей ситуацией помог,  указал там InterpolateFrames2(49,22), с какого кадра идут якобы бракованные кадры(в моём случае большой дроп) и сколько их подряд и вполне неплохо пофиксил, в движении на ура смотрится, то что мне нужно было, получилось, корабль перестал стоять как истукан 23 кадра подряд и начал двигаться в этом диапазоне.
Хотелось бы, чтобы и в gamedropfix было, что-то подобное, ну как бы ручной режим, где тупо надо указать диапазон что откуда и сколько интерполировать.
Только теперь странно выглядит, в старых квестах как было, там одно движение, потом несколько кадров статика и потом опять движение, прерывистые были, теперь после интерполяции корабль летит летит себе, потом начинает очень супер-гипер-мега плавно лететь, а затем опять возвращается к своему старому движению.. big_smile

Post's attachments

InterpolateFrames2.avsi 11.3 kb, 434 downloads since 2015-05-15 

Re: Замена выпавших кадров (drop'ов) и SVP

Ghostlamer wrote:

MAG79, не подскажите, как повысить чувствительность скрипта gamedropfix, чтобы он фиксил больше чем тройные дропы, я делаю одно видео по старой игре, всё это дело в эмуляторе, но судя по всему в игре самой изначально есть места где она чего-то подгружает(под dos ещё написана) и там наблюдаются дропы аж по 23 кадра подряд, т.е это время статичная картинка, а потом происходит резкий скачёт...
4 версия такие дропы не ловит вообще, даже если вначале в 22 кадре и в конце 24, есть движение, всё что перед ними она более менее фиксит, а когда начинается большой дроп, то просто тупо всё без изменений оставляет.
Можно как-то скрипт настроить так, что в этих местах принудительно интерполяция была...
Сэмпл https://cloud.mail.ru/public/FE8Fctf1LwBy/6015-6038.avi
Кодек MagicYUV http://magicyuv.com/index.php/download/magicyuv

C 50 по 70 кадры - один большой дроп.
Мне не важен корректный детект в этих местах, они у меня вырезаны в куски, мне просто там тупо вместо это статичной картинки, интерполяция нужна, чтобы она не была статичной.
Пока нашёл решение следущее, скрипт InterpolateFrames2, который сделан чтобы интерполировать бракованные кадры, но и с моей ситуацией помог,  указал там InterpolateFrames2(49,22), с какого кадра идут якобы бракованные кадры(в моём случае большой дроп) и сколько их подряд и вполне неплохо пофиксил, в движении на ура смотрится, то что мне нужно было, получилось, корабль перестал стоять как истукан 23 кадра подряд и начал двигаться в этом диапазоне.
Хотелось бы, чтобы и в gamedropfix было, что-то подобное, ну как бы ручной режим, где тупо надо указать диапазон что откуда и сколько интерполировать.
Только теперь странно выглядит, в старых квестах как было, там одно движение, потом несколько кадров статика и потом опять движение, прерывистые были, теперь после интерполяции корабль летит летит себе, потом начинает очень супер-гипер-мега плавно лететь, а затем опять возвращается к своему старому движению.. big_smile

Повышайте значение limits:{scene:
Я рекомендую для начала отключить все пост-фильтры и записать видео в натуральном разрешении игры. Потом вот мне MAG79 объяснял про настройку скрипта: http://www.svp-team.com/forum/viewtopic … 098#p41098
И ещё, чтобы цветность не уезжала, рекомендую сменить в скрипте PointResize на BicubicResize/BilinearResize, либо на SimpleResize.
Кстати, а как вы этот формат MagicYUV открываете скриптом?

147

Re: Замена выпавших кадров (drop'ов) и SVP

Ghostlamer wrote:

MAG79, не подскажите, как повысить чувствительность скрипта gamedropfix, чтобы он фиксил больше чем тройные дропы, я делаю одно видео по старой игре, всё это дело в эмуляторе, но судя по всему в игре самой изначально есть места где она чего-то подгружает(под dos ещё написана) и там наблюдаются дропы аж по 23 кадра подряд, т.е это время статичная картинка, а потом происходит резкий скачёт...
4 версия такие дропы не ловит вообще, даже если вначале в 22 кадре и в конце 24, есть движение, всё что перед ними она более менее фиксит, а когда начинается большой дроп, то просто тупо всё без изменений оставляет.
Можно как-то скрипт настроить так, что в этих местах принудительно интерполяция была...
Сэмпл https://cloud.mail.ru/public/FE8Fctf1LwBy/6015-6038.avi
Кодек MagicYUV http://magicyuv.com/index.php/download/magicyuv

C 50 по 70 кадры - один большой дроп.
Мне не важен корректный детект в этих местах, они у меня вырезаны в куски, мне просто там тупо вместо это статичной картинки, интерполяция нужна, чтобы она не была статичной.
Пока нашёл решение следущее, скрипт InterpolateFrames2, который сделан чтобы интерполировать бракованные кадры, но и с моей ситуацией помог,  указал там InterpolateFrames2(49,22), с какого кадра идут якобы бракованные кадры(в моём случае большой дроп) и сколько их подряд и вполне неплохо пофиксил, в движении на ура смотрится, то что мне нужно было, получилось, корабль перестал стоять как истукан 23 кадра подряд и начал двигаться в этом диапазоне.
Хотелось бы, чтобы и в gamedropfix было, что-то подобное, ну как бы ручной режим, где тупо надо указать диапазон что откуда и сколько интерполировать.
Только теперь странно выглядит, в старых квестах как было, там одно движение, потом несколько кадров статика и потом опять движение, прерывистые были, теперь после интерполяции корабль летит летит себе, потом начинает очень супер-гипер-мега плавно лететь, а затем опять возвращается к своему старому движению.. big_smile

У вас семпл 60 фпс, может дадите исходник и я поколдую? В прошлом году чисто ради эксперимента разгонял видео 15 фпс до 60 https://yadi.sk/i/TQCYXC7XgfZBY , а вот результат https://yadi.sk/i/VfYwqGLUd7PM5 . Можно заметить, как забавно одна картинка перетекает в другую, создается ощущение, что картинка жидкая. Дропы? Не, не слышал!

148 (edited by Ghostlamer 16-05-2015 15:58:07)

Re: Замена выпавших кадров (drop'ов) и SVP

crystallize, постфильтр у меня работает через шейдеры видеокарты GTX 980, проблем с производительностью нет вообще, загрузка GPU при этом от 0 до 1%.

Повышайте значение limits:{scene: limits:{scene:

Спасибо, в след.видео если будут дропы, тогда буду этот вариант крутить.

Кстати, а как вы этот формат MagicYUV открываете скриптом?

Через avisource, контейнер-то avi.

Nurk, у меня видео не растянуто до 60 fps при помощи дубль кадров, эта старая игра, может реально там 15 fps, но она рендерится в родном разрешении при 70 кадров в сек, у меня же вообще ограничено до 59.940.

исходник и я поколдую

Исходник вообще 70 кадров в сек и мало чем отличается от того, что я выложил.
Тем более это старый квест, там это норма, вначале кадр с движением, затем 3 или 4 без, а вот 20 и больше - уже дроп, но там и в оригинале сама игра немного такая.
Нормально она записывается только при 60 или 70 кадрах в сек, всё что меньше приводит к дополнительным дропам, т.е есть в семпле это самый лучший и почти натуральный вариант.
Да и запись вёл из DOSBox SVN Daum, режим Direct3D.
Если в досбоксе игра изначально рендерится при каком-то опр.количестве кадров, то на более низком фреймрейте лучше вообще не записывать, получается не особо хорошо, до кучи левых дропов и прочего, это вам не современную игру - взял да записал на любом фреймрейте.
В досбоксе свои заморочки, там чтоб нормально(определённые игры) записать(ближе к оригиналу) надо выставить частоту обновления моника(при записи) максимально верно, у меня везде пишется что 60 герц монитор, а в реале как раз 59.940.

Re: Замена выпавших кадров (drop'ов) и SVP

Nurk
как забавно одна картинка перетекает в другую

это не забавно, это фиговый детект смены сцен
хотя может там постоянный фейд-ин/аут, не очень понятно

150 (edited by Ghostlamer 16-05-2015 15:47:52)

Re: Замена выпавших кадров (drop'ов) и SVP

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

https://cloud.mail.ru/public/d5i39uMXDG … olated.mkv