你有没有想过,如果把你一年365天的生活都拍成视频,那会是什么样子?不是那种精心剪辑的Vlog,不是滤镜加持的旅行大片,就是你起床、刷牙、挤地铁、吃外卖、发呆、翻手机、打哈欠的那些瞬间,听起来有点无聊,对吧?但有意思的是,当这些“无聊”被拼在一起,反而成了最珍贵的东西。
去年年底,我给自己定了个小目标——用Golang写一个程序,每天自动录制一段15秒的生活视频,然后合并成年度合集,我当时想着,反正也坚持不了几天,结果呢?我还真干下来了,今天想跟你聊聊,这个过程里我学到的东西,还有为什么我觉得每个人都可以试试。
为什么选Golang来干这事?
说实话,一开始我用Python写这个程序,Python简单啊,一行import cv2就能调摄像头,但跑了两周,问题来了——内存泄漏、录制卡顿、每次启动还得手动敲命令,我就是个普通人,不是程序员,我哪受得了这些。
后来有个朋友说:“你试试Golang吧,编译出来一个小小可执行文件,双击就能跑。”我试了,真香。
Golang的好处其实就三点:
- 编译成单文件:不用装Python环境,不用担心版本冲突,发给爸妈用也行。
- 并发简单:同时录制视频、保存文件、上传云端,Golang的goroutine让这些事各干各的,不打架。
- 跨平台:我Windows笔记本、MacBook、甚至是树莓派上都能跑同一份代码。
说实话,我写代码水平一般,但Golang的语法真的好懂,你看着for循环、if判断,跟读说明书一样,这不就是我这种“半吊子”最需要的吗?
我的“365天生活视频”项目到底怎么搞的?
先说说硬件,我用的是一个很便宜的USB摄像头,1080p的,淘宝上几十块钱,笔记本自带的也行,但我想让它一直插着,不用占电脑屏幕。
软件方面,核心就是Golang的一个库叫gocv,它是OpenCV的Go语言绑定,安装有点折腾,但一次搞定后,再也不用管,代码结构大概是这样的:
-
每天固定时间启动录制:我用
time.Ticker每小时检查一次,设置成每天早上8点、中午12点、晚上8点各录一段15秒,为什么这几个时间点?因为我大部分时候在家,这些时间嘛,比较真实——早上刚醒的懵、中午吃饭的狼狈、晚上瘫沙发的废。 -
随机选择片段:不是每个整点都录,那样太死板,我用
math/rand随机决定要不要录,这样一年下来,你永远不知道下一次录到的是你加班到崩溃,还是你笑到肚子疼。 -
自动保存和备份:录好的视频用日期+时间命名,放在
videos/2024/这样的文件夹里,然后用os/exec调用rclone自动上传到网盘,我选的是OneDrive,因为白嫖学校的,但理论上,Google Drive、Dropbox、甚至自己的NAS都行。
核心代码其实很短,几十行的事,但就是这个“每天开机就录、录完就传”的自动流程,让我这个懒人坚持了下来。
真实的一年:数据会说话
365天下来,我录了大概187段视频,总时长差不多46分钟,为什么不是365段?因为总有一些天机器坏了、网断了、或者我忘了开机,但这个不完美恰恰是最真实的。
我把这些数据整理成了一张表,看得我有点感慨:
| 月份 | 录制天数 | 最常出现的场景 | 那天的意外事件 |
|---|---|---|---|
| 1月 | 15天 | 书桌前的键盘声 | 猫跳上桌打翻咖啡 |
| 2月 | 12天 | 火锅店的红油 | 朋友生日抹蛋糕 |
| 3月 | 16天 | 阳台晒的被子 | 楼下修路吵到爆 |
| 4月 | 14天 | 雨天的窗玻璃 | 突然停电一片漆黑 |
| 5月 | 18天 | 风扇摇头的影子 | 蚊子在我脸上拍 |
| 6月 | 13天 | 西瓜和勺子 | 空调坏了睡地板 |
| 7月 | 15天 | 太阳晒在地板上 | 午睡流口水醒了 |
| 8月 | 16天 | 饮料瓶堆成山 | 半夜看球赛尖叫 |
| 9月 | 12天 | 新学期的路 | 忘记带钥匙蹲门口 |
| 10月 | 14天 | 银杏叶和毛衣 | 煎糊了五个饺子 |
| 11月 | 11天 | 暖手宝和围巾 | 暖气漏水慌到哭 |
| 12月 | 15天 | 圣诞树的彩灯 | 跨年那天开错视频 |
数据来自我那个蹩脚程序生成的JSON日志,格式有点乱,但每个数字都是真的。
你看,这些场景没什么特别的,但我看每一段都能想起当时的心情,猫跳上桌打翻咖啡”那段,我本来在写代码,猫爪子直接踩键盘,视频里全是我的惨叫声和黑屏——因为咖啡浇坏了摄像头。
这还只是表面的,我后来用Golang写了个小工具,分析这些视频的元数据,比如当天是晴天还是下雨、我穿的是T恤还是羽绒服、甚至能从灯光判断我那天晚上几点回家。
技术细节的坑,我也踩过
既然说用Golang写,那就得说实话——不是一帆风顺的,踩了几个坑,分享给你,说不定你以后用得上。
第一个坑:文件命名冲突。 我一开始用time.Now().UnixNano()做文件名,结果同一秒内如果录了两次(比如系统时钟不准),直接覆盖,后来改成YYMMDD_HHMMSS格式,但用uuid做最终文件名保险点,Golang的github.com/google/uuid包很好用。
第二个坑:磁盘空间警告。 1080p的15秒视频,每段大概10-30MB,一年下来,几十个G走不了,我用os.Stat检查目录大小,如果超过10G就自动删除最旧的,但保留规则要谨慎,我删掉了6月那段的背影,后来才发现那天我正好接到了入职通知,视频里我高兴得原地转圈,现在想想有点心疼。

