一群人一年365天视频,我们用Golang写了个烦人的小工具,结果真香了

朋友圈里有人晒“连续打卡第365天”,配图是每天一张自拍,说实话,我第一次看到觉得这人有病吧,直到有一天,我们团队也接了个类似的活儿——...

朋友圈里有人晒“连续打卡第365天”,配图是每天一张自拍,说实话,我第一次看到觉得这人有病吧,直到有一天,我们团队也接了个类似的活儿——帮一个公益组织记录 一群人一年365天视频,每天每人录一段10秒的视频,最后剪成一个年度回忆。

我当时心想:这不就是大型社死现场吗?但真正动手才发现,管理和处理这些视频才是最让人头大的,你想想,假如有50个人,每人每天10秒,一年就是50×365×10秒,大约182500秒的视频素材,光是把这些视频从手机传到电脑上,就能让你怀疑人生。

我们一开始想直接用现成的云服务,但要么太贵,要么对视频格式支持不友好,后来我们决定自己搞个轻量级工具,用 Go语言 写,因为Go编译快、部署简单,而且处理并发上传和转码特别香。

我们遇到的核心问题:视频怎么“自动”归集?

最初我们想让每个人每天手动上传到某个网盘,结果第三天就有人忘传了,我们得换个思路——让视频自己“跑”过来

解决方案:写个后台守护进程

我们在服务器上用Go写了个小服务,它监听一个固定的API端点,每个人安装一个小客户端(也是Go写的,编译成单文件),每天固定时间扫描手机里的新视频,自动上传,关键点:

  • Goroutine 处理并发上传,不用排队
  • MD5 校验去重,防止同一个人传了同一段视频两次
  • 文件名自动重命名为“人名_日期_序号”,张三_20240301_001.mp4
// 伪代码示意,不是完整程序
func uploadVideo(client Client, videoPath string) error {
    md5hash := computeMD5(videoPath)
    // 检查是否已存在
    if redis.Exists(md5hash) {
        return nil // 已上传,跳过
    }
    // 上传到对象存储
    err := s3Upload(client.Bucket, videoPath, client.Name + "_" + date)
    if err == nil {
        redis.Set(md5hash, true, 24*time.Hour)
    }
    return err
}

你看,就这么简单的一段逻辑,解决了99%的重复上传问题。

一群人一年365天视频,我们用Golang写了个烦人的小工具,结果真香了

视频太多,怎么快速浏览?

当视频堆到几千个的时候,你不可能一个个点开看,我们做了个时间线概览页面,用Go的 html/template 渲染,把每天的视频缩略图拼成日历格式。

日期 张三 李四 王五
2024-01-01 ✅ 已上传 ❌ 未上传 ✅ 已上传
2024-01-02 ✅ 已上传 ✅ 已上传 ❌ 未上传
2024-12-31 ✅ 已上传 ✅ 已上传 ✅ 已上传

我们加了个小彩蛋:如果某天某个人的视频特别长(超过30秒),系统会自动发一条 表情包提示 :“您今天的视频堪比短视频,请节制。”

这个功能纯属沙雕,但真的提高了大家上传的积极性。人类真是奇怪的生物,正经的提醒没人看,恶搞的提示反而更有效。

一年365天,视频怎么自动剪辑?

这是最核心的需求,你不可能让一个人面对几千个视频手动剪辑,我们写了个简单的拼接工具,用Go调用 ffmpeg 命令行:

  • 按日期排序
  • 每天每个成员取一段(如果没上传,就用默认的“今日缺勤”占位卡片)
  • 自动生成片头和片尾
  • 输出一个完整的年度视频

有个小坑:不同手机录的视频编码格式不一样,有的H.264,有的H.265,甚至还有奇葩的AV1,Go这边我们统一用 ffmpeg 转换参数,先转成统一的H.264 baseline profile,保证兼容性。

cmd := exec.Command("ffmpeg", "-i", inputFile, 
    "-c:v", "libx264", "-preset", "fast", 
    "-crf", "23", outputFile)
err := cmd.Run()

这个过程说实话挺慢的,50个人的视频转码加拼接,跑了大概6个小时,但好在不需要人工干预,跑之前设置好,睡一觉起来就完成了。

最后成品是什么样?

视频全长大概42分钟,没有精心设计的转场,没有花哨的特效,就是一群人,每天10秒,凑在一起,有的画面是早上刷牙,有的是晚上加班,有的就是单纯对着镜头傻笑。

最打动人的反而是那些“不完美”的瞬间:有人在视频里打了个喷嚏,有人拍到一半手机掉了,有人录着录着被猫打断了,这些我们全都留下来了,没有剪掉。

你看,一群人一年365天视频这件事,技术上其实不复杂,真正难的是坚持——不是代码坚持,是人坚持,Go语言只是帮我们处理了那些烦人的、重复的、机械的工作,让我们能专注于更重要的东西:记录本身

如果你也想搞这么个项目,我建议你从今天开始录一段,不一定用Go,不一定用复杂的工具,就用手机自带的相机,因为当你一年后再回头看第一天的视频,你会感谢那个决定开始的自己。

就这样,我们的小工具还在跑着,已经第187天了,还有178天,就能看到最终版本了,说实话,我有点期待。

本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/nba/1008.html

(7)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-07-02

    我是be365的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-07-02

    希望本篇文章《一群人一年365天视频,我们用Golang写了个烦人的小工具,结果真香了》能对你有所帮助!

  • kyadmin
    kyadmin 2026-07-02

    本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名

  • kyadmin
    kyadmin 2026-07-02

    本文概览:朋友圈里有人晒“连续打卡第365天”,配图是每天一张自拍,说实话,我第一次看到觉得这人有病吧,直到有一天,我们团队也接了个类似的活儿——...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们