拍照录像全靠一套命令行工具:rpicam-still 拍照、rpicam-vid 录像、rpicam-hello 预览——raspistill/raspivid 这对老命令已经删除,libcamera- 也已改名 rpicam-,网上的老命令一律要换名字再跑。
10-2 确认系统看得见相机,本节正式【开机使用】——全走终端命令,正是本课无头 SSH 环境的主场。4-1/4-2 的命令行常识(参数、路径、Ctrl+C)全要派上用场;【预览窗口需要显示器】这件事和 4-6 的教训同源:会话级的活儿在 SSH 里做不生效。
一、命令换代史:三批名字,只记最后一批
| 年代 | 拍照 | 录像 | 现状 |
|---|---|---|---|
| 老系统(Bullseye 之前) | raspistill |
raspivid |
已删除,Bookworm 起不存在 |
| Bullseye 过渡期 | libcamera-still |
libcamera-vid |
已改名,当前系统用不了 |
| 现在(Bookworm 起) | rpicam-still |
rpicam-vid |
本课标准 |
全套工具叫 rpicam-apps,成员五件套:rpicam-hello(预览)、rpicam-jpeg(快照)、rpicam-still(拍照全家桶)、rpicam-vid(录像)、rpicam-raw(原始数据)。
判断技巧:网上教程命令以 raspi- 或 libcamera- 开头的,一律先在心里替换成 rpicam- 再跑;参数大体通用,个别要查 --help。
二、拍照:rpicam-still 与它的常用参数
# 最简拍照:默认先显示 5 秒预览再拍(要有显示器/VNC)
rpicam-still -o photo.jpg
# 无头环境(本课):--immediate 立即拍,不弹预览
rpicam-still --immediate -o photo.jpg
# 指定分辨率(Module 3 全尺寸 4608×2592)
rpicam-still --immediate --width 4608 --height 2592 -o full.jpg
# JPEG 之外再存一份 RAW(10-2 算过:约 14 MiB)
rpicam-still --immediate -o photo.jpg --raw
# 翻转画面(相机装倒了的救急)
rpicam-still --immediate --hflip -o photo.jpg # 水平翻
rpicam-still --immediate --vflip -o photo.jpg # 垂直翻
Module 3 专属——对焦:
rpicam-still --immediate --autofocus-mode auto -o a.jpg # 拍前自动对一次焦
rpicam-still --immediate --lens-position 0.5 -o b.jpg # 手动:0=无穷远,越大越近
rpicam-jpeg -o x.jpg 是【快枪手】版本(参数少、更快),日常用 rpicam-still 就够。
三、录像:rpicam-vid
# 录 10 秒视频(-t 单位毫秒,也可写 10s)
rpicam-vid -t 10s -o video.h264
# 直接出 MP4(封装成 mp4 容器,新版系统支持)
rpicam-vid -t 10s --codec libav -o video.mp4
# 全高清 30 帧
rpicam-vid -t 10s --width 1920 --height 1080 --framerate 30 -o hd.h264
两个理解要点:
-t是录多长时间,不是【第几秒拍】:-t 0= 无限录到 Ctrl+C.h264与.mp4的区别:h264 是编码(画面怎么压缩),mp4 是封装容器(把画面和元信息打包成文件)。裸 h264 文件有些播放器不吃,转封装即可:ffmpeg -i video.h264 -c copy video.mp4
四、预览与无头环境的相处之道
rpicam-hello 会弹一个实时预览窗口——它要显示器或 VNC。本课的 SSH 无头环境里:
- 拍照用
--immediate(或-n关预览) - 录像加
-n/--nopreview - Wayland 桌面上预览若闪退,加
--qt-preview换一种窗口实现
这不是相机坏了——4-6 的教训原样适用:图形界面的活儿别指望 SSH 会话。
五、延时摄影:一条命令拍一小时
# 每 2 秒拍一张,总共拍 60 秒,文件名自动编号
rpicam-still -t 60000 --timelapse 2000 -o frame_%04d.jpg
# 之后用 ffmpeg 把照片合成视频(25 帧每秒)
ffmpeg -framerate 25 -i frame_%04d.jpg -c:v libx264 timelapse.mp4
%04d 是编号占位:frame_0001.jpg、frame_0002.jpg……延时摄影的原理就是把【慢变化】用【定间隔拍照+快放】压成【快变化】——种子发芽、日出日落都是这么拍的。
六、动手 Demo:拍照三连+一段小视频
cd ~
# ① 快照
rpicam-jpeg -o snap.jpg
# ② 全尺寸照(Module 3)
rpicam-still --immediate --width 4608 --height 2592 -o full.jpg
# ③ 录 5 秒 MP4
rpicam-vid -t 5s --codec libav -o clip.mp4
# 验收
ls -lh snap.jpg full.jpg clip.mp4
看到什么算成功:三个文件都在,snap.jpg 约几百 KB 到几 MB,full.jpg 明显更大(全尺寸像素多),clip.mp4 按秒数大小合理。把 jpg 拷回 Windows(3-6 的 scp 还记得吗)打开看内容。
读结果:full.jpg 与 snap.jpg 的体积差就是【分辨率决定数据量】的实物证据;clip.mp4 能播放说明编码器正常工作——这颗芯片里有专门的硬件编码器,10-5 串流就靠它。
七、30 秒实验:延时摄影的账
用 rpicam-still -t 60000 --timelapse 2000 拍:
- 一共拍几张?
- 想拍 30 分钟、最终合成 25 帧每秒、播放 30 秒的延时视频——拍照间隔该设多少?
参考答案:1. 60000 ms ÷ 2000 ms = 30 张。2. 需要 30 × 25 = 750 张;30 分钟 = 1800 秒,间隔 = 1800 ÷ 750 = 2.4 秒(即 -t 1800000 --timelapse 2400)——先定【最终视频要多长】,倒推【要几张】,再算【间隔】,这个顺序别倒。
八、常见误区
- 【照抄教程里的 raspistill】 —— 命令已删除,换 rpicam-still;同理 raspivid → rpicam-vid。
- 【在 SSH 里跑 rpicam-hello 报错,以为相机坏了】 —— 预览窗口要显示器/VNC;无头环境用
--immediate/-n。 - 【
-t 5000是【5 秒后拍】的意思】 —— 它是【预览 5 秒再拍】(总耗时 5 秒);要立即拍用--immediate。 - 【h264 文件改名成 .mp4 就能播】 —— 改名只换名字不换封装;要真转:
ffmpeg -i video.h264 -c copy video.mp4(-c copy表示不重新编码、只重新打包)。 - 【--raw 拍出来的照片更清晰】 —— RAW 只是信息更全(方便后期),看起来未必更漂亮;而且一张约 14 MiB,连拍很快塞满卡。
自测三问(点开对答案)
1. 网上教程写 `libcamera-still -o x.jpg`,在当前系统怎么跑? 2. 无头 SSH 环境拍一张全尺寸照片的命令? 3. `-t 0 -o live.h264` 会发生什么? **参考答案** 1. 换名:`rpicam-still -o x.jpg`——libcamera-* 在 Bookworm 起已改名 rpicam-*。 2. `rpicam-still --immediate --width 4608 --height 2592 -o x.jpg`(Module 3;`--immediate` 免去预览窗口)。 3. **无限录像**直到 Ctrl+C——`-t 0` 表示不限时;硬盘会被慢慢写满,别忘了停。- ☐ 下一节(10-4 使用 Python 操作相机模块)
相关笔记
- 安装和启用树莓派的相机模块 —— 上一节:跑这些命令的前提(相机被系统认到)
- 使用 Python 操作相机模块 —— 下一节:命令行换成 Python,同一套活儿
- Linux 的常用指令 —— 终端参数与路径的基本功
- 在 Windows 和树莓派之间交换文件 —— 把拍好的照片拷回 Windows 看效果
- 🍓 树莓派 · 索引 —— 全课路线图