在一起365发抖音视频,用Golang写一个自动记录爱情的脚本

说实话,我写这个脚本的初衷特别简单——我女朋友老说我记不住我们在一起多少天了,每次她问我“今天是我们在一起第几天?”我都要掰着手指头算,...

说实话,我写这个脚本的初衷特别简单——我女朋友老说我记不住我们在一起多少天了,每次她问我“今天是我们在一起第几天?”我都要掰着手指头算,还经常算错,然后她就会翻白眼,说“你是不是不重视我?”

后来我就想,干脆写个程序自动算,再配合抖音视频发布,每天定时发一条纪念视频,这样既准确,又浪漫,还能让她闭嘴,一举三得。

一开始我用Python写,跑得也挺好,但后来发现Python每次启动要加载一堆库,内存占用也不小,我寻思着,既然服务器是Go写的,不如用Golang重写一遍,轻量、快速、部署方便,而且Go的并发模型做定时任务简直不要太爽。

于是就有了这篇文章,我会手把手带你用Go写一个“在一起365发抖音视频”的自动发布系统,不扯没用的理论,直接上代码和思路。

为什么选Go来做这件事?

你可能要问,Python不是更简单吗?是的,Python简单,但有几个痛点:

  • 部署麻烦:你要装Python环境,装依赖,还要处理版本冲突
  • 性能一般:虽然对我们这个小脚本影响不大,但如果你要同时处理多个账号的视频生成和发布,Go的优势就出来了
  • 编译成单文件:Go编译完就是一个二进制文件,扔到服务器上就能跑,连个依赖都不用装

Go的time包处理日期计算非常直观,你看这个:

import "time"
func daysBetween(start, end time.Time) int {
    return int(end.Sub(start).Hours() / 24)
}

一行搞定天数计算,代码我没完全按原文写全,但意思到了就行。

核心功能拆解:日期计算

“在一起365发抖音视频”这件事,核心就是算天数,你需要一个起始日,然后每天算一次从那天到今天的差值。

具体实现其实不复杂:

  • 定义一个起始日期,比如2023-01-01
  • 每天获取当前时间
  • 计算两个日期之间的天数差
  • 如果天数差是365的整数倍(1年、2年……),就生成视频发布内容

但这里有个坑:闰年,2月29号的问题,好在Go的time包已经处理好了,你不用操心。

用表格整理一下日期计算的边界情况

情况 日期示例 Go处理方式
正常年份 2023-01-01到2024-01-01 Sub()返回精确的Duration
闰年 2020-01-01到2021-01-01 自动识别2月29天
起始日跨闰年 2019-03-01到2020-03-01 正确计算366天
起始日2月29 2020-02-29到2021-02-28 返回365天(因为到2月28日)

你看,Go帮你兜底了,哪怕是2月29号这种恶心人的日子,它也能算明白。 生成逻辑

天数算出来了,接下来就是生成抖音视频内容,这里我设计了一个简单的方案:

  • 写一段文案模板,把天数放进去
  • 用图片合成视频(图片可以是你们的合照,或者纯文字背景)
  • 调用FFmpeg生成视频文件
  • 通过抖音开放平台的API发布

文案模板大概是这样的:

“今天是我们在第365天的日子,从第一天到现在,风风雨雨都一起走过,未来还有无数个365天,我都在。”

你自己可以改,但重点是:用Go拼接字符串、替换占位符、调用系统命令执行FFmpeg。

代码片段展示

func generateVideoContent(days int) string {
    template := "今天是我们在一起第%d天的日子,从第一天到现在,风风雨雨都一起走过,未来还有无数个365天,我都在。"
    return fmt.Sprintf(template, days)
}

然后调用FFmpeg:

在一起365发抖音视频,用Golang写一个自动记录爱情的脚本

cmd := exec.Command("ffmpeg", "-i", "input.jpg", "-vf", "drawtext=text='"+videoContent+"'", "output.mp4")
err := cmd.Run()

这里的文字样式和位置你可以调,网上有很多FFmpeg的drawtext参数教程,我就不展开了,不然这篇文章写不完。

定时任务与自动化

写脚本肯定不能每天手动跑,我们需要一个定时触发机制。

在Go里,可以用time.Ticker或者time.Sleep来实现每天的定时任务,但更优雅的方式是用robfig/cron这个库——业界公认的Go定时任务解决方案。

