Zastin

Levels thing

Jun 22nd, 2020
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. def LevelsM(clip, points, levels, xpass=[0, 'peak'], return_expr=False):
  2.     qm = len(points)
  3.     peak = [(1 << clip.format.bits_per_sample) - 1, 1][clip.format.sample_type]
  4.    
  5.     if len(set(xpass)) == 1:
  6.         expr = f'x {points[0]} < x {points[-1]} > or {xpass[0]} '
  7.         qm -= 1
  8.     else:
  9.         expr = f'x {points[0]} < {xpass[0]} x {points[-1]} > {xpass[-1]} '
  10.    
  11.     for x in range(len(points) - 1):
  12.         if points[x+1] < points[-1]:
  13.             expr += f' x {points[x+1]} <= '
  14.         if levels[x] == levels[x+1]:
  15.             expr += f' {peak * levels[x]} '
  16.         else:
  17.             expr += f' x {points[x]} - {peak * (levels[x+1] - levels[x])/(points[x+1] - points[x])} * {peak * levels[x]} + '
  18.    
  19.     for _ in range(qm):
  20.         expr += ' ? '
  21.    
  22.     expr = expr.replace('  ', ' ').replace('peak', f'{peak}')
  23.    
  24.     if return_expr:
  25.         return expr
  26.    
  27.     return clip.std.Expr(expr)
Add Comment
Please, Sign In to add comment