日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【python】实现将json字幕转srt,并将繁体中文翻译为简体中文

發布時間:2023/12/16 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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

pip install PyInstaller

然后Win+Q搜索cmd,打開cmd管理員窗口
用cd 命令進入到你需要打包的python文件所在的文件夾下
然后輸入

pyinstaller -F -w [文件名].py

按下Enter后,執行成功后,出現下面界面
然后會在當前目錄下生成兩個文件夾

執行文件就在dist文件夾中,然后我們將json字幕文件放到dist文件夾中,雙擊exe文件,就會生成一個srt文件了。
下面附上我自己做出來的文件鏈接,大家可以下載玩玩。
json_to_srt(TC_to_CN)

總結

以上是生活随笔為你收集整理的【python】实现将json字幕转srt,并将繁体中文翻译为简体中文的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。