谷歌照片和相册备份工具
gphotos-sync的Python项目详细描述
谷歌照片同步
简介
有关非常好的描述和详细说明,请参阅logix在linux起义上的文章
谷歌照片同步下载你的谷歌照片到本地文件系统。它会备份所有的照片 用户上载到 谷歌照片,还有相册信息和其他谷歌照片"创作"(动画,全景, 电影、特效和拼贴画)。
此项目使用新的google photos api请参见 https://developers.google.com/photos/
完成完全同步后,您将在指定根目录下有两个目录:
- 照片 -包含来自google照片库的所有照片和视频,这些照片和视频按 结构"photos/yyy/mm",其中"yyyy/mm"是拍摄照片/视频的日期。文件夹中的文件名 将按照原始上传,但重复的名称将有一个后缀(n),其中n是重复的编号 (这与官方google windows工具中使用的方法相匹配)。
- 相册 -包含表示库中相册和共享相册集的文件夹层次结构。所有 这些文件是指向照片文件夹中内容的符号链接。文件夹名将是 '相册/yyyy/mm原始相册名称。'
此外,在使用-compare-folder选项时还会有更多的文件夹。该选项用于生成 将库的内容与本地文件夹(如以前的备份)进行比较。比较不需要 文件被安排在同一个文件夹中,它在文件中使用元数据,比如create date和 匹配项对的exif uid。比较后的其他文件夹为:
- 比较 指定根目录下的新文件夹,其中包含以下内容:
- 丢失的文件 包含指向比较文件夹中在google中找不到的文件的符号链接 照片库。文件夹结构与比较文件夹中的结构相同。这些是 您将通过Web界面上传到Google照片以从备份中还原的文件。
- 附加文件 -包含指向"照片"文件夹中的文件的符号链接,这些文件出现在库中,但不在 比较文件夹。文件夹结构是与"照片"文件夹相同。
- 重复项 -包含指向比较文件夹中找到的任何重复文件的符号链接。这是一个扁平的结构 符号链接文件名有一个数字前缀,使其唯一,并将重复项组合在一起。
注意:
- 比较代码使用外部工具"ffprobe"。没有它它它会跑,但不能 从视频文件中提取元数据,并恢复到依赖于谷歌照片元数据和文件修改日期(这是 一种更不可靠的匹配视频文件的方法,但是如果备份文件夹 最初是使用gphotos sync创建的。
- 如果您共享了相册,并单击了其他库中项目的"添加到库",则您将有两个 这些项目的副本,它们也将显示为副本。
已知问题
google api的一些突出限制限制了可以实现的功能。所有这些问题都已报告 到谷歌,此项目将在解决后更新。
- 无法发现库媒体项的修改日期。当前,gphotos sync将刷新本地 复制自上次扫描后添加的任何新照片,但不会更新在谷歌中修改过的任何照片 照片。已向谷歌提交功能请求,请参见https://issuetracker.google.com/issues/122737849" rel="nofollow">https://issuetracker.google.com/issues/122737849
- 某些类型的视频不会使用新的api下载。这主要限于旧格式的视频文件(在 我的图书馆是2010年之前拍摄的视频的一个子集。谷歌正在研究这个问题参见 https://issuetracker.google.com/issues/116842164
- API从图像中提取GPS数据请参见https://issuetracker.google.com/issues/80379228" rel="nofollow">https://issuetracker.google.com/issues/80379228
- 视频下载即使要求原始文件(=vd参数),也会对视频进行转码,请参见 https://issuetracker.google.com/issues/80149160 。我的经验是结果看起来和原来的很相似 但压缩更明显。它是一个较小的文件,大约有60%的比特率(相同的分辨率)。
- 不支持连拍。你只会看到一个爆炸的第一个文件。见 https://issuetracker.google.com/issues/124656564
- pipenv有一个硬python版本要求,请参见etc/python3.6.rst 解决方法
安装并配置
要从pypi安装最新发布的版本,只需:
pipenv install gphotos-sync
或者如果您不想使用pipenv,请创建一个虚拟环境并:
pip install gphotos-sync
(如果您不熟悉virtual environments,请参见 https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/ )
要使用源代码,请克隆git存储库并使用pipenv创建虚拟环境并运行 代码。(如果您没有pipenv,那么我建议您获取它-但是您可以手动创建一个virtualenv并使用 "python setup.py install"代替)
git clone https://github.com/gilesknap/gphotos-sync.git cd gphotos-sync pipenv install . pipenv run gphotos-sync
为了工作,gphotos sync首先需要一个链接到项目的有效客户机id 授权使用"照片库API"。发行版中没有提供。每个客户端ID 提供(大量)有限数量的免费api调用给google服务。如果此分发共享客户端ID, 所有用户都将共享此资源限制。这有点烦躁,但只需要做一次。
为此:
- 在google developer console上创建项目,遵循创建项目过程
- 授权它使用"照片库API",遵循激活和停用API过程
- 按照 设置OAuth 2.0过程 并将应用程序类型设置为 其他
-
创建客户机ID后,将其下载为
client_secret.json
并将其保存在应用程序下
配置目录:
- ~/library/application 在Mac OS X下支持/gphotos sync/ ,
- ~/.config/gphotos sync/ 在Linux下,
- c:\用户\<;用户名>;\appdata\local\gphotos sync\gphotos sync\ 在Windows下。
还要注意,对于Windows,您需要为gphoto同步的帐户启用符号链接权限 会跑下去的。请参见在Windows上启用符号链接。
如何使用
配置好脚本后,就可以使用下面的简单命令行来使用它了:
cd <installed directory> pipenv run gphotos-sync TARGET_DIRECTORY
或者,如果您使用virtualenv和pip而不是pipenv,请激活virtualenv并:
gphotos-sync TARGET_DIRECTORY
第一次,它会给您一个指向授权页的链接,以便授权客户端访问 谷歌照片。
有关其他命令行参数的说明,请键入:
gphotos-sync --help