Mac 使用命令行进行拍照

最近翻出来一个 USB 摄像头,我把它插到我的 Mac mini 上面,可以用。

摄像头是免驱的,插上之后,可以用 obs 来捕获画面。也可以用 QuickTime Player,打开之后,点击「文件」「新建影片录制」,就可以看到画面了。

QuickTime-player-camera

imagesnap

我想通过命令行的方式,控制摄像头拍照。需要装一个工具 imagesnap,可以使用 homebrew 来安装。

brew install imagesnap

装好之后,直接执行

imagesnap

就可以生成一张图片,名为 snapshot.jpg,保存在当前目录下。

参考:Access Mac Camera by Command Line (davidwalsh.name)

帮助信息

❯ imagesnap -h
USAGE: imagesnap [options] [filename-or-dir]
Version: 0.2.16
Captures an image from a video device and saves it in a file.
If no device is specified, the system default will be used.
If no filename is specfied, snapshot.jpg will be used.
If timelapse is used, the filename argument can be a directory where files will be saved.
JPEG is the only supported output type.
-h This help message
-v Verbose mode
-l List available video devices
-t x.xx Take a picture every x.xx seconds
-n num Limit to <num> snapshots in -t timelapse mode
-q Quiet mode. Do not output any text
-w x.xx Warmup. Delay snapshot x.xx seconds after turning on camera (default 3sec)
-d device Use named video device

保存的图片命名为 powersee.jpg,可以这么写

imagesnap powersee.jpg

延迟

不加任何参数的情况下,默认是延迟 3 秒,我想它命令执行时立即拍

imagesnap -w 0.1

使用 0.01 也可以,0.001 都行。

不过这样使用会有问题,因为摄像头如果发现没有程序在使用它,它会进入休眠状态,在有些设备上面的表现,就是摄像头上面的灯会熄灭。

如果我们在摄像头休眠状态下,使用 -w 0.1 来拍照,那么得到的是一张全黑的图片。因为它还没有准备好,所以程序才设置默认 3 秒延迟。

如果我们想快一点,那么延迟一秒应该就够了。那么 0.1、0.01 在什么情况下可以使用呢?在摄像头正在使用的情况下,例如 OBS 开着时。

其它参数

-t 参数可以用来连续拍照,例如每隔三秒拍一张。

❯ imagesnap -t 3
Capturing image from device "PC-W3 Camera"...Saving images to .
./snapshot-00001.jpg
./snapshot-00002.jpg
./snapshot-00003.jpg
./snapshot-00004.jpg
./snapshot-00005.jpg

使用 -l 可以列出所有摄像头。

❯ imagesnap -l
Video Devices:
=> USB2.0 Camera #2
=> PC-W3 Camera

当电脑有多个摄像头时,可以用 -d 来指定要使用哪一个。如果不指定,它会使用第一个。注意上面这两个,它们的名称是 USB2.0PC-W3 ,使用如下

imagesnap -d PC-W3
#或者
imagesnap -d "PC-W3 Camera"

综合使用

我想要,每隔 5 秒拍一张,一共拍一百张,然后终端不要输出信息,保持安静就好,拍好的图片保存到 Powersee 目录中。

imagesnap -d PC-W3 -w 1 -q -t 5 -n 100 Powersee