【python】实现将json字幕转srt,并将繁体中文翻译为简体中文
【python】實現將json字幕轉srt,并將繁體中文翻譯為簡體中文
- 背景
- 實現過程
- json轉srt
- 創建python文件
- 將json文件復制到同一文件夾下
- 錯誤1
- 運行成功
- 代碼(json_to_srt)
- 繁體中文轉簡體中文
- 安裝pylangtools
- 導入pylangtools包
- 分析示例
- 修改代碼
- 運行成功
- 最終代碼
- 打包為可執行文件
背景
前兩天剪輯找視頻資源的時候下載的一個視頻沒有中文字幕,找到的字幕文件只有json的繁體中文字幕文件,個人使用的PotPlayer播放器不支持json字幕,所以我決定給它轉換成簡體中文的srt格式字幕文件,希望對大家有所幫助。
實現過程
json轉srt
首先我們需要將json文件改變其中的編碼規則信息轉為srt文件。搜了一圈找到
json字幕轉換為srt字幕python。
創建python文件
創建一個py后綴的文件并將代碼復制進去
將json文件復制到同一文件夾下
比如說我們創建的python文件在桌面,那么只需要將json文件放到桌面即可
錯誤1
運行,出現如下錯誤
看了下json文件
發現14行循環域錯誤,我們只需要在 datas后面加上[‘body’] 即可
for data in datas:>>>>for data in datas['body']運行成功
再次編譯,成功運行,生成srt文件
查看srt文件,沒有問題
代碼(json_to_srt)
import json import math import osfile = '' # 這個變量用來保存數據 i = 1 for doc in os.listdir(): # 遍歷當前文件夾的所有文件if (doc[-4:] == 'json'): # 若是json文件則進行處理name = doc[:-5] # 提取文件名# 將此處文件位置進行修改,加上utf-8是為了避免處理中文時報錯with open(doc, encoding='utf-8') as f:datas = json.load(f) # 加載文件數據f.close()for data in datas['body']:start = data['from'] # 獲取開始時間stop = data['to'] # 獲取結束時間content = data['content'] # 獲取字幕內容file += '{}\n'.format(i) # 加入序號hour = math.floor(start) // 3600minute = (math.floor(start) - hour * 3600) // 60sec = math.floor(start) - hour * 3600 - minute * 60minisec = int(math.modf(start)[0] * 100) # 處理開始時間file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2) # 將數字填充0并按照格式寫入file += ' --> 'hour = math.floor(stop) // 3600minute = (math.floor(stop) - hour * 3600) // 60sec = math.floor(stop) - hour * 3600 - minute * 60minisec = abs(int(math.modf(stop)[0] * 100 - 1)) # 此處減1是為了防止兩個字幕同時出現file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2)file += '\n' + content + '\n\n' # 加入字幕文字i += 1with open('./{}.srt'.format(name), 'w', encoding='utf-8') as f:f.write(file) # 將數據寫入文件f.close()接下來就是實現將繁體中文轉化為簡體中文
繁體中文轉簡體中文
于是我又雙在網上搜索,找到文章繁體簡體轉換的python包pylangtools
根據文章示例,我們將對代碼進行改動
安裝pylangtools
運行cmd窗口,或者pycharm中的Terminal窗口運行下面代碼
pip install pylangtools導入pylangtools包
在文件最上方添加第三方包,代碼:
from pylangtools.langconv import Converter分析示例
然后根據示例
from pylangtools.langconv import Converterif __name__=="__main__":traditional_sentence = '陳奕迅'simplified_sentence = Converter('zh-hans').convert(traditional_sentence)print(simplified_sentence)#陳奕迅我們可以清楚的知道
對于示例:
traditional_sentence表示需要翻譯的句子
simplified_sentence用來存放翻譯后的句子
對于現有代碼,在每次循環中:
先用 content 來裝下一次循環中獲取的字幕,再將它拼接到字段中寫入文件
于是我們可以在每次寫入文件之前將它作為 traditional_sentence調用Converter(‘zh-hans’).convert(traditional_sentence)方法,并將得到的數據返回到 content 。
修改代碼
經過上述考慮,我們可以在第18行后面添加以下代碼:
content = Converter('zh-hans').convert(content)也可以將第18行代碼改寫為
content = Converter('zh-hans').convert(data['content'])運行成功
經過編譯和運行,我們得到翻譯過的srt文件,如圖所示:
最終代碼
import json import math import os from pylangtools.langconv import Converterfile = '' # 這個變量用來保存數據 i = 1 for doc in os.listdir(): # 遍歷當前文件夾的所有文件if (doc[-4:] == 'json'): # 若是json文件則進行處理name = doc[:-5] # 提取文件名# 將此處文件位置進行修改,加上utf-8是為了避免處理中文時報錯with open(doc, encoding='utf-8') as f:datas = json.load(f) # 加載文件數據f.close()for data in datas['body']:start = data['from'] # 獲取開始時間stop = data['to'] # 獲取結束時間content = data['content'] # 獲取字幕內容content = Converter('zh-hans').convert(content) # 將繁體中文轉化為簡體中文#content = Converter('zh-hans').convert(data['content'])此行等同于上面兩行代碼file += '{}\n'.format(i) # 加入序號hour = math.floor(start) // 3600minute = (math.floor(start) - hour * 3600) // 60sec = math.floor(start) - hour * 3600 - minute * 60minisec = int(math.modf(start)[0] * 100) # 處理開始時間file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2) # 將數字填充0并按照格式寫入file += ' --> 'hour = math.floor(stop) // 3600minute = (math.floor(stop) - hour * 3600) // 60sec = math.floor(stop) - hour * 3600 - minute * 60minisec = abs(int(math.modf(stop)[0] * 100 - 1)) # 此處減1是為了防止兩個字幕同時出現file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2)file += '\n' + content + '\n\n' # 加入字幕文字i += 1with open('./{}.srt'.format(name), 'w', encoding='utf-8') as f:f.write(file) # 將數據寫入文件f.close()打包為可執行文件
我們還可以將做好的程序打包成為可執行文件(.exe),于是我又雙叒去網上搜索了一下。
終于給我找到了。
又是熟悉的pip install
然后Win+Q搜索cmd,打開cmd管理員窗口
用cd 命令進入到你需要打包的python文件所在的文件夾下
然后輸入
按下Enter后,執行成功后,出現下面界面
然后會在當前目錄下生成兩個文件夾
執行文件就在dist文件夾中,然后我們將json字幕文件放到dist文件夾中,雙擊exe文件,就會生成一個srt文件了。
下面附上我自己做出來的文件鏈接,大家可以下載玩玩。
json_to_srt(TC_to_CN)
總結
以上是生活随笔為你收集整理的【python】实现将json字幕转srt,并将繁体中文翻译为简体中文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 命令行测速工具 linux,Linux命
- 下一篇: websocket python爬虫_p