Еще немного поработал над задачей замены выпавших кадров.
Меня не устраивала необходимость настройки скрипта под материал (варьирование значением MaxDifInDoubleFrames = 0.2). При низких значениях алгоритм пропускал дропы, а при высоком ошибочно назначал дропами кадры с медленным движением. Причем параметр приходилось настраивать не только для клипа, а даже для отдельных его сцен. Это жутко неудобно.
Поэтому я доработал скрипт. Добавил адаптивности и убрал переменную MaxDifInDoubleFrames. Теперь скрипт сам автоматически подбирает порог в зависимости от динамичности сцены. Кроме этого провел оптимизацию скорости расчетов. Вот вторая версия DoubleDropFix_v2.avs:
DSS2("l2 2011-04-30 23-03-23-38.mp4").ConvertToYV12()
crop(600,300,640,480)
sc=MSuper(pel=1)
vf=MAnalyse(sc,isb=false)
vb=MAnalyse(sc,isb=true)
global frame_50 = MFlowInter(sc,vb,vf,time=50).SubTitle("Fix-50", size=12, align=3)
global frame_33 = MFlowInter(sc,vb,vf,time=33).SubTitle("Fix-33", size=12, align=3).trim(1,0)
global frame_66 = MFlowInter(sc,vb,vf,time=66).SubTitle("Fix-66", size=12, align=3)
global frame_src = last
global mini=sc.crop(8,height+8*3,width/2,height/2).TemporalSoften(1, 1, 0, scenechange=1, mode=2)
last.scriptclip("dif=mini.ydifferencefromprevious()
\ dif_next1=mini.trim(1,0).ydifferencefromprevious()
\ dif_next2=mini.trim(2,0).ydifferencefromprevious()
\ dif_prev1=(mini.trim(1,1)+mini).ydifferencefromprevious()
\ dif_prev2=(mini.trim(1,2)+mini).ydifferencefromprevious()
\ dif_nextMax=max(max(dif,dif_next1,dif_next2)/8,0.01)
\ dif_prevMax=max(max(dif,dif_prev1,dif_prev2)/8,0.01)
\ dif>min(dif_prevMax,dif_nextMax)
\ ? frame_src
\ : dif_next1>dif_nextMax
\ ? dif_prev1>dif_prevMax
\ ? frame_50
\ : dif_prev2>dif_prevMax
\ ? frame_66
\ : frame_src
\ : dif_next2>dif_nextMax
\ ? dif_prev1>dif_prevMax
\ ? frame_33
\ : frame_src
\ : frame_src")
Результат вышел близкий по размеру к предыдущему клипу. Превью 640x480: http://yadi.sk/d/zeHOQlQYtvA2 (43,7 МБ)
Надежность определения дропов значительно возросла и составляет по субъективным ощущениям выше 99%.
Предлагаю сравнить оба ролика на предмет восстановленной плавности движений.
Для удобства сравнения выложил таким же образом кадрированный до 640x480 исходный клип, чтобы можно было сравнить покадрово и не качать весь исходник.
Брать тут: http://yadi.sk/d/YQ_e5-Retyak (38,9 МБ)