前言

这两天给爸妈拍了一些照片准备导出,正好在linux环境下,我于是打算研究一下如何在linux环境下传输相机的一些数据,顺便为相机记录做一个开头。

MSC or MTP

原本以为尼康相机是通过 MSC (mass storage class)或者 MTP (Media Transfer Protocol)协议传输照片的,但是运行lsblk没有出现设备,应该不是MSC;并且尝试jmtpfs尝试挂载MTP设备,运行jmtpfs ~/camera,并没有文件夹挂载在我自定义的相机文件夹,在我去谷歌搜索之后才大致明白了是怎么回事。

尼康系列下D700是第一款不再支持MSC的相机Cletus Lee在 D800 is not mounted on imac 10.9 中回答到"The D700 was the first Nikon DSLR that does not offer a Mass Storage mode. The camera will only show up as a MTP device. It has to be set-able as a Mass storage device in a camera setup menu. This is no longer an option for D700, D800 D4 and other more recent ly released Nikons. " ,该相机只能够以MTP协议传输文件,同时以后发布的相机也不再支持在相机中将传输模式设置为MSC。

接下来我在Nikon官网的一篇文章 What are the MSC and PTP transfer protocols used for in Nikon digital cameras? 找到了更加深入的信息,官方公布了Nikon相机支持的传输协议,虽然更新时间为2016年12月21日,但是明确在表格中表明在D700以后发布(即2008年7月25日)的相机都不再支持MSC了。但是我之前尝试MTP协议来挂载相机到本机的文件夹也失败了,我于是查看相关关键词,也发现了有人遇到了相似的疑惑,有人回答道他认为Nikon Z系列的相机都只支持 PTP (Picture Transfer Protocol)dgaxiola在 Nikon Z doesn’t mount as a drive to OS X? 中回答道"I think Nikon Z cameras only offer USB Picture Transfer Protocol (PTP) for photo access. On my Mac with my Z6, I use the included Image Capture app to transfer photos over USB." ,并且有另一个人建议题主使用gphoto2来进行照片的传输以及相机的控制Pouet在 Nikon camera does not mount 中回答道"Some Nikon cameras use PTP instead of MSC or MTP protocol for memory access, for PTP you need to install gvfs-gphoto2 package."

qPhoto2

gPhoto2 是一个免费的、可再分发的数字相机软件套件,专为类 Unix 系统设计,由世界各地一群专门的志愿者开发。它支持超过 2700 款相机和媒体播放器

gPhoto2 运行在多个类 Unix 操作系统上,包括 Linux、FreeBSD、NetBSD、MacOS X 等。主要的 Linux 发行版(如 Debian GNU/Linux、Ubuntu、Gentoo、Fedora、openSUSE、Mandriva 等)都提供了 gPhoto。
我们使用以下命令下载gPhoto2:

$ sudo pacman -S gphoto2  

gPhoto2提供了很多有趣的功能,这让我们能够通过命令行查看相机(运行前记得开机,不然我的Nikon30是读取不到的):

# 显示相机中所有文件夹的列表
$ gphoto2 --list-folders
# 显示相机存储中所有文件
$ gphoto2 --list-files
# 下载相机中的所有文件
$ gphoto2 --get-all-files
# 显示相机配置信息
$ gphoto2 --list-config

由于我的相机中设置了间隔拍摄创建新文件夹,导致多个文件夹同时传输时会出现文件名重复,可以根据文件夹路径和文件名为每个文件生成唯一的名称:

$ gphoto2 --get-all-files --filename="%F/%f"

此外,gPhoto2还提供了控制相机的功能:

# 捕捉单张图片
$ gphoto2 --capture-image
# 捕捉视频
$ gphoto2 --capture-movie=SECONDS
# 使用长时间曝光(如 --bulb 模式)拍摄
$ gphoto2 --bulb=10
# 使用 --capture-preview 启用相机的实时预览功能
$ gphoto2 --capture-preview
# 使用 --show-preview 显示实时预览图像
$ gphoto2 --show-preview
# 触发拍照(模拟按下快门按钮)
$ gphoto2 --trigger-capture
# 修改相机的配置参数,例如 ISO 或曝光时间
$ gphoto2 --set-config=iso=400

更多功能可以参考于 The gPhoto2 Reference (the man pages)