Google Photos
Rclone 针对 Google 相册 的后端是一个专门用于在 Google 相册和本地之间传输照片和视频的后端。
注意:Rclone 所使用的 Google 相册 API 存在一些限制,因此请仔细阅读限制部分,以确保它适合你的使用场景。
配置
Google 云存储的初始设置需要你在浏览器中从 Google 相册获取一个令牌。rclone config
命令会引导你完成这个过程。
以下是一个创建名为 remote
的远程存储的示例。首先运行:
rclone config
这将引导你完成一个交互式的设置过程:
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
[snip]
XX / Google Photos
\ "google photos"
[snip]
Storage> google photos
** See help for google photos backend at: https://rclone.cn/googlephotos/ **
Google Application Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Google Application Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Set to make the Google Photos backend read only.
If you choose read only then rclone will only request read only access
to your photos, otherwise rclone will request full access.
Enter a boolean value (true or false). Press Enter for the default ("false").
read_only>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use web browser to automatically authenticate rclone with remote?
* Say Y if the machine running rclone has a web browser you can use
* Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
*** IMPORTANT: All media items uploaded to Google Photos with rclone
*** are stored in full resolution at original quality. These uploads
*** will count towards storage in your Google Account.
Configuration complete.
Options:
- type: google photos
- token: {"access_token":"XXX","token_type":"Bearer","refresh_token":"XXX","expiry":"2019-06-28T17:38:04.644930156+01:00"}
Keep this "remote" remote?
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
请参阅 远程设置文档,了解如何在没有可用互联网浏览器的机器上进行设置。
请注意,如果使用网络浏览器自动进行身份验证,rclone 会在本地机器上运行一个 Web 服务器,用于收集 Google 返回的令牌。该服务器仅在打开浏览器到获取验证代码的这段时间内运行。它运行在 http://127.0.0.1:53682/
上,如果您正在运行主机防火墙,可能需要临时解除对该地址的阻止,或者使用手动模式。
这个远程存储名为 remote
,现在可以像这样使用它:
查看您照片中的所有相册
rclone lsd remote:album
创建一个新相册
rclone mkdir remote:album/newAlbum
列出相册的内容
rclone ls remote:album/newAlbum
将 /home/local/images
同步到 Google 相册,并删除相册中多余的文件。
rclone sync --interactive /home/local/image remote:album/newAlbum
布局
由于 Google 相册不是一个通用的云存储系统,因此该后端的布局旨在帮助您进行导航。
media
目录下的子目录展示了对媒体进行分类的不同方式。每个文件可能会出现多次。因此,如果您想备份 Google 相册中的照片,可以选择备份 remote:media/by-month
。(注意:目前 remote:media/by-day
的操作速度较慢,因此在同步时请避免使用。)
请注意,您所有的照片和视频都会在 media
目录下的某个位置出现,但除非您将它们放入相册,否则它们可能不会出现在 album
目录下。
/
- upload
- file1.jpg
- file2.jpg
- ...
- media
- all
- file1.jpg
- file2.jpg
- ...
- by-year
- 2000
- file1.jpg
- ...
- 2001
- file2.jpg
- ...
- ...
- by-month
- 2000
- 2000-01
- file1.jpg
- ...
- 2000-02
- file2.jpg
- ...
- ...
- by-day
- 2000
- 2000-01-01
- file1.jpg
- ...
- 2000-01-02
- file2.jpg
- ...
- ...
- album
- album name
- album name/sub
- shared-album
- album name
- album name/sub
- feature
- favorites
- file1.jpg
- file2.jpg
树状结构中有两个可写部分,分别是 upload
目录和 album
目录的子目录。
upload
目录用于上传那些你不想放入相册的文件。该目录初始为空,并且仅会在一次 rclone 会话中包含你上传的文件,当你重启 rclone 后它会再次变空。如果你有大量文件只想一次性导入到 Google 相册,那么这个目录就很适用。如果需要进行重复同步,上传到 album
目录会更合适。
album
目录下的子目录也是可写的,你可以在 album
下创建新的目录(相册)。如果你在复制文件时带有目录结构,rclone 会创建包含 /
字符的相册。例如,如果你执行以下操作:
rclone copy /path/to/images remote:album/images
并且 images
目录包含
images
- file1.jpg
dir
file2.jpg
dir2
dir3
file3.jpg
那么 rclone 会创建以下相册,并在其中包含相应的文件:
- images
- file1.jpg
- images/dir
- file2.jpg
- images/dir2/dir3
- file3.jpg
这意味着你可以像使用普通文件系统一样使用 album
路径,并且它是进行重复同步的理想目标。
shared-album
目录显示与你共享或由你共享的相册。这类似于 Google 相册网页界面中的“共享”标签页。
标准选项
以下是 Google 相册(Google Photos)特定的标准选项。
–gphotos-client-id
OAuth 客户端 ID。
通常留空。
属性:
- 配置项:client_id
- 环境变量:RCLONE_GPHOTOS_CLIENT_ID
- 类型:字符串
- 是否必需:否
–gphotos-client-secret
OAuth 客户端密钥。
通常留空。
属性:
- 配置项:client_secret
- 环境变量:RCLONE_GPHOTOS_CLIENT_SECRET
- 类型:字符串
- 是否必需:否
–gphotos-read-only
将 Google 相册后端设置为只读模式。
如果你选择只读模式,rclone 将仅请求对你的照片进行只读访问;否则,rclone 将请求完全访问权限。
属性:
- 配置项:read_only
- 环境变量:RCLONE_GPHOTOS_READ_ONLY
- 类型:布尔值
- 默认值:false
高级选项
以下是 Google 相册(Google Photos)特定的高级选项。
–gphotos-token
以 JSON 格式表示的 OAuth 访问令牌。
属性:
- 配置项:token
- 环境变量:RCLONE_GPHOTOS_TOKEN
- 类型:字符串
- 是否必需:否
–gphotos-auth-url
认证服务器 URL。
留空则使用提供商的默认值。
属性:
- 配置项:auth_url
- 环境变量:RCLONE_GPHOTOS_AUTH_URL
- 类型:字符串
- 是否必需:否
–gphotos-token-url
令牌服务器 URL。
留空则使用提供商的默认值。
属性:
- 配置项:token_url
- 环境变量:RCLONE_GPHOTOS_TOKEN_URL
- 类型:字符串
- 是否必需:否
–gphotos-client-credentials
使用客户端凭证 OAuth 流程。
这将使用 RFC 6749 中描述的 OAuth2 客户端凭证流程。
属性:
- 配置项:client_credentials
- 环境变量:RCLONE_GPHOTOS_CLIENT_CREDENTIALS
- 类型:布尔值
- 默认值:false
–gphotos-read-size
设置为读取媒体项的大小。
通常,rclone 不会读取媒体项的大小,因为这需要额外的事务。这对于同步操作不是必需的。然而,rclone mount 需要在读取文件之前知道文件的大小,因此如果你想通过 rclone mount 读取媒体,建议在使用 rclone mount 时设置此标志。
属性:
- 配置项:read_size
- 环境变量:RCLONE_GPHOTOS_READ_SIZE
- 类型:布尔值
- 默认值:false
–gphotos-start-year
年份限制,仅下载指定年份之后上传的照片。
属性:
- 配置项:start_year
- 环境变量:RCLONE_GPHOTOS_START_YEAR
- 类型:整数
- 默认值:2000
–gphotos-include-archived
同时查看和下载已存档的媒体。
默认情况下,rclone 不会请求已存档的媒体。因此,在同步时,已存档的媒体不会在目录列表中显示,也不会被传输。
请注意,相册中的媒体无论其存档状态如何,始终可见并会被同步。
启用此标志后,已存档的媒体将始终在目录列表中可见并被传输。
不启用此标志时,已存档的媒体将不会在目录列表中显示,也不会被传输。
属性:
- 配置项:include_archived
- 环境变量:RCLONE_GPHOTOS_INCLUDE_ARCHIVED
- 类型:布尔值
- 默认值:false
–gphotos-proxy
使用 gphotosdl 代理下载全分辨率图像。
Google API 提供的图像和视频可能不是全分辨率的,并且/或者可能缺少 EXIF 数据。
然而,如果你使用 gphotosdl 代理,你可以下载原始、未修改的图像。
这将在后台运行一个无头浏览器。
从 gphotosdl 下载该软件。
首先运行:
gphotosdl -login
然后,在你登录到 Google 相册后,关闭浏览器窗口并运行:
gphotosdl
然后提供参数 --gphotos-proxy "http://localhost:8282"
以使 rclone 使用该代理。
属性:
- 配置项:proxy
- 环境变量:RCLONE_GPHOTOS_PROXY
- 类型:字符串
- 是否必需:否
–gphotos-encoding
后端的编码方式。
有关更多信息,请参阅 概述中的编码部分。
属性:
- 配置项:encoding
- 环境变量:RCLONE_GPHOTOS_ENCODING
- 类型:编码方式
- 默认值:斜杠、回车换行符、无效的 UTF-8、点号
–gphotos-batch-mode
文件上传批处理模式:同步(sync)、异步(async)或关闭(off)。
这设置了 rclone 使用的批处理模式。
它有 3 种可能的值:
- off - 不进行批处理
- sync - 批处理上传并检查完成情况(默认)
- async - 批处理上传但不检查完成情况
rclone 在退出时会关闭任何未完成的批处理,这可能会导致退出时出现延迟。
属性:
- 配置项:batch_mode
- 环境变量:RCLONE_GPHOTOS_BATCH_MODE
- 类型:字符串
- 默认值:“sync”
–gphotos-batch-size
上传批处理中的最大文件数。
这设置了上传文件的批处理大小。它必须小于 50。
默认情况下,该值为 0,这意味着 rclone 将根据 batch_mode 的设置计算批处理大小。
- batch_mode: async - 默认批处理大小为 50
- batch_mode: sync - 默认批处理大小与 –transfers 相同
- batch_mode: off - 不使用
rclone 在退出时会关闭任何未完成的批处理,这可能会导致退出时出现延迟。
如果你要上传大量小文件,设置此参数是个好主意,因为这将大大加快上传速度。你可以使用 –transfers 32 来最大化吞吐量。
属性:
- 配置项:batch_size
- 环境变量:RCLONE_GPHOTOS_BATCH_SIZE
- 类型:整数
- 默认值:0
–gphotos-batch-timeout
允许上传批处理空闲的最长时间,之后将进行上传。
如果上传批处理空闲时间超过此设置,则将进行上传。
默认值为 0,这意味着 rclone 将根据使用的 batch_mode 选择一个合理的默认值。
- batch_mode: async - 默认批处理超时时间为 10 秒
- batch_mode: sync - 默认批处理超时时间为 1 秒
- batch_mode: off - 不使用
属性:
- 配置项:batch_timeout
- 环境变量:RCLONE_GPHOTOS_BATCH_TIMEOUT
- 类型:持续时间
- 默认值:0 秒
–gphotos-batch-commit-timeout
等待批处理完成提交的最长时间。
属性:
- 配置项:batch_commit_timeout
- 环境变量:RCLONE_GPHOTOS_BATCH_COMMIT_TIMEOUT
- 类型:持续时间
- 默认值:10 分钟
–gphotos-description
远程存储的描述。
属性:
- 配置项:description
- 环境变量:RCLONE_GPHOTOS_DESCRIPTION
- 类型:字符串
- 是否必需:否
限制
只能上传图像和视频。如果你尝试上传非视频或图像文件,或者 Google 相册不支持的格式,rclone 会上传该文件,但 Google 相册在将其转换为媒体项时会给出错误。
请注意,通过 API 上传到 Google 相册的所有媒体项都将以“原始质量”的全分辨率存储,并且 会 占用你的 Google 账户存储配额。API 不 提供以“高质量”模式上传的方式。
Google 相册后端不支持 rclone about
命令。没有此功能的后端无法确定 rclone 挂载点的可用空间,也不能在 rclone 联合远程存储中使用 mfs
(最大可用空间)策略。
请参阅 不支持 rclone about 的后端列表 请参阅 rclone about
下载图像
下载图像时,会去除 EXIF 位置信息(根据文档和我的测试)。这是 Google 相册 API 的一个限制,相关问题记录在 bug #112096115。
当前的 Google API 不允许以原始分辨率下载照片。如果你依赖“Google 相册”作为照片备份,这一点非常重要。你将无法使用 rclone 重新下载原始图像。作为最后的手段,你可以使用“Google Takeout”来恢复原始照片。
注意:你 可以 使用 –gphotos-proxy 标志,通过无头浏览器下载全分辨率图像。
下载视频
与通过 Google 相册网页界面下载视频相比,使用 rclone 下载的视频是经过高度压缩的版本。相关问题记录在 bug #113672044。
注意:你 可以 使用 –gphotos-proxy 标志,通过无头浏览器下载全分辨率图像。
重复文件
如果目录中存在文件名重复的文件,rclone 会在文件名中添加文件 ID。因此,两个名为 file.jpg
的文件将显示为 file {123456}.jpg
和 file {ABCDEF}.jpg
(实际的 ID 会更长!)。
如果你两次上传相同的图像(具有相同的二进制数据),Google 相册会对其进行去重处理。但是,它会保留第一次上传时的文件名,这可能会使 rclone 产生混淆。例如,如果你将一张图像上传到 upload
目录,然后又将同一图像上传到 album/my_album
目录,album/my_album
目录中的图像文件名将是第一次上传时的文件名,而不是你上传到 album
目录时的文件名。实际上,这应该不会造成太多问题。
修改时间
Google 相册中显示的媒体日期是由 EXIF 信息确定的创建日期,如果无法获取该信息,则显示上传日期。
这一日期不能通过 rclone 更改,并且不是本地磁盘上媒体的修改日期。这意味着 rclone 不能使用 Google 相册中的日期进行同步操作。
文件大小
Google 相册 API 不会返回媒体的大小。这意味着在同步到 Google 相册时,rclone 只能进行文件是否存在的检查。
可以读取媒体的大小,但这需要为每个媒体项额外发送一个 HTTP HEAD 请求,因此 非常慢,并且会消耗大量的事务。可以使用 --gphotos-read-size
选项或 read_size = true
配置参数来启用此功能。
如果你想在 rclone mount
中使用该后端,可能需要启用此标志(具体取决于你的操作系统和使用照片的应用程序),否则你可能无法从挂载点读取媒体。你需要进行测试,以确定不使用此标志时是否能正常工作。
相册
rclone 只能将文件上传到它创建的相册中。这是 Google 相册 API 的一个限制。
rclone 只能从它创建的相册中移除它上传的文件。
删除文件
rclone 可以从它创建的相册中移除文件,但请注意,Google 相册 API 不允许永久删除媒体,因此这些媒体仍然会保留。请参阅 bug #109759781。
rclone 只能在 album
目录下删除文件。
删除相册
Google 相册 API 不支持删除相册 - 请参阅 bug #135714733。