我的照片管理方案
由于钟爱摄影(瞎拍),在许多时候都会拍摄大量的照片和视频,对于这些照片的合理存储和展示自然就成了一个难点,一般来说,对于一个照片(或一段视频),有以下需求:
- 拍摄完成之后可以方便地完成后期
- 后期修正完成后需要保存原始图片(NEF)和已经修正好的各个版本
- 将需要发布的照片对于修正各个版本针对平台(比如 500px)进行发布
- 在需要的时候可以随时给朋友/同学展示一些日常照片
对于照片来说,一般有如下分类:
- 手机拍摄的价值不是很高的图片,比如某些通知文件的拍摄(无需后期)
- 以摄影为目的单反拍摄照片(需要后期)
- 单反拍摄的旅游记录(需要后期)
照片整理思路
对于以上 4 个需求,照片(以及视频)被我分为:本地文件、存储文件和展示文件。
本地文件
此处针对需要进行后期的图片以及一些视频为例,由于需要大量使用 Lightroom 对照片进行后期处理,我选择了将所有的照片文件以文件夹的形式放入一个统一的文件夹中,文件夹目录类似如下:
Photos
├── 2019-06-20 Hackathon
└── 2019-07-31 Random walk in school
这样做的好处是照片相对集中管理,且对于后期需要切换平台来说非常方便,也就是 Lightroom 的 Category,对于 Lightroom 来说,其默认的 Category 文件被保存于 C:/Users/<UserName>/Pictures/Lightroom/Lightroom Catalog.lrcat
,所以如果需要对 Lightroom 有一个完整的备份的话只需要对此文件以及上述目录进行备份即可。
存储文件
照片的存储非常耗费空间,如果使用网盘的话,对于批量操作和命令行操作来说不是非常方便,且由于存储大多是为了备份,选择一个合适的对象存储可以大幅减少开销,例如 Google Cloud Platform 的存储定价如下:
Multi-Regional Storage (per GB per Month) | Regional Storage (per GB per Month) | Nearline Storage (per GB per Month) | Coldline Storage (per GB per Month) |
---|---|---|---|
$0.026 | * | $0.010 | $0.007 |
由于我们丢入存储中之后可能很长时间内(直到本地硬盘损坏之前)都不会去使用和修改文件,所以完全可以考虑使用 Coldline 存储,即使有 200G 数据,每个月开销也仅仅为 $1.4。
如果你正好使用了例如 DigitalOcean 这样的服务商,它们提供了 250G/5$ 且可以创建无限多桶的存储方案,完全可以创建多个桶分别用于服务器备份和本地照片备份。
例如在我的 DO 账户上单纯是照片相关(照片,视频,Lightroom Category 备份)就有许多的桶,大概长这个样子(名称我就 Blur 了,各位可以根据文件数量和大小猜一下分别是用来做什么的):
这样每次拍照之后只需要调用一下脚本将图片批量同步到 S3 桶即可,或者其实可以可以直接使用 s3fs
之类的工具保持本地挂载,不过这个在 Windows 上和大陆的地区网络环境下可能用起来有点小糟心。
这里有一点需要注意,虽然对于靠谱的云服务商来说并不会偷窥用户隐私,但是照片在上传的时候建议加密后上传,不过
s3cmd
类工具在sync
的时候是不可以使用加密选项的,意味着我们需要本地加密后用s3cmd cp
上传,且为了差异化上传,一个完整压缩包的形式也无法使用。
选择对象存储而不是网盘还有一个比较重要的原因在于后期发布的便捷性,见下文。
图片展示
对于图片展示来说,主要有两个方面的需求:
- 对于可以公开展示的图片/视频分别放到合适的平台(比如 500px 和 YouTube)
- 对于不公开的照片(比如家庭照片)需要寻找一个跨平台(至少浏览器,iOS 和 Android)支持的服务,例如 Google Photos
对于内部照片分享来说,Google Photos 似乎非常方便,除了在批量上传时有一些 Bug 以外,对于普通的无需修正的手机拍摄的照片,完全可以选择拍摄后自动同步到 Photos 上,而对于一些容量特别大的视频,则建议手动复制到电脑上后先上传,然而个人在上传大量的视频(容量 >10G)的时候经常遇到上传失败的问题,类似的问题通过海外大带宽的 VPS 上便不存在,非常诡异。
为了解决这个问题,可以使用对象存储中转的方式进行,如此以来一个完整的视频处理工作流便是:
手机拍摄低重要度照片(无需后期) | 单反拍摄的需要发布的照片 |
---|---|
1.拍摄 | 1.拍摄 |
2.自动同步 Google Photos | 2.本地后期 |
3.同步到对象存储 | |
4.通过对象存储中转同步到各个平台 | |
3. 加入对应的 Google Photos Album | 5.加入对应的 Google Photos Album |
小结
经常可以听到周边的同学因为手机丢失/损坏/手滑等原因失去了大量的照片,虽然丢的不是我的照片,我并不会为此觉得可惜(跑~
但是我是不会允许这种情况发生在自己身上的,如文初所说,照片分为「本地文件、存储文件和展示文件」,分别用于「本地处理、存储归档、对外展示」,使用以上的架构可以做到:
- 在有互联网接入的情况下方便地对外展示希望对外展示的相片/视频
- 在本地电脑可用的情况下方便地对图片/视频进行处理,由于照片放在一个文件夹下,这个文件夹可以十分方便地转移位置
- 在本地磁盘损坏/被盗的时候快速从对象存储中获取备份数据
不过呢,这样的设计还是有以下缺点或者说可能的无法掌握的故障点:
- DigitalOcean 帐号被盗/丢失 -> 丢失照片数据(照片是加密的,不会泄漏)
- Google 帐号丢失/被锁定 -> 丢失了手机拍摄照片,需要重新同步之前拍摄照片并重建 Album
我知道这样一个方案看上去有点麻烦,不过呢:
数据无价,谨慎操作。——DiskGenius
此外,如果 DigitalOcean 的无限桶计划比较吸引你的话,可以考虑通过我的 aff 注册:「https://m.do.co/c/b0f12a777820」,这样你在注册的时候可以直接获得 100$,我也可以得到 25$ 来给我的 Spaces 续费,国安民乐,岂不美哉?