前言

最近在B站看一些纯英文的课程,视频课程有的是纯中文字幕的,有的是纯英文字幕的。由于英文的重要性,一份字幕的文档在我们观看后,留着日后粗略再读是很有益处的。但是为了得到这个英文字幕走了许多弯路。最开始竟然用在线AI视频转文本的方式,用了九锤听写(效果相对好),i笛云听(效果相对差)。最后才发现,B站的字幕很多时候都是一个json文件。那我们可以获取这个文件,用python将它的conent(字幕)提取出来,做一个文本文件。

1 cc字幕下载

01.cc字幕是视频下方黑底白字的那一栏,如果没有则不可以下载
02.我们先点开一个有cc字幕的视频,首先关闭cc字幕,并打开调试台(右键点击检查 or F12)的 Network
B站英文教学视频的字幕获取 学习必看!-LMLPHP
03.因为一个视频有很多的东西需要传输,这里Network存在很多条信息,我们点击clear让他少一点,之后点击开启字幕,让他传输字幕json文件来,我们发现下面突然出现一个json文件
B站英文教学视频的字幕获取 学习必看!-LMLPHP
04.双击json文件,ctrl+A全部复制,并粘贴到一个.txt文件中,后改后缀为.json
B站英文教学视频的字幕获取 学习必看!-LMLPHP

另一种方法(简单)

打开视频,并开启字幕,打开控制台的 Network,在Filter里键入json,点击刷新视频即可。
B站英文教学视频的字幕获取 学习必看!-LMLPHP

2 python批量json字幕文件转换

我们将需要转换的json文件都放到一个新建的文件夹下,这个文件夹里只有json文件,并且不存在子文件夹。路径名称需要全部英文。

import json
import os

def convert_json_to_txt(json_files_path):
    json_files = os.listdir(json_files_path) #返回该路径下的json文件列表
    txt_files_path = os.path.join(json_files_path, 'txt') #拼接出在json文件夹中的子txt文件夹
    isExists = os.path.exists(txt_files_path) #判断这个文件存不存在 不存在建立相应的文件夹 txt
    if not isExists:
        os.mkdir(txt_files_path)

    for json_file in json_files:
        file_name = json_file.replace(json_file[-5:], '.txt') #改变转换后字幕的后缀 .json是5个字符
        file = ''  # 这个变量用来保存数据
        i = 1
        # 将此处文件位置进行修改,加上utf-8是为了避免处理中文时报错
        with open(os.path.join(json_files_path, json_file), encoding='utf-8') as f:
            datas = json.load(f)# 加载文件数据 json.load()将josn文件对象转换为python字典对象
            f.close()

        for data in datas['body']:
            content = data['content'].replace('\n',' ')  # 获取字幕内容 并去除掉里面莫名其妙的换行
            file += content + ' '   # 加入字幕文字
            # 5句话换一行
            if i % 5 == 0 :
                file += '\n'
            i += 1

        with open(os.path.join(txt_files_path, file_name), 'w', encoding='utf-8') as f:
            f.write(file)  # 将数据写入文件

if __name__ == '__main__':
    json_folder_path = 'F:\\Code\\json\\Json' #json字幕文件的路径(注意路径的格式)
    convert_json_to_txt(json_folder_path)

注意要点

  • 将if name == 'main':里的文件路径改成自己的。
  • 这个程序不要多次使用,用过一次之后就清除对应的json文件,和txt文件夹,否则会报错。或者再次用的时候新建文件夹来存储新的json字幕,再改程序中的路径来用。
  • 电脑里要有python才可以运行脚本
    B站英文教学视频的字幕获取 学习必看!-LMLPHP
    B站英文教学视频的字幕获取 学习必看!-LMLPHP
os.listdir('C:\\')
['$360Section', '$Recycle.Bin', '$WinREAgent', 'AMD', 'Documents and Settings', 'DumpStack.log.tmp', 'hiberfil.sys', 'hp', 'inetpub', 'Intel', 'KRECYCLE', 'pagefile.sys', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'QMDownload', 'Recovery', 'SDKTemp', 'swapfile.sys', 'SWSetup', 'System Volume Information', 'SYSTEM.SAV', 'Users', 'Windows', 'Windows.old']
os.path.join('C:\\','txt')
'C:\\txt'
os.path.join('C:\\a','txt')
'C:\\a\\txt'
os.path.exists('C:\\a\\txt')
False
06-28 00:48