用Android 手机玩延时摄影

延时摄影是一种很精妙细微的展现形式,时间被压缩后有流动的美。每隔固定时间按一次快门,再将照片按某个帧率连续起来,就生成一段流畅的视频。摄影发烧友一般用单反拍照,用快门线控制拍照的周期。鉴于单反不是人人都有(譬如我就没有。。),这里分享一个经济实用的点子,用安卓和电脑来DIY延时摄影。

思路

Android 系统开放了一些接口,Debug模式下电脑可以通过Android SDK提供的adb 命令调用它们,模拟启动相机、聚焦、拍照动作,并将照片保存到电脑硬盘。将这一连串操作用脚本记录下来,并设置linux定时任务,周期执行。最后,通过ffmpeg 或者其他视频编辑软件将照片变成视频/gif。

器材

一部安卓手机 + 一台电脑(假设为Linux) + 一根USB线

拍摄主题

玫瑰花绽放

做法

我手头有一部大概一年前买的红米,测试了下拍照效果,虽然比不上正在用的5c但也相当凑和。笔记本刚刚重装了个系统(Arch),在官网上下好了新鲜热乎的Android SDK。

用USB线将手机连到笔记本,打开手机的Debug模式。另外,推荐将手机设置为Debug模式下屏幕常亮。用Android SDK的platform-tools目录下的adb命令检查是否顺利连接了手机。我在自己的机器上折腾红米的挂载还颇费了一点力气,具体操作可以google之,此处不赘述。

用脚本调用adb命令,实现启动相机、聚焦、拍照、保存照片到电脑、删除手机上的照片等一连串操作。将照片从手机上删除是考虑到手机SD的容量有限。Shell脚本实现起来最简单。这里不得不赞叹adb的强大,不仅可以用”adb shell”像普通linux系统一样操作Android设备,还可以向设备发送按键动作、模拟触屏动作等。如何发送Keyevent,如何捕捉(capture)、记录(record)、发送屏幕触摸动作,可以Google之,此处不赘述。

将脚本作为系统的定时任务执行。Linux下用crontab可以非常方便地实现。如何设置定时任务的时间间隔,需要做一点小数学题,用拍摄对象的总耗时与视频的帧率算出来,具体参考博客

做完前期的技术准备后,该拍摄主角登场了。我选择的拍摄主题是“鲜花绽放”,所谓一支浓艳露凝香,在我心中玫瑰是坠吼不过的了。在花店用3人民币买了一朵含苞待放的玫瑰花骨朵儿。给它粘个背景,插在一个透明酸奶罐子中,架好灯光(淘宝买的USB LED灯)。固定好手机,缚得牢牢的,不要让它晃动。

静静地让程序跑,跑,跑。。。。(宿舍晚上会熄灯,这是比较麻烦的,暂时我还没想到解决办法。不过幸亏玫瑰花儿开得快,白天就很饱满了。)

时间大概过去了五个小时。。。

好了,花儿开好了。

打开电脑上存放照片的目录,用ffmpeg或者别的视频编辑软件,将它们合成视频。(我这里为了方便合成的是gif。)

Github例子

我的Shell脚本见这个项目

最后是gif效果图,考虑到博客容量我降低了图片尺寸和质量。