B站英文教學視訊的字幕獲取 學習必看!

Dba_sys發表於2021-06-27

前言

最近在B站看一些純英文的課程,視訊課程有的是純中文字幕的,有的是純英文字幕的。由於英文的重要性,一份字幕的文件在我們觀看後,留著日後粗略再讀是很有益處的。但是為了得到這個英文字幕走了許多彎路。最開始竟然用線上AI視訊轉文字的方式,用了九錘聽寫(效果相對好),i笛雲聽(效果相對差)。最後才發現,B站的字幕很多時候都是一個json檔案。那我們可以獲取這個檔案,用python將它的conent(字幕)提取出來,做一個文字檔案。

1 cc字幕下載

01.cc字幕是視訊下方黑底白字的那一欄,如果沒有則不可以下載
02.我們先點開一個有cc字幕的視訊,首先關閉cc字幕,並開啟除錯臺(右鍵點選檢查 or F12)的 Network

03.因為一個視訊有很多的東西需要傳輸,這裡Network存在很多條資訊,我們點選clear讓他少一點,之後點選開啟字幕,讓他傳輸字幕json檔案來,我們發現下面突然出現一個json檔案

04.雙擊json檔案,ctrl+A全部複製,並貼上到一個.txt檔案中,後改字尾為.json

另一種方法(簡單)

開啟視訊,並開啟字幕,開啟控制檯的 Network,在Filter裡鍵入json,點選重新整理視訊即可。

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才可以執行指令碼

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

參考
簡書 攻城老溼
csdn pengjunlee 使用Python解析JSON

相關文章