365天第一集视频,我用Go语言写了个时间胶囊,结果把自己整破防了
- PG国际电子
- 2026-08-19 17:35:12
- 123
从“打卡焦虑”到“代码执念”
上个月刷手机,看到有人晒“365天第一集视频”的截图——不是综艺,是他自己每天录一分钟视频,攒了一整年,我第一反应是:这人是不是太闲了?结果当天晚上,我鬼使神差地在GitHub上新建了个仓库,名字就叫 365-days-first-episode。
为啥?因为我想用Go语言写个工具,自动管理这一年的视频文件,你说巧不巧,我写代码十年,拍视频次数一只手数得过来,但写个“视频管理脚本”的冲动,比买相机还强烈。人就是这么矛盾,总想用最擅长的方式,去触碰最不擅长的领域。
第一集视频的真相:不是拍摄,是“文件命名”
如果你以为“365天第一集视频”是扛着相机去街头采风,那就天真了,我打开笔记本,屏幕上只有一行命令:
package main
import (
"fmt"
"os"
"time"
)
func main() {
today := time.Now().Format("2006-01-02")
folderName := fmt.Sprintf("episode-%s", today)
os.MkdirAll(folderName, 0755)
fmt.Println("创建目录:", folderName)
}
对,我的“第一集视频”就是创建了个文件夹。但你别笑,这背后有个硬核需求:我给自己定了个规矩,每天必须录一段10秒以上的视频,内容随意——可以是窗外下雨,可以是键盘敲击声,甚至是对着镜头说今天代码bug多烦人,然后这个Go程序会:
- 自动创建当天的目录(
episode-2025-07-21) - 生成一个
README.md,里面写当天日期和我的“今日心情预设” - 扫描视频文件,如果超过 2GB 就自动压缩提示(毕竟手机录4K太占地方)
你可能会问:这不就是个脚本吗?跟“第一集视频”有啥关系? 关系大了,我查了百度百科,“时间胶囊”这个词条说:把当下物品封存,留给未来的人打开,而我的Go程序,就是那个“封存”动作本身——每天跑一次,它逼着我面对“今天有没有值得记录的东西”。
费曼说:讲不清就完蛋了,所以我用表格拆解
物理学家费曼有个绝招:如果你不能把一个概念讲给大一新生听,说明你自己也没搞懂,我把“用Go管理365天视频”拆成了这张表:
| 模块 | 作用 | Go代码实现 | 现实比喻 |
|---|---|---|---|
| 日期引擎 | 生成标准化文件名 | time.Now().Format() |
像邮戳,盖在每一天的信封上 |
| 视频索引 | 记录拍摄时长、大小 | os.Stat() + JSON存储 |
像图书馆的目录卡 |
| 压缩预警 | 提醒空间不足 | 计算文件夹总大小 | 像冰箱贴上的购物清单 |
| 随机回放 | 随机挑一天视频 | math/rand 种子 |
像盲盒,但抽到的是自己的过去 |
你看,代码不复杂,复杂的是“坚持”这件事本身,我有个朋友,买了个无人机想拍365天城市变化,结果第7天就吃灰了,他说:“每天起飞太累,还要剪片。”但我的Go脚本不一样,它帮我完成90%的机械工作——今天拍完视频,拖进文件夹,运行 go run episode.go,它自动更新索引,顺手在终端里打印一句:
📅 第7天 | 今日视频: 35秒 | 累计: 4分12秒 | 坚持!
这句“坚持”是程序生成的,但每次看到,都像有人拍我肩膀。
我的“第一集”到底拍了啥?坦白局
写到这里,你可能好奇:我的“365天第一集视频”内容是什么? 说出来丢人——是Go语言的编译错误界面,那天我写了个正则表达式,死活匹配不上视频文件名,跑起来直接panic,我赶紧录了10秒,画面里是红色报错和我的叹气声。
但奇怪的是,过了三天,这10秒视频成了我最珍贵的素材,因为那天晚上,我查了《Go语言实战》这本书,终于搞懂了 filepath.Walk 的正确用法,第二天再看那段报错视频,我居然笑了——你看,人类就是这么善忘,连自己的尴尬都能当喜剧看。
技术细节:为什么偏偏用Go?
有人问我:“用Python不香吗?脚本更快。”但Go有个致命优点:编译出来是个二进制文件,这意味着:
- 没有依赖环境,我把
episode编译后扔手机里(用Termux),甚至扔树莓派上,都能跑 - 并发处理,如果某天拍了10个视频,Go的
goroutine能同时计算哈希值、生成缩略图,比Python快一个量级 - 静态类型,不会出现“属性拼错”这种低级错误——毕竟我要坚持365天,代码得经得起时间考验
你看,连选语言都像选生活态度,Python是随性的现代诗,Go是严谨的格律诗,而“365天视频”这种长期项目,我更需要格律诗的稳定感。
现在进行时:到第143天,我发现了“意外惊喜”
写到这儿,是我坚持的第143天。本来我以为会越拍越无聊,结果在第100天左右,程序帮我抓了个“彩蛋”:
- 我写了个功能:生成“本月视频热词云”,把每天视频的音频转文字(用
whisper模型,Go调用API),统计高频词 - 第100天时,词云里突然冒出“妈妈”这个词——因为我某天视频里说“今天给妈妈打电话了”
- 而这个词以前从没出现过。一瞬间,我意识到:原来我在第一集视频里说“这次一定要坚持”,而第100天我做到了,这两个镜头放在一起,才是真正的“第一集”意义——它不单是影像,是时间给的反馈。
就像《健忘村》那部电影里说的:记忆是痛苦的根源,但也是快乐的源头,我的Go脚本没帮忙删除记忆,反而像博物馆管理员,把每一帧日常小心归档。
给你的实操建议(别问我为啥这么懂)
如果你也想搞个“365天第一集视频”,别听那些“器材党”的,你只需要:
- 一台能跑Go的电脑(哪怕树莓派)
- 一个手机/相机(画质无所谓,但别用美颜,要真实)
- 一段5行代码的脚本(我上面贴了,够用)
但最关键的是:头七天最难受,你会觉得“今天没啥好拍”,或者“拍这玩意儿有啥用”。我的方法:让Go程序随机生成一个“今日主题”:
themes := []string{"窗外的云", "你桌上的杂物", "键盘上的指纹", "今天的午饭"}
fmt.Println("拍摄主题:", themes[rand.Intn(len(themes))])
这招特别管用,因为人类讨厌空旷的指令,但喜欢“具体的小任务”,这就像写作,不是“写一篇散文”,而是“写今天下午三点钟的雨声” ——瞬间有了画面感。
第365天会发生什么?
我还没到那一天,但我的Go程序里写好了“终极功能”:当第365个文件夹创建时,会生成一个 year-review.html,里面随机抽取12天的视频,拼成一个“年度蒙太奇”,我打算那天叫上几个朋友,一起看,看的时候尽量别哭太惨。
其实回头想想,365天第一集视频,本质上是给未来自己的一封动态信,而Go语言就是那支笔,不求华丽,只求书写流畅,就像今天,我花了40分钟改代码,只为了让程序能在视频文件被误删时自动提醒“别慌,有备份”。这大概就是工程思维和记录思维的结合——用确定性去守护不确定性。
窗外的天已经黑透了,我打开今天的文件夹,里面躺着一段9秒的视频:镜头晃动,正对着屏幕上的 go run 输出,然后我按下录制键,说了一句:
“第143天,今天代码跑通了,明天继续。”
然后程序打印出:
📅 第143天 | 今日视频: 9秒 | 累计: 5小时12分 | 继续...
我合上电脑,明天,又是新的第一集。
