Skip to content

Latest commit

 

History

History
288 lines (203 loc) · 9.71 KB

File metadata and controls

288 lines (203 loc) · 9.71 KB

用手机视频拍 3DGS 场景 — 实操指南

只讲 录视频 这条路线,每一步都给出可以照抄的操作。完整端到端流程见 GS_DATA_COLLECTION.md,这份文档是它的拍摄章节细化版。

Last Updated: 2026-05-09


TL;DR

用手机以 1080p / 30fps手动锁定曝光对焦白平衡,匀速绕场景走 三圈(高、中、低),全程 60~120 秒。回到电脑用 ffmpeg 抽出 100~200 张图,扔进 COLMAP + 3DGS 训练。


Part 1 — 出门前 5 分钟准备

1.1 手机相机怎么调

不管 iPhone 还是安卓,目标是 三件事都不变

要锁定的参数 iPhone 操作 安卓 (大多数)
对焦 AF 长按画面任一点 → 出现 "AE/AF 锁定" 黄框 切到"专业模式",把对焦拨到 MF(手动),调到中等距离
曝光 AE 长按之后亮度条会出现,不再自动变 专业模式手动设 ISO(100~400)+ 快门(1/100s 起)
白平衡 WB 自带不太好锁,建议用第三方 App 专业模式选定一个色温(比如 5500K)后不变

强烈推荐 App(任选其一,免费版都够用):

  • iPhone:Blackmagic Camera / FiLMiC Pro / ProMovie
  • 安卓:Open Camera(开源)/ 手机自带的"专业"模式

打开 App 后这样设:

分辨率: 1920x1080 (1080p)
帧率: 30 fps (不要选 60fps,文件太大没意义)
ISO: 200~400 之间,固定
快门: 1/100s 起步,光线弱可以到 1/60s,不要更慢
对焦: MF 手动,调到 1~2 米
白平衡: 5000~5500K 固定
HDR: 关掉
防抖: 开(光学防抖 OIS / 电子防抖 EIS 都可以)

如果只用自带相机也行,最关键的是 长按锁定对焦曝光(黄框出现)。

1.2 场景检查 checklist

开拍前 30 秒走一圈,确认:

  • 风扇 / 空调出风口 → 关掉(防窗帘/纸张飘)
  • 屏幕 / 电视 → 关掉或换静态壁纸(动画破坏 SfM)
  • 地面玩具 / 散落电线 → 收一收
  • 椅子 → 推到不挡路的地方
  • 窗帘 / 灯光 → 保持现在这样直到拍完,中间不要开关灯
  • 手机 → 静音、勿扰、电量 ≥ 50%
  • 拍摄期间 不让人或宠物走过

1.3 测试 30 秒

正式开拍前先录 30 秒 demo,回放看一下:

  • 画面有没有抖到糊
  • 暗处有没有过黑/亮处有没有过曝
  • 有没有镜头沾灰、起雾

不行就调整再录。正式拍只录一次,不要拍两段拼接(曝光会跳)。


Part 2 — 怎么走、怎么拍

2.1 整体节奏

60~120 秒。慢就慢,但不能快。

  • 走得太快 → 动态模糊、相邻帧重叠不够 → COLMAP 注册失败
  • 走得太慢 → 视频太长抽出 200+ 张冗余帧

一个简单参考:从场景一头走到另一头大概用 5~8 秒。

2.2 三圈轨迹

想象场景中心是个圆心,你绕着它走三圈:

  俯视图 (你的视角,从天花板往下看场景)

       ╭─────────────────────╮
       │                     │
       │     ╭───────╮       │
       │     │       │       │       绕 3 圈
       │     │   ★   │       │       ★ = 你想拍的核心区域 / 桌面 / 物体
       │     │       │       │
       │     ╰───────╯       │
       │                     │
       ╰─────────────────────╯

  侧视图

  圈 1 ─ 高位(把手机举到额头高度,相机略向下)
  圈 2 ─ 中位(手机端到胸口高度,相机水平)
  圈 3 ─ 低位(蹲下,相机略向上)

每圈大约 20~40 秒,三圈合起来 60~120 秒。

2.3 三个圈的具体走法

圈 1 — 高位(举高拍)

  • 手机举到 眉毛 / 额头 高度
  • 相机 略向下倾 15~25°(看到地面 + 物体顶部)
  • 围绕场景顺时针走一圈,走得慢,每两步停 0.5 秒(不是真的停下来,是放慢)
  • 走到最关键的角度(比如桌面正面)时 再放慢

圈 2 — 中位(最重要的一圈)

  • 手机举到 胸口 高度
  • 相机 水平(既不仰也不俯)
  • 走的时候 稍微靠近场景中心 —— 圈半径比上一圈小一点
  • 经过想重点拍的物体 / 桌面时,可以 侧身略微贴近 拍 1~2 秒,再退回正常半径继续走

圈 3 — 低位(蹲下拍)

  • 半蹲或全蹲,手机放到 肚脐 高度
  • 相机 略向上仰 10~20°(看到桌面下方 / 物体底部 / 天花板边缘)
  • 走得可以再慢一点,因为蹲着累,但稳

2.4 关键动作的拍摄

如果场景里有 特别想拍清楚的东西(比如桌上的实验设备、机器人工作区),三圈之外 再加一段 10~20 秒的特写

  • 距离 0.5~1 米
  • 围绕这个东西小幅度移动(左右各走 1 步、上下小幅度起伏)
  • 不要原地转手机!平移很重要,纯旋转 SfM 很难恢复深度

