Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Filmy a seriály, streamovací služby
Televize  |  Projektory
Audio a domácí kina
Multimediální centra  |  Ostatní
Svět hardware  |  Digimanie
Svět mobilně

AviSynth - výpis luma

LuSil (162)|27.4.2015 03:42
Neví někdo o nějakém AviSynth filtru, který by proskenoval video a vypsal které snímky mají nejvyšší, nebo naopak nejnižší hodnoty luma? Chtěl bych nějakým pohodlným způsobem zjistit, které snímky jsou buď přepálené, nebo naopak poddimenzované.

Vím, že se to dá zjistit pomocí histogramu, ale je to docela nepohodlné a zdlouhavé.
KamilZ (10277)|27.4.2015 05:58
LuSil (162)|27.4.2015 13:44
Mohlo by to být ono, jenže nevím přesně co s tím. Vyzkoušel jsem všechny ty scripty a nic to nedělá. Potřebuju, aby mi to vypsalo nějaký log s číslama snímků.
KamilZ (10277)|27.4.2015 13:58
AviSynth nemám, tak si to nastuduj, dokumentace ke scriptování je dost: http://avisynth.nl/index.php/Main_Page

PS: V těch scriptech vidím jen funkce, které se předpokládám musí nějak spustit...
LuSil (162)|27.4.2015 17:11
Tak už to funguje...

Následující script se uloží jako InfoRangeYUV.avsi do složky plugins Avisynthu:
[CODE]function InfoRangeYUV(clip s, int "v") {
global s=s
global MinimumY=255
global MinFrameY=0
global MaximumY=0
global MaxFrameY=0
global MinimumU=255
global MinFrameU=0
global MaximumU=0
global MaxFrameU=0
global MinimumV=255
global MinFrameV=0
global MaximumV=0
global MaxFrameV=0

FrameEvaluate(s,"""\
MinimumY=YPlaneMin(s) FrameEvaluate(last,"""\
MinFrameY=YPlaneMin(s)<=MinimumY?current_frame:MinFrameY""")

FrameEvaluate(last,"""\
MaximumY=YPlaneMax(s)>MaximumY?YPlaneMax(s):MaximumY""")
FrameEvaluate(last,"""\
MaxFrameY=MaximumY<=YPlaneMax(s)?current_frame:MaxFrameY""")

FrameEvaluate(last,"""\
MinimumU=UPlaneMin(s) FrameEvaluate(last,"""\
MinFrameU=UPlaneMin(s)<=MinimumU?current_frame:MinFrameU""")

FrameEvaluate(last,"""\
MaximumU=UPlaneMax(s)>MaximumU?UPlaneMax(s):MaximumU""")
FrameEvaluate(last,"""\
MaxFrameU=MaximumU<=UPlaneMax(s)?current_frame:MaxFrameU""")

FrameEvaluate(last,"""\
MinimumV=VPlaneMin(s) FrameEvaluate(last,"""\
MinFrameV=VPlaneMin(s)<=MinimumV?current_frame:MinFrameV""")

FrameEvaluate(last,"""\
MaximumV=VPlaneMax(s)>MaximumV?VPlaneMax(s):MaximumV""")
FrameEvaluate(last,"""\
MaxFrameV=VPlaneMax(s)>=MaximumV?current_frame:MaxFrameV""")


return scriptclip(last,"""\
subtitle("Global Ymin:"+string(MinimumY)+" Current minY:"+string(YPlaneMin(s))+\
" MinFrameY at: "+string(MinFrameY),y=20).\
subtitle("Global Ymax:"+string(MaximumY)+" Current maxY:"+string(YPlaneMax(s))+\
" MaxFrameY at: "+string(MaxFrameY),y=40).\
subtitle("Global Umin:"+string(MinimumU)+" Current minU:"+string(UPlaneMin(s))+\
" MinFrameU at: "+string(MinFrameU),y=60).\
subtitle("Global Umax:"+string(MaximumU)+" Current maxU:"+string(UPlaneMax(s))+\
" MaxFrameU at: "+string(MaxFrameU),y=80).\
subtitle("Global Vmin:"+string(MinimumV)+" Current minV:"+string(VPlaneMin(s))+\
" MinFrameV at: "+string(MinFrameV),y=100).\
subtitle("Global Vmax:"+string(MaximumV)+" Current maxV:"+string(VPlaneMax(s))+\
" MaxFrameV at: "+string(MaxFrameV),y=120).\
subtitle("MeanY: "+string(AverageLuma(s))+" MeanU: "+string(AverageChromaU(s))+"MeanV: "+string(AverageChromaV(s)),y=160).\
subtitle("Current frame: "+string(current_frame),y=180)\
""",after_frame=true)
}[/CODE]

Pak se do scriptu, kterým se zpracováva video vloží tyhle řádky:
[CODE]InfoRangeYUV()
WriteFileIf(last, "file.log", "(MinimumY<22) && (MaximumY>230)", "current_frame", """ ": MinimumY - " """, "MinimumY", """ " MaximumY - " """, "MaximumY")[/CODE]

Script se načte ve VirtualDubu. Při přehrávání videa se zobrazují titulky s hodnotami YUV a do log souboru se zapíšou čísla snímků, které mají hodnoty luma <22 a >230.