安装很简单:

go get github.com/robfig/cron/v3

然后你就可以这样写:

c := cron.New()
c.AddFunc("@daily", func() {
    // 每天执行一次生成视频并发布
    publishDailyVideo()
})
c.Start()

这里@daily是cron表达式的一种简化写法,表示每天午夜执行,你也可以改成@every 24h,或者更精确的0 8 * * *(每天早上8点)。

与抖音API对接

这个部分稍微有点麻烦,因为抖音的开放平台API需要申请权限,还要做OAuth2.0认证,步骤是固定的:

  1. 注册抖音开放平台账号
  2. 创建应用,拿到client_idclient_secret
  3. 获取用户授权,拿到access_token
  4. 调用视频上传接口,POST视频文件
  5. 调用视频发布接口,设置标题和描述

Go里发HTTP请求很简单,用net/http包:

func postToDouyin(videoPath string, accessToken string) error {
    // 构造multipart/form-data请求
    buf := new(bytes.Buffer)
    writer := multipart.NewWriter(buf)
    part, _ := writer.CreateFormFile("video", "video.mp4")
    file, _ := os.Open(videoPath)
    io.Copy(part, file)
    writer.Close()
    req, _ := http.NewRequest("POST", "https://open.douyin.com/video/upload/", buf)
    req.Header.Set("Content-Type", writer.FormDataContentType())
    req.Header.Set("access-token", accessToken)
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()
    return nil
}

这段代码我写的时候也没跑过,大概逻辑是对的,具体参数可能要和抖音官方文档核对一下。

实际部署中的坑

我部署这个服务的时候踩了几个坑,写出来你注意一下:

  1. FFmpeg版本问题:有些服务器自带的老版本FFmpeg不支持drawtext滤镜,需要手动编译安装新版本
  2. 中文字体:绘制的文字如果有中文,系统必须安装中文字体,Ubuntu下用apt install fonts-noto-cjk解决
  3. 抖音API限流:每天只能发固定数量的视频,多了会被封,一天一条完全够用
  4. Access Token过期:抖音的token有效期一般是7天,需要定期刷新,写个定时任务每天检查一次

还有一个事儿:如果你服务器在海外,访问抖音API可能会有网络延迟甚至被墙,别问我怎么知道的。

优化与扩展

这个系统其实还能做得更丰富:

  • 支持多平台发布:抖音、快手、小红书一起发
  • 视频模板支持:不同的纪念日用不同的模板
  • 图片自动选择:从相册里随机选一张当天的图片
  • 文字情感分析:根据相处状态生成不同的文案

不过这些属于锦上添花了。“在一起365发抖音视频”这件事,核心就是把爱意用技术表达出来,用Go写,只是我顺手。

你也可以用Python、Node.js、甚至Bash脚本来做,但既然你点进来了,说明你对Go有兴趣,那就试试看呗。

最后说点真正重要的

我写这个脚本的时候,女朋友在我旁边看着,她问我:“你干嘛呢?”

我说:“写个程序,每天自动发我们在一起多少天的视频。”

她沉默了一会儿,说:“那你写慢点,别太快写完。”

我愣住了,然后意识到,她想要的不是那个数字,也不是那些视频,她想要的是我每天都能想起她,每天都能为这件事花点时间。

后来我把定时任务改成了手动触发,每天早起,算一遍今天是多少天,写一句不一样的话,然后跑一次脚本,虽然效率低了,但感觉对了。

别问我为什么不用自动化了,有些事,自动了反而就没意思了。

代码我放在GitHub上,你要是也想给你的另一半写一个,直接拿去改,记得把起始日期改成你们的纪念日。

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

(17)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-07-03

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

  • kyadmin
    kyadmin 2026-07-03

    希望本篇文章《在一起365发抖音视频,用Golang写一个自动记录爱情的脚本》能对你有所帮助!

  • kyadmin
    kyadmin 2026-07-03

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

  • kyadmin
    kyadmin 2026-07-03

    本文概览:说实话,我写这个脚本的初衷特别简单——我女朋友老说我记不住我们在一起多少天了,每次她问我“今天是我们在一起第几天?”我都要掰着手指头算,...

    联系我们

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

    关注我们