AviSynth - výpis luma
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é.
Vím, že se to dá zjistit pomocí histogramu, ale je to docela nepohodlné a zdlouhavé.
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ů.
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...
PS: V těch scriptech vidím jen funkce, které se předpokládám musí nějak spustit...
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.
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)
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)
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)
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.