前言
最近在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