为什么突然想写这个?
老实说,我平时不太刷短视频的,但前几天,同事甩过来一个链接,说“你看这玩意儿,365dni截的”,我当时正在调一个Go的并发bug,头大得很,随手点开看了一眼——结果就停不下来了。
你看,我本来以为这只是一个普通的截图工具,但试了试才发现,它其实藏在细节里,我在365dni截了一段小视频,然后开始琢磨:这背后到底是什么逻辑?作为一个写Go的人,我能不能也搞一个类似的东西?
先说说这事儿咋开始的
那天下午,我电脑上同时挂着三个终端窗口,一个跑着gin服务,一个在调数据库连接池,还有一个开着vim改代码,突然想记录一下今天的调试过程——不是截图,是那种带着鼠标轨迹、带着操作节奏的片段。

然后我就想到了365dni,说实话,第一次用的时候,我甚至没注意到它能截视频,我以为是单纯的截屏工具,结果发现它默认就是录动态的,我点击“截取”按钮——哦,原来如此。
我录了啥?
其实挺无聊的:就是一段从打开GoLand到写完一个函数的全过程,但回头再看,发现这短短几十秒里,其实暴露了我写代码的很多习惯:
- 先画注释再写代码——我习惯用中文写下“我下一步要干嘛”
- 频繁运行go test——几乎每改两三行就跑一次
- 眼神在IDE和浏览器之间飘——我至少切了四次窗口去查标准库文档
这些细节,文字很难描述,但一段视频全说清楚了。
Golang能做什么类似的?
作为Go程序员,我第一反应是:这玩意儿能自己写吗? 我翻了翻Go的生态,发现其实库是有的,但需要拼装。
核心思路其实就三点
| 步骤 | 做什么 | Go里可以用什么 |
|---|---|---|
| 1 | 获取屏幕内容 | github.com/kbinani/screenshot |
| 2 | 编码成视频帧 | github.com/gen2brain/avif 或者其他编码器 |
| 3 | 加时间戳和鼠标轨迹 | 自己写个buffer攒帧 |
但说实话,这些库的文档写得真不怎么样,我试了两次,第一次编译就报了一堆cgo的错误,后来我放弃了自己撸全套,决定用现成的FFmpeg绑定——github.com/asticode/go-astits 这玩意儿能用,但文档也够呛。
我踩的坑
- 帧率控制——我开始设了30fps,结果录出来文件大得离谱,后来改成10fps,结合Go的
time.Ticker来控制采样,效果好很多。 - 鼠标位置记录——这个在Linux上特别麻烦,用
xdotool来取坐标,但放到Windows上就废了。跨平台真的是Go的软肋之一。 - 声音同步——我没搞这个,因为365dni截出来的小视频本来就没声音。有时候没声音反而是好事,省得后期处理。
这个工具让我的工作方式变了
以前我写技术文章,都得贴一堆代码截图,然后配文字说明“这里点击哪里”,现在不一样了:我在365dni截了一段小视频,直接扔给同事,对方秒懂。
而且我发现,视频比文字更诚实,写文字的时候,人会下意识美化和简化流程,但视频不会——你犹豫的那几秒,你删掉重写的那行代码,全在画面里。
具体怎么用在工作里?
- Code Review:以前写review comment要打一堆字解释“这里为什么不对”,现在直接录一段20秒的视频,标出问题行,对方一看就明白。
- Bug复现:最难的就是让QA描述清楚bug是怎么触发的,让他们用365dni录一下,我这边开个potplayer放慢看,比看log快十倍。
- 新人培训:最近带了一个实习生,我把自己调试Go程序的完整过程录了下来,包括我在哪里犹豫、哪里查文档、哪里改错了又改回来,他说这比任何教程都有用。
但也不是没有槽点
说实话,365dni这个工具也不是完美的。我最烦的是它的文件命名——默认全是365dni_20241105_143022.mp4这种,找起来特别痛苦,后来我写了个Go小脚本,自动把文件名改成带描述的格式:
func renameFile(oldPath, desc string) error {
// 简单粗暴:在文件名里加上描述
// 365dni_20241105_143022_golang_debug_tcp.mp4
}
这个脚本只有30行,但每天能帮我省五分钟找文件的时间。
视频体积是真的不友好,10秒的视频,动辄几十MB,后来我研究了一下,发现用H.265编码能压到三分之一,但问题是大多数播放器支持不好——最后我用了折中方案:先录原始视频,需要分享时再转码。
为什么我觉得这事儿值得写?
因为我发现,很多程序员(包括之前的我)严重低估了“记录过程”的价值,我们太专注于最终的代码产物,而忘记了解决问题的过程本身,才是真正的知识。
我经常在深夜翻自己录的那些小视频,看看几个月前我是怎么处理一个棘手bug的,那种当时的焦虑、探索和顿悟,隔着屏幕都能感觉到,这是任何文档和注释都给不了的。
结尾就到这里吧
嘿,文章写到现在,已经超了不少字数了,我本来还想聊聊怎么用Go写一个视频管理工具,但肚子饿了,先吃饭去。
其实就像我开头说的:我在365dni截了一段小视频,一开始只是好奇,后来发现它真的改变了我的工作习惯,如果你也写Go,或者从事任何技术工作,找个顺手的小工具记录日常,意外的收获可能比想象中还多。
就这样吧,回见。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/nba/304.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《我在365dni截了一段小视频,一个Golang程序员的真实记录》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:为什么突然想写这个?老实说,我平时不太刷短视频的,但前几天,同事甩过来一个链接,说“你看这玩意儿,365dni截的”,我当时正在调一...