2023.3.11更新,新鲜出炉了一个小工具,电脑端访问最佳,可能不稳定,速度有点慢,http://101.43.93.226/tools/bilibili

最近想学一点英语,在b站上找到了TED合集,想把里面的字幕给整下来,所以就简单写了一个脚本,有兴趣的同学可以自取。

  1. 拿到字幕
    在网页按F12,刷新页面,在network里过滤.json, 出来的两个就是字幕了。

  2. 解析字幕
    代码如下,直接创建一个main.go文件就好

package main

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
	"strings"
)

func main() {
	Parse()
}

func Parse() {
	dir, _ := os.Getwd()

	chinese := do(filepath.Join(dir, "/script/chinese.json"))
	en := do(filepath.Join(dir, "/script/en.json"))

	resultFile := filepath.Join(dir, "/script/result")

	file, err := os.Create(resultFile)
	if err != nil {
		fmt.Println(err)
	}
	for i, item := range en {
		file.WriteString(item[0])
		file.WriteString(item[1])
		file.WriteString(chinese[i+1][1]) // 中文脚本多了一行翻译人员,如果没有则把i+1改成i
		file.WriteString("\n")
	}

	file.Close()
}

func do(path string) (lines [][]string) {

	contentBytes, err := os.ReadFile(path)
	if err != nil {
		fmt.Println(err)
	}

	var contentJson map[string]interface{}
	err = json.Unmarshal(contentBytes, &contentJson)

	body := contentJson["body"]

	scriptJson, _ := body.([]interface{})
	for _, item := range scriptJson {
		itemMap, _ := item.(map[string]interface{})
		from, _ := itemMap["from"].(float64)
		to, _ := itemMap["to"].(float64)
		text, _ := itemMap["content"].(string)
		text = strings.ReplaceAll(text, "\n", " ")

		lines = append(lines, []string{fmt.Sprintf("from %v to %v \n", from, to), fmt.Sprintf("%v \n", text)})
	}
	return lines
}

注意设置好路径,执行go run main.go就行咯。

  1. 看效果