本帖最后由 nodematrix 于 2024-2-19 13:08 编辑
延时摄影是将一系列固定间隔拍摄的照片合成为时间流影片的技术,常用来表现人们难以察觉的变化和自然环境的动态过程。我们尝试用ESP32-CAM(Ai-Thinker)开发板来制作延时摄影作品。若以编程方式实现定时拍摄并保存照片到SD卡,需要对ESP32编程有所了解。可以参考入门教程:使用Arduino IDE 2.0开发ESP32摄像头模块(https://www.nodematrix.cn/programming-esp32-camera-with-arduino-ide/)。
这里,我们选择一种不需要编程的简便方法,使用Node-Camera固件(https://www.nodematrix.cn/firmware/)。Node-Camera固件使用说明详解介绍了固件功能(https://www.nodematrix.cn/docs/node-camera/)。 定时拍摄只需简单设置:
1. 在系统设置界面的Feature标签中启用SD卡支持。
2. 在Capture标签中启用定时抓拍(Timing Trigger),设置间隔(例如5秒),并启用Save to SD Card选项。
3. 保存并重启使设置生效。进入设置界面,在Tools标签中打开Timing,固件即以设置间隔拍照并保存到SD卡中。要停止拍摄时,关闭Timing即可。拍摄的照片可以在SD卡界面查看。
获取照片后,需要在电脑上合成视频。可以取下SD卡,将照片复制到电脑,用视频编辑软件进行合成。相信网上有不少教程可以参考。我们准备用一个看上去稍麻烦,实际可能更简单的办法,利用脚本自动完成以下两步动作:
- 通过Wi-Fi网络从SD卡下载所有照片(不需要取下SD卡)。
- 将下载的照片合成为视频。
脚本是一种粗犷的编程方式,其本身不实现复杂功能,但脚本可以调用外部程序,并将这些程序的功能串联起来,以实现特定目标。我们的脚本会调用两个外部程序,一个用于下载照片的curl,另一个用于合成视频的ffmpeg。这两个程序都不需要安装,将下载的zip文件解压到指定目录即可。
curl下载:https://curl.se/windows
ffmpeg下载:https://www.gyan.dev/ffmpeg/builds
假设将curl解压到D:\curl,ffmpeg解压到D:\ffmpeg,目录结构如下:
为了在脚本中调用程序,要把程序可执行文件的路径添加到Windows环境变量Path中。
完成以上步骤之后,打开命令行窗口执行:curl -V 和 ffmpeg -version,查看程序版本以验证是否一切正常。
最终脚本在这里下载(https://www.nodematrix.cn/downloads/lapse.zip),建议解压到单独目录(例如D:\lapse)。共有3个脚本文件:
- lapse.cmd – 下载照片并合成视频。
- download.cmd – 只下载照片到指定目录。
- order.cmd – 将照片按拍摄顺序以连续序号命名。ffmpeg要求合成视频的照片文件名序号必须连续,而我们可能会剔除一些不需要的照片,使得序号不连续。该脚本重命名文件为符合ffmpeg要求的序列。
执行脚本前,请修改脚本变量以符合实际环境,包括:Node-Camera的实际IP地址、保存下载照片的目录和输出的视频文件名。
[url=home.php?mod=space&uid=3148]@echo[/url] off
setlocal enabledelayedexpansion
:: 替换IP为Node-Camera的实际IP
set "host=http://192.168.1.100"
:: 保存下载照片的本地目录
set "localpath=photos"
:: 输出视频文件名
set "output=out.mp4"
...
脚本可由命令行或双击执行。若不需要对照片做进一步处理,则执行lapse.cmd即自动下载照片并合成视频。以下视频由5秒间隔拍摄的250张照片合成。
- 为使合成视频的色彩与明暗连贯,应保持照片的白平衡与曝光量一致。建议在Node-Camera摄像头设置中关闭自动白平衡(AWB)或选择固定模式,关闭自动曝光(AEC),根据环境亮度设置曝光量(Exposure)。
- 启动拍摄之前,建议在设置界面的Tools标签中重置文件名序列号(Reset SEQ),以使照片从IMG_0000.JPG开始顺序命名,方便照片管理。
也可以先执行download.cmd将SD卡的照片下载到本地目录,对照片做进一步处理后,执行order.cmd将文件名序列化,再利用ffmpeg由命令行合成视频:
ffmpeg -framerate 24 -i "photos\IMG_%04d.JPG" -c:v libx264 -pix_fmt yuv420p out.mp4
最后,脚本文件带有详细的注释,或许你想要扩展一下。Good Luck!
原文:https://www.nodematrix.cn/esp32-lapse/
|