你有没有过这种经历?手机里存了几千个视频片段,但从来没完整看过一遍,我去年元旦立了个flag:每天录一段视频,坚持365天,结果三天后就放弃了——不是懒得录,而是整理素材太痛苦了,直到我用Go语言写了个小工具,才真正把这件事坚持了下来。
为什么是Go语言?
说实话,一开始我想用Python,但我的树莓派上跑着好几个服务,Python环境乱得像我的书桌,Go语言的好处是编译成单个二进制文件,扔到哪都能跑,而且它的并发模型特别适合处理视频这种IO密集型的任务。
我花了一个周末写了第一版,功能简单得可怜:
- 按日期自动创建文件夹
- 给视频文件重命名成
mp4这种格式 - 生成一个简单的HTML索引页面
但就是这个小工具,让我坚持到了第100天,后来我不断加功能,到第365天的时候,它已经变成了一个相当完整的系统。
视频日记的痛点
你可能会说:“不就是录个视频嘛,有什么难的?”但当你真的要做365天的时候,问题就来了:
- 文件命名混乱——手机的默认命名是
VID_20240101_123456.mp4,按字母排序完全看不出顺序 - 存储分散——今天在手机上录的,明天用相机,后天可能用电脑摄像头
- 无法快速回顾——想看一个月前的自己说了什么,得一个个打开视频找
我的Go程序解决的就是这三个问题。
核心代码思路
先别急着看代码,我告诉你我是怎么想的,这个程序的核心就三个部分:
文件监听和移动
我用了一个fsnotify库来监听指定文件夹,当新视频文件出现时,自动把它移动到按日期组织的目录结构里:
watcher, _ := fsnotify.NewWatcher()
defer watcher.Close()
go func() {
for {
select {
case event := <-watcher.Events:
if event.Op&fsnotify.Create == fsnotify.Create {
moveFile(event.Name)
}
case err := <-watcher.Errors:
log.Println("error:", err)
}
}
}()
重命名规则
这个逻辑我改了好几版,最初是简单的mp4,但后来发现日期信息很重要,最终版是这样的:
func generateName(day int) string {
return fmt.Sprintf("day%03d_%s.mp4", day, time.Now().Format("2006-01-02"))
}
day%03d这个格式化太重要了,不然第2天会排在第10天后面,这种细节你得亲自踩过坑才懂。
生成索引页
最让我得意的是这个功能,它扫描所有视频文件,生成一个带缩略图的HTML页面,按照时间线排列,这样我就能在一个页面上看到365天的全部记录:

type VideoEntry struct {
Day int
Date string
Filename string
Thumbnail string
Transcript string
}
到后来我甚至加了语音转文字的功能,用whisper模型把每段视频的语音转成文本,然后让这个工具生成当天的“关键事件”。
你可能会问:值得吗?
说实话,去年前100天,我经常问自己这个问题,但到第200天的时候,我开始发现好处了:
- 情绪观测:我能看到自己哪段时间特别焦虑(视频里的语速明显变快)
- 记忆锚点:某天拍了什么特别的事,看一眼日期就能搜到那个视频
- 剪辑素材库:年底做回顾视频时,素材全在这个目录里,省了大量翻找时间
存视频的存储策略
我一开始把所有视频都存在树莓派的外接硬盘上,结果两个月就满了,后来加了个简单的归档策略:
- 当前月的视频放在高速SSD上,方便随时剪辑
- 上个月及以前的视频自动压缩并转移到机械硬盘
- 每季度把上季度的视频备份到网盘
这个策略用Go写也不复杂,就是定期跑一个cron任务,检查文件年龄然后移动,关键是时间戳的判断要用文件修改时间而不是文件名,因为重命名可能会改变文件顺序。
高级功能:视频摘要
到第300天的时候,我加了个功能,让我回头看视频的欲望大大增加,我用ffmpeg提取每段视频的关键帧,然后让Go程序根据语音转文字的结果,自动生成一行的摘要,比如某天的摘要可能是:“讨论了新项目的技术选型,最后选了Go,因为上手快且生态好。”
这个功能大大提高了回顾效率,我不需要看视频,只需要浏览摘要就能快速定位到某个时间点。
关于坚持这件事
写了这么多代码,你以为我要说Go语言有多牛逼?其实最重要的是把工具做简单,人都是有惰性的,如果每天录完视频还要花五分钟整理,你肯定坚持不下来,我的Go程序把这些杂活全自动了——录完扔进特定文件夹,其他都不管。
我见过很多人做类似的事,用Notion、用Excel、用各种App,但都太复杂了。好的工具是让你感觉不到工具的存在,我写这个Go程序的原则就是:全程除了录视频,其他时候都不需要动脑操作。
现在这个程序已经跑了一年多,我还在用,它不完美,比如偶尔会因为文件名冲突报错,但我已经习惯了这种小毛病,就像养了个宠物,你不会因为它偶尔拆家就不要它。
日子就是这样,一天一天过,视频一天一天存,到第365天回头一看,365个文件整整齐齐躺在硬盘里,那一刻的满足感,比写完一万行代码都强。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/lvyou/2583.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《从第一天到第365天,我用Go语言写了一个视频日记系统,结果治好了我的拖延症》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:你有没有过这种经历?手机里存了几千个视频片段,但从来没完整看过一遍,我去年元旦立了个flag:每天录一段视频,坚持365天,结果三天后就...