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