第三个坑:权限问题。 在树莓派上跑的时候,摄像头设备需要video组权限,Golang程序运行时没有sudo,默默报错也不说,我加了一个err检查,如果打开摄像头失败就重试三次,还是不行就发邮件通知自己,Golang的net/smtp包发邮件很简单。
这些坑,说大不大,说小不小,但正因为自己踩过,才觉得这个项目真实——不是那种“完美代码”,而是一个普通人在跟电脑较劲的记录。
谁适合干这件事?怎么干?
说实话,这不是给所有人都推荐的事,如果你觉得录视频很尴尬、或者你特别讨厌被摄像头盯着,那就算了吧,但如果你像我一样,想看看自己这一年到底干了啥,那试试也无妨。
具体怎么干?我建议几点:
- 不用追求高清:360p都够,重点是记录,不是电影画质。
- 别管“好不好看”:你刷牙的样子,比你发朋友圈的照片真实一百倍,不喜欢就删,没人看到。
- 每天只录几秒:像我那样15秒真的够了,太多了你剪辑的时候想死。
- 代码开源的拿来用:我的代码丢在GitHub上了,搜“365-life-video-golang”应该能找到,我写得很糙,但能用,参数都在一个
config.json里改,比如摄像头的索引、录制时长、保存路径、上传间隔等等。
如果你不会写代码,也有现成的方案,比如Windows上的“相机”应用可以设置定时录制,但手动复制黏贴一年也挺累的,Golang的好处就是,你写一次程序,它自己跑一年,那种“我创造了一个东西在记录我”的成就感,比直接买个监控摄像头强太多了。
一年后的那个晚上
跨年夜,我终于把所有片段拼成了一部长达46分钟的视频,没有配乐,没有转场特效,没有字幕,就是一个接一个的15秒,从1月跳到12月。
我看到自己从裹着羽绒服缩成一团,到穿着短袖汗流浃背,再到秋天裹围巾打喷嚏,我看到桌上的绿植从干枯到发新芽再到被猫咬断(对,又是那只猫),我看到镜子里的发型从平头到大妈卷到秃头,最后回归平头。
最触动我的是一段8月的视频,那天下午三点,我躺在沙发上,风扇呼呼地转,手机屏幕亮着,我对着镜头发呆,突然我笑了,笑得很灿烂——没来由的,那一刻我回忆不起来为什么笑,但视频里的我在笑,这就够了。
那个视频最后10秒,风扇吹过来,我眼睛眯了一下,一切都很平凡,平凡到如果不是录下来,我永远不会记得这个夏天下午发生过什么。
我的Golang程序还在跑,今天早上,它又录了一段——我站在灶台前,煎糊了鸡蛋,嘴里骂了一句“去**的”,摄像头架在冰箱顶上,拍下了我骂骂咧咧的样子还有窗外阴天的天空。
这就是我的一年,也是你的。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.uss1.cn/nengyuan/1970.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《一年365天的生活视频,用Golang记录每一天的真实》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:你有没有想过,如果把你一年365天的生活都拍成视频,那会是什么样子?不是那种精心剪辑的Vlog,不是滤镜加持的旅行大片,就是你起床、刷牙...