# Video Depth Anything 深度序列教程

对三秒原创运动片运行视频深度模型，导出原始NPZ与EXR，再检查帧数、数组和同一实体的时间变化。视频深度图颜色看起来平滑，不足以证明数值没有漂移。

## 执行范围

已执行：Blender 5.2.1原创几何、真实相机渲染、UV展开、CPU手工材质烘焙、GLB/OBJ导出重载；本题附带离线检查。未执行：目标项目模型下载/推理、Gradio运行、生成纹理/深度/视频mask。reference、geometry-reference、original命名文件都是原创输入或手工参考，绝非模型结果。官方图片只在网页按来源引用。

## 步骤

### 1. 保留36帧原片和时间基准

input.mp4是640×360、12fps、36帧的原创双玩具运动片；先用ffprobe读取时长与帧率。不要为了看起来顺滑先补帧，否则深度序列不再对应这份输入。

### 2. 按官方规格选择Small视频模型

官方run.py用--encoder vits选择Small，并从checkpoints/video_depth_anything_vits.pth加载相对视频权重。--metric是另一组权重；本题默认相对深度，不能把输出称为米。

### 3. 同时导出可视视频与原始深度

使用--target_fps -1保留原fps，开启--save_npz和--save_exr。官方脚本把NPZ存为depths键，把EXR写成逐帧Z通道；不把_vis.mp4里的灰度像素当作原始浮点深度。

### 4. 先检查数组，再谈画面稳定性

inspect-video-depth.py拒绝缺depths键、非N×H×W、NaN及帧数不符。它生成首中尾预览仅供查看；每帧分别归一化会掩盖数值尺度漂移，不能据此直接下稳定结论。

### 5. 用跟随对象的区域看原始值

两只玩具在移动，固定画面中心可能从玩具切到后墙。对同一实体逐帧记录区域或结合人工核对的mask，再比较原始值；不要把不同物体的值连成“同一对象深度曲线”。

### 6. 核对EXR顺序和合成读入设置

确认EXR序列从frame_00000开始且数量一致，用线性数据读取Z通道；不要自动套用显示色彩转换后再进行深度运算。导入后看首尾帧和运动方向，记录闪烁或对象边缘突变。

### 7. 保存真实输出与未运行边界

本包有原片、脚本、参数和格式负例检查，模型及EXR推理尚未执行。reference-depths.npz是已知几何参考的重复序列，只测试解析器，不能当作视频模型“完全不闪”的证据。

## 命令

```bash
SPATIAL_LESSON_DIR="$PWD"
cd /path/to/Video-Depth-Anything
python run.py --input_video "$SPATIAL_LESSON_DIR/input.mp4" --output_dir "$SPATIAL_LESSON_DIR/actual-video-depth" --encoder vits --target_fps -1 --save_npz --save_exr
cd "$SPATIAL_LESSON_DIR"
python inspect-video-depth.py actual-video-depth/input_depths.npz --expected-frames 36 --out actual-depth-inspection
```

## 参考文件

- 以“本题实际文件”列表为准：original-toy.png或front.png/views为Blender原创输入。
- 若本包含reference-colored.glb：它是手工材质参考。
- 若本包含reference-textured.obj/MTL/PNG：它们是Blender真实UV/烘焙交换文件。
- 若本包含geometry-reference-depth.npy/PLY：它们是原创场景已知几何，非深度模型预测。
- runtime.json：目标模型初始not-executed。
- verification.json / blender-reload.json：文件及重载证据，不是模型生成证据。

## 官方依据

https://github.com/DepthAnything/Video-Depth-Anything
https://github.com/DepthAnything/Video-Depth-Anything/blob/main/run.py

## 本题实际文件

- `blender-reload.json`
- `commands.md`
- `extract-frames.sh`
- `geometry-reference-depth.npy`
- `geometry-reference-inspection/frame-00000.png`
- `geometry-reference-inspection/frame-00018.png`
- `geometry-reference-inspection/frame-00035.png`
- `geometry-reference-inspection/inspection.json`
- `geometry-reference-pointcloud.ply`
- `helper-checks.json`
- `input-00000.png`
- `input-00018.png`
- `input-00035.png`
- `input-manifest.json`
- `input.mp4`
- `inspect-video-depth.py`
- `original-toy.png`
- `reference-depths.npz`
- `review.csv`
- `room-camera.json`
- `room.png`
- `runtime.json`
- `verify.py`

模型命令仅供在你准备好的官方环境执行；from_pretrained类入口首次运行可能拉取大权重，本轮没有执行。