2.5 三个铁律

✗ 不要原地旋转手机(pan)—— 必须有平移
✗ 不要快速摇晃 —— 模糊一帧 = 浪费一帧
✗ 不要中途停下来又开始 —— 一气呵成

Part 3 — 拍完立刻做的检查

离开现场之前,回放一遍视频,检查:

  • 视频长度 60~150 秒之间
  • 没有任何一段画面糊到看不清物体边缘
  • 整段亮度一致(没有忽暗忽亮)
  • 没有人或宠物入镜
  • 三个高度都拍到了

任何一项不对就重拍。回家后才发现就太晚了 —— 现场光线/物体位置回不去。

把视频用 AirDrop / 数据线 / 微信传文件助手 传到电脑,命名成 比如 lab_20260509.mp4


Part 4 — 视频转图片(电脑上)

4.1 抽帧命令

# 假设视频在 ~/Downloads/lab_20260509.mp4
SCENE=lab
WORKDIR=/home/ununtu/metabot-workspace/mugs/data/custom/$SCENE
mkdir -p $WORKDIR/input

ffmpeg -i ~/Downloads/lab_20260509.mp4 \
       -qscale:v 2 \
       -vf "fps=2" \
       $WORKDIR/input/frame_%04d.jpg

参数解释:

  • -qscale:v 2 JPEG 高质量(数字越小越好,2 是上限附近)
  • -vf "fps=2" 每秒抽 2 帧
    • 60s 视频 → 120 张
    • 90s 视频 → 180 张
    • 120s 视频 → 240 张
  • 文件名 frame_0001.jpg, frame_0002.jpg, ...

4.2 抽完检查

ls $WORKDIR/input | wc -l        # 应该在 100~300 之间
ls $WORKDIR/input | head -5      # 文件名连续

随便打开几张看一眼:

  • ✅ 清晰、不模糊
  • ✅ 亮度一致
  • ✅ 视角覆盖整个场景

4.3 调整抽帧密度

如果数量不在 100~300 之间,改 fps

视频长度 想要 ~150 张 命令
60s 抽 2.5 帧/秒 -vf "fps=2.5"
90s 抽 1.7 帧/秒 -vf "fps=1.7"
120s 抽 1.25 帧/秒 -vf "fps=1.25"
180s 抽 0.83 帧/秒 -vf "fps=0.83"

也可以 直接选总张数

# 不管视频多长,强制抽出 150 张
ffmpeg -i input.mp4 -vf "select='not(mod(n\,N))'" -vsync vfr ...

但简单起见 fps= 就够了。


Part 5 — 接下来怎么办

抽完 100~300 张图后,剩下的全自动:

# COLMAP 求相机位姿(10~60 分钟)
git clone https://github.com/graphdeco-inria/gaussian-splatting ~/gs
cd ~/gs
python convert.py -s $WORKDIR

# 训练 3DGS(30~90 分钟)
python train.py -s $WORKDIR -m $WORKDIR/output --iterations 30000

# 拷到 MuGS 期望的位置
mkdir -p $WORKDIR/point_cloud/iteration_30000
cp $WORKDIR/output/point_cloud/iteration_30000/point_cloud.ply \
   $WORKDIR/point_cloud/iteration_30000/
cp $WORKDIR/output/cameras.json $WORKDIR/

完整命令、训练参数、出错怎么办看 GS_DATA_COLLECTION.md Part 3~5。


常见翻车 & 解决

现象 原因 下次怎么避免
COLMAP 注册率 < 50% 走太快、相邻帧没重叠 走慢一倍,或视频拍长一点
COLMAP reproj err > 2px 整段视频模糊 / 手抖 用三脚架 / 稳定器,或锁高 ISO 用快快门
训出来一片浮云 视角太单一(只拍了一个角度) 三圈 必须走完,别偷懒
训出来一面墙是空的 那一面没拍到 检查圈是否真的绕了一周(360°)
训完渲染颜色诡异 白平衡飘了(比如经过窗户时被自动调整) 用专业模式 App 锁死 WB
桌面物体边缘糊 那部分拍得太快 / 距离太远 给关键物体加 10~20s 特写贴近拍

一个最简单的"第一次"流程

如果你之前完全没拍过,建议第一次就先在 自己工位 试一下,因为:

  1. 场景小,三圈很快走完(≤ 1 分钟)
  2. 失败了立刻能再拍
  3. 训练 1080p 大概只要 30 分钟,能快速看效果

具体步骤:

Step 1 (5 min)  装一个 Open Camera (安卓) 或 Blackmagic Camera (iPhone)
Step 2 (2 min)  设置 1080p / 30fps / 手动模式(按上面 1.1)
Step 3 (1 min)  关空调风扇、屏幕静态、把椅子推开
Step 4 (1 min)  录 90 秒视频:高、中、低 各 30 秒绕桌一圈
Step 5 (3 min)  传电脑 → ffmpeg 抽帧 → 看一下图片质量
Step 6 (待机)   COLMAP + 训练(晚上挂着跑)
Step 7 (10 min) 检查渲染结果,不行就回到 Step 4 重拍

第一次预期 不会一次成功。多数人第二次或第三次能拍出可用的场景。


还需要帮助?