|
| 1 | +# 用手机视频拍 3DGS 场景 — 实操指南 |
| 2 | + |
| 3 | +只讲 **录视频** 这条路线,每一步都给出可以照抄的操作。完整端到端流程见 |
| 4 | +[GS_DATA_COLLECTION.md](GS_DATA_COLLECTION.md),这份文档是它的拍摄章节细化版。 |
| 5 | + |
| 6 | +**Last Updated**: 2026-05-09 |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## TL;DR |
| 11 | + |
| 12 | +> 用手机以 **1080p / 30fps**,**手动锁定曝光对焦白平衡**,匀速绕场景走 **三圈**(高、中、低),全程 **60~120 秒**。回到电脑用 ffmpeg 抽出 100~200 张图,扔进 COLMAP + 3DGS 训练。 |
| 13 | +
|
| 14 | +--- |
| 15 | + |
| 16 | +## Part 1 — 出门前 5 分钟准备 |
| 17 | + |
| 18 | +### 1.1 手机相机怎么调 |
| 19 | + |
| 20 | +不管 iPhone 还是安卓,目标是 **三件事都不变**: |
| 21 | + |
| 22 | +| 要锁定的参数 | iPhone 操作 | 安卓 (大多数) | |
| 23 | +|-------------|------------|---------------| |
| 24 | +| **对焦 AF** | 长按画面任一点 → 出现 "AE/AF 锁定" 黄框 | 切到"专业模式",把对焦拨到 MF(手动),调到中等距离 | |
| 25 | +| **曝光 AE** | 长按之后亮度条会出现,不再自动变 | 专业模式手动设 ISO(100~400)+ 快门(1/100s 起) | |
| 26 | +| **白平衡 WB** | 自带不太好锁,建议用第三方 App | 专业模式选定一个色温(比如 5500K)后不变 | |
| 27 | + |
| 28 | +**强烈推荐 App**(任选其一,免费版都够用): |
| 29 | +- iPhone:**Blackmagic Camera** / **FiLMiC Pro** / **ProMovie** |
| 30 | +- 安卓:**Open Camera**(开源)/ **手机自带的"专业"模式** |
| 31 | + |
| 32 | +打开 App 后这样设: |
| 33 | +``` |
| 34 | +分辨率: 1920x1080 (1080p) |
| 35 | +帧率: 30 fps (不要选 60fps,文件太大没意义) |
| 36 | +ISO: 200~400 之间,固定 |
| 37 | +快门: 1/100s 起步,光线弱可以到 1/60s,不要更慢 |
| 38 | +对焦: MF 手动,调到 1~2 米 |
| 39 | +白平衡: 5000~5500K 固定 |
| 40 | +HDR: 关掉 |
| 41 | +防抖: 开(光学防抖 OIS / 电子防抖 EIS 都可以) |
| 42 | +``` |
| 43 | + |
| 44 | +> 如果只用自带相机也行,最关键的是 **长按锁定对焦曝光**(黄框出现)。 |
| 45 | +
|
| 46 | +### 1.2 场景检查 checklist |
| 47 | + |
| 48 | +开拍前 30 秒走一圈,确认: |
| 49 | + |
| 50 | +- [ ] 风扇 / 空调出风口 → **关掉**(防窗帘/纸张飘) |
| 51 | +- [ ] 屏幕 / 电视 → **关掉或换静态壁纸**(动画破坏 SfM) |
| 52 | +- [ ] 地面玩具 / 散落电线 → 收一收 |
| 53 | +- [ ] 椅子 → 推到不挡路的地方 |
| 54 | +- [ ] 窗帘 / 灯光 → **保持现在这样直到拍完**,中间不要开关灯 |
| 55 | +- [ ] 手机 → 静音、勿扰、电量 ≥ 50% |
| 56 | +- [ ] 拍摄期间 **不让人或宠物走过** |
| 57 | + |
| 58 | +### 1.3 测试 30 秒 |
| 59 | + |
| 60 | +正式开拍前先录 30 秒 demo,回放看一下: |
| 61 | +- 画面有没有抖到糊 |
| 62 | +- 暗处有没有过黑/亮处有没有过曝 |
| 63 | +- 有没有镜头沾灰、起雾 |
| 64 | + |
| 65 | +不行就调整再录。**正式拍只录一次**,不要拍两段拼接(曝光会跳)。 |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +## Part 2 — 怎么走、怎么拍 |
| 70 | + |
| 71 | +### 2.1 整体节奏 |
| 72 | + |
| 73 | +**60~120 秒**。慢就慢,但不能快。 |
| 74 | + |
| 75 | +- 走得太快 → 动态模糊、相邻帧重叠不够 → COLMAP 注册失败 |
| 76 | +- 走得太慢 → 视频太长抽出 200+ 张冗余帧 |
| 77 | + |
| 78 | +**一个简单参考**:从场景一头走到另一头大概用 5~8 秒。 |
| 79 | + |
| 80 | +### 2.2 三圈轨迹 |
| 81 | + |
| 82 | +想象场景中心是个圆心,你绕着它走三圈: |
| 83 | + |
| 84 | +``` |
| 85 | + 俯视图 (你的视角,从天花板往下看场景) |
| 86 | +
|
| 87 | + ╭─────────────────────╮ |
| 88 | + │ │ |
| 89 | + │ ╭───────╮ │ |
| 90 | + │ │ │ │ 绕 3 圈 |
| 91 | + │ │ ★ │ │ ★ = 你想拍的核心区域 / 桌面 / 物体 |
| 92 | + │ │ │ │ |
| 93 | + │ ╰───────╯ │ |
| 94 | + │ │ |
| 95 | + ╰─────────────────────╯ |
| 96 | +
|
| 97 | + 侧视图 |
| 98 | +
|
| 99 | + 圈 1 ─ 高位(把手机举到额头高度,相机略向下) |
| 100 | + 圈 2 ─ 中位(手机端到胸口高度,相机水平) |
| 101 | + 圈 3 ─ 低位(蹲下,相机略向上) |
| 102 | +``` |
| 103 | + |
| 104 | +**每圈大约 20~40 秒**,三圈合起来 60~120 秒。 |
| 105 | + |
| 106 | +### 2.3 三个圈的具体走法 |
| 107 | + |
| 108 | +#### 圈 1 — 高位(举高拍) |
| 109 | + |
| 110 | +- 手机举到 **眉毛 / 额头** 高度 |
| 111 | +- 相机 **略向下倾** 15~25°(看到地面 + 物体顶部) |
| 112 | +- 围绕场景顺时针走一圈,**走得慢**,每两步停 0.5 秒(不是真的停下来,是放慢) |
| 113 | +- 走到最关键的角度(比如桌面正面)时 **再放慢** |
| 114 | + |
| 115 | +#### 圈 2 — 中位(最重要的一圈) |
| 116 | + |
| 117 | +- 手机举到 **胸口** 高度 |
| 118 | +- 相机 **水平**(既不仰也不俯) |
| 119 | +- 走的时候 **稍微靠近场景中心** —— 圈半径比上一圈小一点 |
| 120 | +- 经过想重点拍的物体 / 桌面时,可以 **侧身略微贴近** 拍 1~2 秒,再退回正常半径继续走 |
| 121 | + |
| 122 | +#### 圈 3 — 低位(蹲下拍) |
| 123 | + |
| 124 | +- **半蹲或全蹲**,手机放到 **肚脐** 高度 |
| 125 | +- 相机 **略向上仰** 10~20°(看到桌面下方 / 物体底部 / 天花板边缘) |
| 126 | +- 走得可以再慢一点,因为蹲着累,但稳 |
| 127 | + |
| 128 | +### 2.4 关键动作的拍摄 |
| 129 | + |
| 130 | +如果场景里有 **特别想拍清楚的东西**(比如桌上的实验设备、机器人工作区),三圈之外 **再加一段 10~20 秒的特写**: |
| 131 | + |
| 132 | +- 距离 **0.5~1 米** |
| 133 | +- 围绕这个东西小幅度移动(左右各走 1 步、上下小幅度起伏) |
| 134 | +- 不要原地转手机!**平移很重要**,纯旋转 SfM 很难恢复深度 |
| 135 | + |
| 136 | +### 2.5 三个铁律 |
| 137 | + |
| 138 | +``` |
| 139 | +✗ 不要原地旋转手机(pan)—— 必须有平移 |
| 140 | +✗ 不要快速摇晃 —— 模糊一帧 = 浪费一帧 |
| 141 | +✗ 不要中途停下来又开始 —— 一气呵成 |
| 142 | +``` |
| 143 | + |
| 144 | +--- |
| 145 | + |
| 146 | +## Part 3 — 拍完立刻做的检查 |
| 147 | + |
| 148 | +**离开现场之前**,回放一遍视频,检查: |
| 149 | + |
| 150 | +- [ ] 视频长度 60~150 秒之间 |
| 151 | +- [ ] 没有任何一段画面糊到看不清物体边缘 |
| 152 | +- [ ] 整段亮度一致(没有忽暗忽亮) |
| 153 | +- [ ] 没有人或宠物入镜 |
| 154 | +- [ ] 三个高度都拍到了 |
| 155 | + |
| 156 | +**任何一项不对就重拍**。回家后才发现就太晚了 —— 现场光线/物体位置回不去。 |
| 157 | + |
| 158 | +把视频用 **AirDrop / 数据线 / 微信传文件助手** 传到电脑,命名成 |
| 159 | +比如 `lab_20260509.mp4`。 |
| 160 | + |
| 161 | +--- |
| 162 | + |
| 163 | +## Part 4 — 视频转图片(电脑上) |
| 164 | + |
| 165 | +### 4.1 抽帧命令 |
| 166 | + |
| 167 | +```bash |
| 168 | +# 假设视频在 ~/Downloads/lab_20260509.mp4 |
| 169 | +SCENE=lab |
| 170 | +WORKDIR=/home/ununtu/metabot-workspace/mugs/data/custom/$SCENE |
| 171 | +mkdir -p $WORKDIR/input |
| 172 | + |
| 173 | +ffmpeg -i ~/Downloads/lab_20260509.mp4 \ |
| 174 | + -qscale:v 2 \ |
| 175 | + -vf "fps=2" \ |
| 176 | + $WORKDIR/input/frame_%04d.jpg |
| 177 | +``` |
| 178 | + |
| 179 | +参数解释: |
| 180 | +- `-qscale:v 2` JPEG 高质量(数字越小越好,2 是上限附近) |
| 181 | +- `-vf "fps=2"` 每秒抽 2 帧 |
| 182 | + - 60s 视频 → 120 张 |
| 183 | + - 90s 视频 → 180 张 |
| 184 | + - 120s 视频 → 240 张 |
| 185 | +- 文件名 `frame_0001.jpg`, `frame_0002.jpg`, ... |
| 186 | + |
| 187 | +### 4.2 抽完检查 |
| 188 | + |
| 189 | +```bash |
| 190 | +ls $WORKDIR/input | wc -l # 应该在 100~300 之间 |
| 191 | +ls $WORKDIR/input | head -5 # 文件名连续 |
| 192 | +``` |
| 193 | + |
| 194 | +随便打开几张看一眼: |
| 195 | +- ✅ 清晰、不模糊 |
| 196 | +- ✅ 亮度一致 |
| 197 | +- ✅ 视角覆盖整个场景 |
| 198 | + |
| 199 | +### 4.3 调整抽帧密度 |
| 200 | + |
| 201 | +如果数量不在 100~300 之间,改 `fps`: |
| 202 | + |
| 203 | +| 视频长度 | 想要 ~150 张 | 命令 | |
| 204 | +|---------|------------|------| |
| 205 | +| 60s | 抽 2.5 帧/秒 | `-vf "fps=2.5"` | |
| 206 | +| 90s | 抽 1.7 帧/秒 | `-vf "fps=1.7"` | |
| 207 | +| 120s | 抽 1.25 帧/秒 | `-vf "fps=1.25"` | |
| 208 | +| 180s | 抽 0.83 帧/秒 | `-vf "fps=0.83"` | |
| 209 | + |
| 210 | +也可以 **直接选总张数**: |
| 211 | + |
| 212 | +```bash |
| 213 | +# 不管视频多长,强制抽出 150 张 |
| 214 | +ffmpeg -i input.mp4 -vf "select='not(mod(n\,N))'" -vsync vfr ... |
| 215 | +``` |
| 216 | + |
| 217 | +但简单起见 `fps=` 就够了。 |
| 218 | + |
| 219 | +--- |
| 220 | + |
| 221 | +## Part 5 — 接下来怎么办 |
| 222 | + |
| 223 | +抽完 100~300 张图后,剩下的全自动: |
| 224 | + |
| 225 | +```bash |
| 226 | +# COLMAP 求相机位姿(10~60 分钟) |
| 227 | +git clone https://github.com/graphdeco-inria/gaussian-splatting ~/gs |
| 228 | +cd ~/gs |
| 229 | +python convert.py -s $WORKDIR |
| 230 | + |
| 231 | +# 训练 3DGS(30~90 分钟) |
| 232 | +python train.py -s $WORKDIR -m $WORKDIR/output --iterations 30000 |
| 233 | + |
| 234 | +# 拷到 MuGS 期望的位置 |
| 235 | +mkdir -p $WORKDIR/point_cloud/iteration_30000 |
| 236 | +cp $WORKDIR/output/point_cloud/iteration_30000/point_cloud.ply \ |
| 237 | + $WORKDIR/point_cloud/iteration_30000/ |
| 238 | +cp $WORKDIR/output/cameras.json $WORKDIR/ |
| 239 | +``` |
| 240 | + |
| 241 | +完整命令、训练参数、出错怎么办看 |
| 242 | +[GS_DATA_COLLECTION.md](GS_DATA_COLLECTION.md) Part 3~5。 |
| 243 | + |
| 244 | +--- |
| 245 | + |
| 246 | +## 常见翻车 & 解决 |
| 247 | + |
| 248 | +| 现象 | 原因 | 下次怎么避免 | |
| 249 | +|------|------|-----------| |
| 250 | +| COLMAP 注册率 < 50% | 走太快、相邻帧没重叠 | 走慢一倍,或视频拍长一点 | |
| 251 | +| COLMAP reproj err > 2px | 整段视频模糊 / 手抖 | 用三脚架 / 稳定器,或锁高 ISO 用快快门 | |
| 252 | +| 训出来一片浮云 | 视角太单一(只拍了一个角度) | **三圈** 必须走完,别偷懒 | |
| 253 | +| 训出来一面墙是空的 | 那一面没拍到 | 检查圈是否真的绕了一周(360°) | |
| 254 | +| 训完渲染颜色诡异 | 白平衡飘了(比如经过窗户时被自动调整) | 用专业模式 App 锁死 WB | |
| 255 | +| 桌面物体边缘糊 | 那部分拍得太快 / 距离太远 | 给关键物体加 10~20s 特写贴近拍 | |
| 256 | + |
| 257 | +--- |
| 258 | + |
| 259 | +## 一个最简单的"第一次"流程 |
| 260 | + |
| 261 | +如果你之前完全没拍过,建议第一次就先在 **自己工位** 试一下,因为: |
| 262 | + |
| 263 | +1. 场景小,三圈很快走完(≤ 1 分钟) |
| 264 | +2. 失败了立刻能再拍 |
| 265 | +3. 训练 1080p 大概只要 30 分钟,能快速看效果 |
| 266 | + |
| 267 | +具体步骤: |
| 268 | + |
| 269 | +``` |
| 270 | +Step 1 (5 min) 装一个 Open Camera (安卓) 或 Blackmagic Camera (iPhone) |
| 271 | +Step 2 (2 min) 设置 1080p / 30fps / 手动模式(按上面 1.1) |
| 272 | +Step 3 (1 min) 关空调风扇、屏幕静态、把椅子推开 |
| 273 | +Step 4 (1 min) 录 90 秒视频:高、中、低 各 30 秒绕桌一圈 |
| 274 | +Step 5 (3 min) 传电脑 → ffmpeg 抽帧 → 看一下图片质量 |
| 275 | +Step 6 (待机) COLMAP + 训练(晚上挂着跑) |
| 276 | +Step 7 (10 min) 检查渲染结果,不行就回到 Step 4 重拍 |
| 277 | +``` |
| 278 | + |
| 279 | +第一次预期 **不会一次成功**。多数人第二次或第三次能拍出可用的场景。 |
| 280 | + |
| 281 | +--- |
| 282 | + |
| 283 | +## 还需要帮助? |
| 284 | + |
| 285 | +- 完整 pipeline:[GS_DATA_COLLECTION.md](GS_DATA_COLLECTION.md) |
| 286 | +- 公开数据集(如果不想自己拍):[3DGS_ROOM_DATASETS.md](3DGS_ROOM_DATASETS.md) |
| 287 | +- MuGS 上手:[QUICK_START.md](QUICK_START.md) |
| 288 | +- 拍完发我看一眼也行,我可以帮你看视频质量 |
0 commit comments