SuperAPI AI 工具集

starter-timelapse-video

设计与创作

查看项目

更新于 11-03 19:10

技能介绍

用途:把酸种发酵种在投喂之后拍摄的照片,合成一段带标注、可无缝循环的延时视频,并推送到 Pixel 手机用 VLC 播放。

前置依赖:需先阅读 zephyr 技能,了解键位方案、烘焙日志文件名与 event_time 标签;并阅读 starter-peak-from-photos 技能,了解照片位置与命名方式,本技能复用其 list_frames.py。主机上需有 Docker,ffmpeg 只在容器内运行,不安装在主机上。

输入参数:zephyr 为必填,仅接受如 1 或 3-2 的键位形式;hours 默认取投喂以来的全部时间,指定后只保留距最新照片若干小时内的照片;direction 默认正向,reverse 表示最新在前;probe 默认为 2。投喂时间默认不手输,取烘焙日志中投喂条目的 event_time,若无时间则停止并询问。

处理流程:先检查 Docker 是否运行;所有临时文件放在会话暂存目录,没有则用 mktemp -d。始终重新拉取照片与温度,因为新数据仍在产生。用 list_frames.py 生成帧列表,用 chargingcheetah 的 main.py parquet 输出温度到暂存目录,不覆盖其自身的 merged_data.parquet。随后用 annotate_frames.py 生成标注帧,脚本把读数转换为 America/Los_Angeles 时区,并按最旧在前写出 frame_00000.jpg 起。每帧固定包含:顶部黑色横幅;一行大字如“9h 34m since feed”(不足一小时显示“26m since feed”),颜色对应当前小时;一行小字如“hour 10 now 4:21 AM fed 6:47 PM”;第三行如“avg 69°F since feed”,为投喂至该照片时刻所有探针读数的均值,取整无小数;整帧 16px 边框,颜色按投喂后经过的小时在 16 色板中切换,即在投喂分钟数处改变而非整点;相机自带日期戳保留在右下角。

编码与循环:单次播放为 15 帧/秒,约每 2 分钟一张照片即占一帧。用 ffmpeg 容器编码为 libx264、preset fast、crf 28、yuv420p;reverse 时加 -vf reverse;不添加结尾定格帧,也不加章节。为让 VLC 只在每个文件重载一次、避免退出全屏导致画面跳动,在文件内重复播放片段,使总长约 10 分钟:重复数 = ⌈600 / 单次秒数⌉,单次秒数由 ffprobe 的帧数除以 15 得出。用 -stream_loop 指定额外播放次数(重复数减一),并以 -c copy 不重新编码,文件大小随重复数增长。

校验与推送:截取第一帧、首轮最后一帧与第二轮第一帧的横幅区域拼成一张图检查,横幅时间应从起始窗口时间走到最新照片时间再回绕,且包含平均温度行。文件名形如 zephyr<KEY>-starter-loop.mp4,指定 hours 时在 -loop 前加 -<N>h,reverse 时加 -reversed。先复制到 Syncthing 投放目录,比对文件大小确认手机端已同步;再通过 adb 把文件复制到 Movies 并用 content call scan_file 注册到媒体库,因为 VLC 只有视频读取权限,无法打开 Sync 文件夹。随后用 am start 从头启动 VLC 播放,截图确认竖屏满屏且横幅可读后删除截图。

VLC 设置:使用 VLC 是因为 Google Photos 与 Files by Google 都会强制循环且无法关闭。VLC 的“视频屏幕方向”须设为竖屏;重复模式设为单曲循环;只授予 READ_MEDIA_VIDEO 权限,不授予全部文件访问;若画面被拉伸且长按宽高比选“最佳适配”无效,可用 pm clear 重置 VLC 后重新授权并设竖屏。仅在异常时检查设置,不必每次运行都查。

手机操作注意事项:每次点击都在同一 adb shell 命令内检查焦点窗口,非 VLC 即停止,且焦点检查不得与点击并行;uiautomator dump 在 VLC 主界面会因寻找网络共享而不空闲而失败,该界面改用截图读取;VLC 暂停时不重绘,暂停位置需从 dumpsys media_session 读取;不要用 monkey 启动应用;完成后发送 Ping 通知。

输出:用几行报告窗口的起止时钟时间、照片数、单次长度、重复数与总时长、文件大小、文件名,并说明已在 VLC 中播放;未验证的步骤(如未截图)要明说。

错误处理:若 Docker 无法启动、照片目录自投喂以来无帧、parquet 为空或手机 adb 不可达,应停止并说明是哪一项及对应命令与输出;不得为绕过失败而在主机上安装 ffmpeg、adb 或其他软件。