<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>延时视频 on 牙刷刷的小站</title><link>https://www.tianhao.me/tags/%E5%BB%B6%E6%97%B6%E8%A7%86%E9%A2%91/</link><description>Recent content in 延时视频 on 牙刷刷的小站</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>牙刷刷</copyright><lastBuildDate>Sat, 12 Jul 2025 17:10:27 +0800</lastBuildDate><atom:link href="https://www.tianhao.me/tags/%E5%BB%B6%E6%97%B6%E8%A7%86%E9%A2%91/index.xml" rel="self" type="application/rss+xml"/><item><title>我的智能小助手 3.0：打造一间全自动化的"时光放映室"</title><link>https://www.tianhao.me/posts/rk-camera-capture-merge/</link><pubDate>Sat, 12 Jul 2025 17:10:27 +0800</pubDate><guid>https://www.tianhao.me/posts/rk-camera-capture-merge/</guid><description>&lt;img src="https://www.tianhao.me/img/avatar.png" alt="Featured image of post 我的智能小助手 3.0：打造一间全自动化的"时光放映室"" /&gt;&lt;p&gt;欢迎回到我的“偷懒”摄影系统系列。在之前的篇章里，我们一起见证了一个普通摄像头如何被赋予“思考”的能力，以及如何为它建造一间优雅、便捷的“控制室”。然而，故事并未就此落幕。我们那个聪明的摄影师，每天都在聪明地“偷懒”，为我们精准地捕捉了海量、充满价值的瞬间。这些照片，如同一颗颗散落的珍珠，蕴含着时光的秘密，静静地躺在服务器的硬盘深处。&lt;/p&gt;&#10;&lt;p&gt;是时候了，我们该把这些珍珠串联起来，让它们在光影的流动中，绽放出璀璨夺目的光芒。今天，我将向大家展示这个项目的最终章，也是我个人认为最激动人心的部分——打造一间全自动化的“时光放映室”。这个放映室的核心，是一个强大而可靠的Shell脚本。它是我整个系统的“幕后总导演”，肩负着神圣的使命：在每个寂静的黎明到来之前，将过去一天的万千照片，自动合成为一部部精彩纷呈的延时影片。&lt;/p&gt;&#10;&lt;p&gt;项目代码：https://github.com/AndroidOL/camera-capture/tree/main/merge&lt;/p&gt;&#10;&lt;h2 id="从素材堆积到影像诗篇最后的亿步"&gt;从“素材堆积”到“影像诗篇”：最后的“亿”步&#10;&lt;/h2&gt;&lt;p&gt;想象一下，如果没有这位自动化的“总导演”，我的生活将是怎样一番景象？那将意味着，每天，我都需要像一个数字时代的“矿工”，手动登录到远程服务器，在前一天产生的、可能多达几十GB的成千上万张照片中进行挖掘；然后，将这些“原矿”小心翼翼地下载到本地电脑；接着，再启动复杂的视频编辑软件，将这些照片一张张拖入时间线， painstaking 地设置帧率、编码器、码率……最后，在漫长的等待中，点击“渲染”按钮。&lt;/p&gt;&#10;&lt;p&gt;这整个过程，不仅是一场与耐心和毅力搏斗的、毫无创造性可言的机械劳动，更可怕的是，它极易出错。万一哪天我忘了，或者因为工作繁忙而错过，那天的“影像日记”就会出现一个无法弥补的空白。这不是我想要的。&lt;/p&gt;&#10;&lt;p&gt;我需要的是一个完全无人值守、极致稳定可靠、并且足够聪明的自动化流程。它应当是一位不知疲倦的艺术家，在每天固定的时间，比如万籁俱寂的凌晨，悄然启动，像一位技艺高超的电影剪辑师，将过去一天的零散素材，精心编排成一部完整的影片，然后优雅地将其安放于“家庭影片库”的数字货架上，静候我的检阅。&lt;/p&gt;&#10;&lt;p&gt;于是，这个倾注了我大量心血的自动化脚本——&lt;code&gt;daily_photo_to_video.sh&lt;/code&gt; 应运而生。它远非一个简单的ffmpeg命令封装，而是一个拥有工业级健壮性的“智能生产线”。&lt;/p&gt;&#10;&lt;h2 id="总导演的超凡技艺揭秘自动化脚本的核心设计"&gt;“总导演”的超凡技艺：揭秘自动化脚本的核心设计&#10;&lt;/h2&gt;&lt;p&gt;这个脚本的设计哲学，是**“追求极致的稳定与高效”**。我将它武装到了牙齿，让它能从容不迫地应对各种可以预见的、甚至难以预见的复杂状况。&lt;/p&gt;&#10;&lt;h3 id="1-效率的极致榨干硬件的每一分潜力"&gt;1. 效率的极致：榨干硬件的每一分潜力&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;高速公路 - Ramdisk (内存盘)&lt;/strong&gt;&lt;br&gt;&#10;直接在传统硬盘上读取上万张零散的小图片，同时写入一个巨大的视频文件，磁盘I/O（读写）的瓶颈会立刻显现，整个过程将变得异常缓慢。我的解决方案堪称激进：在服务器宝贵的内存中，直接开辟出一块高速的虚拟硬盘（Ramdisk）。&lt;/p&gt;&#10;&lt;p&gt;脚本启动后，会首先将所有待处理的照片，从拍照服务器通过网络高速同步到这块内存盘上。随后，视频合成（编码）的所有密集读写操作，也全部在这块虚拟硬盘内完成。内存的读写速度是普通硬盘的数十倍甚至上百倍，这无异于为数据的迁徙铺设了一条无视物理定律的、光速穿梭的“星际公路”，极大地缩短了处理时间。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;专业引擎 - 硬件编码 (HEVC_RKMPP)&lt;/strong&gt;&lt;br&gt;&#10;视频编码是典型的计算密集型任务，纯靠CPU来“硬算”，就像让一位全能但劳累的管家去做一件极其专业的木工活，不仅效率低下，还会让服务器的“心跳”（CPU占用率）飙升，风扇狂转。幸运的是，我所使用的服务器（基于Rockchip芯片）拥有专门的视频处理单元（VPU）。&lt;/p&gt;&#10;&lt;p&gt;我的脚本会精准地调用ffmpeg，并指定使用&lt;code&gt;hevc_rkmpp&lt;/code&gt;这个硬件编码器。这相当于把专业的工作，交给了那位专门聘请的、技艺高超的“电影剪辑师”，让VPU来承担最繁重的编码任务，从而彻底解放了CPU。同时，我选择了高效的HEVC (H.265) 编码格式，它能在保持极高质量画面的同时，将视频体积压缩到传统H.264的一半左右，为我的“家庭影片库”节省了海量的宝贵空间。&lt;/p&gt;&#10;&lt;h3 id="2-稳定性的基石工业级的容错与自愈"&gt;2. 稳定性的基石：工业级的容错与自愈&#10;&lt;/h3&gt;&lt;p&gt;在无人之境中独自航行的飞船，其价值不仅在于速度，更在于它应对宇宙风暴的生存能力。同样，一个需要常年无人值守的脚本，“逆商”至关重要。我为它构建了四重“安全协议”，来应对各种可能发生的意外。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;脚本的智能应对策略&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;脚本意外中断&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用&lt;code&gt;trap&lt;/code&gt;清理机制，在中断时自动清理临时文件并卸载Ramdisk&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同时运行冲突&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用&lt;code&gt;flock&lt;/code&gt;文件锁机制，避免多实例并发执行冲突&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;存储空间不足&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;提前检查目标路径剩余空间，避免写入中途失败&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;目标硬盘掉线&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动切换至备用存储路径，保障任务完成并暂停旧任务追赶&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="3-智慧的调度绝不错过任何一天的精彩"&gt;3. 智慧的调度：绝不错过任何一天的精彩&#10;&lt;/h3&gt;&lt;p&gt;我希望我的“放映室”里，每一天的影片都是完整的，如同一部连贯的编年史。因此，脚本最智能、最让我引以为傲的部分，在于它那近乎偏执的“补全”逻辑。&lt;/p&gt;&#10;&lt;p&gt;脚本运行时会：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;回顾过去7天的日志，检查是否有影片缺失或失败；&lt;/li&gt;&#10;&lt;li&gt;若发现遗漏，优先从最早的那天开始补；&lt;/li&gt;&#10;&lt;li&gt;二次验证远程素材是否还在，确保不会空转；&lt;/li&gt;&#10;&lt;li&gt;若全部完整，才处理“昨天”的新素材。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这样，系统就拥有了记忆与责任感，始终维持一份完整的“影像日记”。&lt;/p&gt;&#10;&lt;h2 id="一部家庭史诗的诞生"&gt;一部“家庭史诗”的诞生&#10;&lt;/h2&gt;&lt;p&gt;现在，这已经成为一种充满仪式感的日常。每天清晨，当我泡好咖啡，打开“家庭影片库”时，一部全新的、以昨天日期命名的延时影片已经静静地躺在那里了。&lt;/p&gt;&#10;&lt;p&gt;它可能记录了窗外雷阵雨的全过程，也可能捕捉了我加班至深夜的身影，又或只是平淡地描绘阳光在家中流转的痕迹。&lt;/p&gt;&#10;&lt;p&gt;这个自动化脚本，就像一个沉默而强大的心脏，为我整个智能摄影项目注入了源源不断的生命力。它将日复一日的、琐碎的视觉信息，升华为一部部浓缩了时间精华的影像诗篇，将冰冷的数据，提炼成了有温度的记忆，让我真正得以“看见”并“珍藏”那些无声流逝的时光。&lt;/p&gt;&#10;&lt;h2 id="创造的乐趣"&gt;创造的乐趣&#10;&lt;/h2&gt;&lt;p&gt;创造的乐趣，就在于此——用代码和逻辑，去构建一个能自动为我们创造、整理和呈现美好的系统。&lt;/p&gt;&#10;&lt;p&gt;下一步，或许是训练一个AI，让它能自动为这些影片配上最契合的背景音乐，或者剪辑出“每周精华”了。&lt;/p&gt;&#10;&lt;p&gt;这条通往“更好生活”的创造之路，永无止境，而这，也正是其魅力所在。&lt;/p&gt;&#10;</description></item></channel></rss>