当前位置:首页 > 能源 > 正文

赞美诗365首唱谱视频,我用Golang写了个小工具,终于不用再翻纸质谱了

  • 能源
  • 2026-06-30 09:34:33
  • 246
摘要: 说实话,我一开始对“赞美诗365首唱谱视频”这个需求是有点懵的,我老婆是教会唱诗班的,每周都要排练,她老跟我抱怨说纸质谱子翻来翻...

说实话,我一开始对“赞美诗365首唱谱视频”这个需求是有点懵的,我老婆是教会唱诗班的,每周都要排练,她老跟我抱怨说纸质谱子翻来翻去太麻烦,尤其是第365首《恩光歌》,每次要找半天,我说,那干脆我写个程序,把唱谱视频按序号整理好,还能自动播放,她白了我一眼:“你行吗?”——这话我可不爱听。

为什么是Golang?

我本身是搞后端开发的,Python、Node.js都用过,但这次选Golang,主要是因为:

  • 编译快,生成单个二进制文件:我老婆的电脑就一普通笔记本,我不想让她装一堆依赖,Golang编译出来就是一个exe,双击就跑。
  • 并发处理视频流不卡:唱谱视频有的分辨率高,Golang的goroutine处理起来比回调地狱舒服多了。
  • 标准库齐全:不需要第三方库就能搞定HTTP、JSON解析、文件操作——对,我还真就只用标准库。

赞美诗365首唱谱视频到底是什么?

简单说,就是基督教赞美诗第365首《恩光歌》的唱谱视频,唱谱视频不是卡拉OK那种字幕,而是把谱子显示在画面上,同时有伴奏或者人声跟着谱子走,对于练习者来说,不用自己识谱,跟着视频唱就行,市面上这类资源其实挺杂乱的,有的在YouTube,有的在B站,画质音质参差不齐。

我拿Golang做了三件事

第一件事:批量下载并重命名

我从一个公开的赞美诗资源站上拿到了JSON列表,里面是每首歌的标题、序号、视频链接,但问题是,文件名都是乱码哈希值,“f3a2c9b8.mp4”,根本不知道是哪首,我写了个小脚本:

package main
import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "path/filepath"
)
type Hymn struct {
    ID   int    `json:"id"`string `json:"title"`
    URL   string `json:"url"`
}
func main() {
    // 读取JSON
    data, _ := os.ReadFile("hymns.json")
    var hymns []Hymn
    json.Unmarshal(data, &hymns)
    for _, h := range hymns {
        if h.ID == 365 {
            resp, _ := http.Get(h.URL)
            defer resp.Body.Close()
            // 注意:这里得先创建目录
            outPath := filepath.Join("videos", fmt.Sprintf("赞美诗%d_%s.mp4", h.ID, h.Title))
            outFile, _ := os.Create(outPath)
            io.Copy(outFile, resp.Body)
            outFile.Close()
            fmt.Printf("已下载:%s\n", outPath)
        }
    }
}

代码写得粗糙,但够用,我老婆看到文件夹里整整齐齐的 “赞美诗365_恩光歌.mp4”,眼睛都亮了。

第二件事:自动生成播放列表HTML

她想要一个像Netflix一样的界面,能点选序号播放,我直接Golang生成HTML,把视频文件列表写成

    标签,每个
  • 里放一个