# av.video 库模块帮助文档

<details>  <summary>说明</summary>  <p>
av.video - 动效工具：时间与运动（缓动/关键帧/弹簧/种子噪声）、颜色、帧缓冲

设计原则：不包装 gdip 绘图原语，只补 gdip 没有的东西。
帧是时间的纯函数 f(t)：这里所有函数都不累积状态，随机数全部来自种子（任意帧可随机访问、可重复）。
</p></details>

## av.video 成员列表 <a id="av.video" href="#av.video">&#x23;</a>

### av.video.animated(v) <a id="av.video.animated" href="#av.video.animated">&#x23;</a>
v 是否随时间变化（关键帧或函数）

### av.video.argb(r,g,b,a) <a id="av.video.argb" href="#av.video.argb">&#x23;</a>
合成 0xAARRGGBB 颜色

### av.video.beat(bpm,n) <a id="av.video.beat" href="#av.video.beat">&#x23;</a>
第 n 拍的时刻（秒）

### av.video.color(v) <a id="av.video.color" href="#av.video.color">&#x23;</a>
解析颜色："#RRGGBB"、"#AARRGGBB"、"#RGB" 或数值（0xRRGGBB 视为不透明）

### av.video.contrast(c1,c2) <a id="av.video.contrast" href="#av.video.contrast">&#x23;</a>
WCAG 对比度 1~21

### av.video.decay(t,freq,damping) <a id="av.video.decay" href="#av.video.decay">&#x23;</a>
衰减振荡 0→摆动→0，用于落地挤压、晃动

### av.video.ease(name,t) <a id="av.video.ease" href="#av.video.ease">&#x23;</a>
按名称取缓动函数（忽略大小写，可省略 ease 前缀），指定 t 则返回缓动后的值；  
未知名称报错并列出可选值

### av.video.easing <a id="av.video.easing" href="#av.video.easing">&#x23;</a>
缓动函数表（Penner 名称：linear,easeInQuad,easeOutCubic,easeOutBack,easeOutElastic,easeOutBounce 等）

### av.video.fade(c,a) <a id="av.video.fade" href="#av.video.fade">&#x23;</a>
把颜色的 alpha 乘以 a

### av.video.frame(width,height) <a id="av.video.frame" href="#av.video.frame">&#x23;</a>
创建帧缓冲：自有内存的 PARGB 位图，  
gdip 画在 bitmap 上即写进 buffer，像素内核直接处理 buffer  

[返回对象:avVideoFrameObject](#avVideoFrameObject)

### av.video.hash(i,seed) <a id="av.video.hash" href="#av.video.hash">&#x23;</a>
32 位整数哈希

### av.video.keyframes(kfs,t) <a id="av.video.keyframes" href="#av.video.keyframes">&#x23;</a>
关键帧插值，kfs 为 {{t,v[,ease]},...}，段的缓动写在段末点（默认 easeInOutSine）

### av.video.luminance(c) <a id="av.video.luminance" href="#av.video.luminance">&#x23;</a>
相对亮度 0~1

### av.video.mixColor(c1,c2,t) <a id="av.video.mixColor" href="#av.video.mixColor">&#x23;</a>
颜色插值

### av.video.noise(x,seed) <a id="av.video.noise" href="#av.video.noise">&#x23;</a>
一维平滑噪声 [-1,1]

### av.video.progress(v,a,b) <a id="av.video.progress" href="#av.video.progress">&#x23;</a>
把 v 从 [a,b] 映射到 [0,1] 并截断。  
截断到任意区间、线性插值用内置的 math.clamp、math.lerp

### av.video.random(seed,i) <a id="av.video.random" href="#av.video.random">&#x23;</a>
[0,1) 种子随机数，同一 seed,i 总是同一个值

### av.video.randomRange(seed,i,a,b) <a id="av.video.randomRange" href="#av.video.randomRange">&#x23;</a>
[a,b) 种子随机数

### av.video.rgba(c) <a id="av.video.rgba" href="#av.video.rgba">&#x23;</a>
拆成 r,g,b,a

### av.video.smoothstep(a,b,v) <a id="av.video.smoothstep" href="#av.video.smoothstep">&#x23;</a>
平滑阶跃 0~1

### av.video.snap(t,fps) <a id="av.video.snap" href="#av.video.snap">&#x23;</a>
对齐到最近的帧

### av.video.spring(t,freq,damping) <a id="av.video.spring" href="#av.video.spring">&#x23;</a>
弹簧从 0 到 1 的解析解，freq 默认 2Hz，damping 阻尼比默认 0.5

### av.video.u32(x) <a id="av.video.u32" href="#av.video.u32">&#x23;</a>
把位运算得到的有符号 32 位数转成无符号

### av.video.value(v,t,def) <a id="av.video.value" href="#av.video.value">&#x23;</a>
求值：v 可为数值、关键帧表或 function(t)，v 为 null 返回 def

### av.video.wiggle(t,freq,amp,seed) <a id="av.video.wiggle" href="#av.video.wiggle">&#x23;</a>
平滑抖动：freq 每秒变化次数，amp 幅度

## avVideoFrameObject 成员列表 <a id="avVideoFrameObject" href="#avVideoFrameObject">&#x23;</a>

### avVideoFrameObject.bitmap <a id="avVideoFrameObject.bitmap" href="#avVideoFrameObject.bitmap">&#x23;</a>
gdip.bitmap 对象  

[返回对象:gdipbitmapObject](https://www.aardio.com/zh-cn/docs/library-reference/gdip/bitmap.html#gdipbitmapObject)

### avVideoFrameObject.buffer <a id="avVideoFrameObject.buffer" href="#avVideoFrameObject.buffer">&#x23;</a>
像素内存（自上而下 BGRA，预乘 alpha）

### avVideoFrameObject.clear(argb) <a id="avVideoFrameObject.clear" href="#avVideoFrameObject.clear">&#x23;</a>
用颜色清空

### avVideoFrameObject.delete() <a id="avVideoFrameObject.delete" href="#avVideoFrameObject.delete">&#x23;</a>
释放

### avVideoFrameObject.flush() <a id="avVideoFrameObject.flush" href="#avVideoFrameObject.flush">&#x23;</a>
让 GDI+ 完成所有绘图，像素内核读写 buffer 前调用

### avVideoFrameObject.graphics <a id="avVideoFrameObject.graphics" href="#avVideoFrameObject.graphics">&#x23;</a>
gdip.graphics 画板（已设 8×8 抗锯齿、像素中心 +0.5）  

[返回对象:gdipgraphicsObject](#gdipgraphicsObject)

### avVideoFrameObject.height <a id="avVideoFrameObject.height" href="#avVideoFrameObject.height">&#x23;</a>
高（像素）

### avVideoFrameObject.save(path,quality) <a id="avVideoFrameObject.save" href="#avVideoFrameObject.save">&#x23;</a>
存为图片

### avVideoFrameObject.stride <a id="avVideoFrameObject.stride" href="#avVideoFrameObject.stride">&#x23;</a>
步幅（字节）

### avVideoFrameObject.width <a id="avVideoFrameObject.width" href="#avVideoFrameObject.width">&#x23;</a>
宽（像素）
